第二周技术作业

2020-06-22  本文已影响0人  神牧

一、描述Linux发行版的系统目录名称命名规则以及用途。

Linux系统基础目录的命名法则:

    遵循FHS(Filesystem Hierarchy Standard)标准
    严格区分大小写
    目录也是文件,在同一路径下,两个文件不能同名
    支持使用除 / 以外的任意字符
    最长字符不能超过255个字符

Linux发行版基本目录架构及用途描述 基本目录结构及用途.png

二、描述文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息?

在Linux中,我们可以stat命令查看文件的元数据

[root@centos7 scripts]# stat httpdinstall.sh 
File: ‘httpdinstall.sh’
Size: 992         Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d  Inode: 8433096     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-06-21 18:17:56.185996379 +0800
Modify: 2020-06-21 18:17:40.853997126 +0800
Change: 2020-06-21 18:17:40.853997126 +0800
Birth: -

其中:

File:文件名
Size:文件大小(单位:byte)
Blocks:文件占用的数据块个数
IO Block:文件所占用数据块的块容量(单位:byte)
regular file:普通文件(文件类型)
Device:设备号(十六进制/十进制)
Inode:索引节点
Links:硬连接数(1代表没有其它的硬连接)
Access:第一个Access,权限(八进制/rwx格式)
Uid:所属主(ID号/名称)
Gid:所属组(ID号/名称)
Access:第二个Access,最近访问时间
Modify:最近数据修改时间
Change:最近元数据修改时间
Birth:创建时间

我们可以用touch命令修改文件的时间戳信息:

需要注意的是Changetime无法指定进行修改,在atime以及mtime修改后,ctime自动进行更新。
-c: 指定的文件路径不存在时不予创建;
-a: 仅修改access time;
-m:仅修改modify time;
-t STAMP
[[CC]YY]MMDDhhmm[.ss]

文件的三个时间戳详细介绍如下:
atime:访问时间:读一次文件的内容,这个时间就会更新。比如more、cat等命令。ls、stat命令不会修改atime
mtime:修改时间:修改时间是文件内容最后一次被修改的时间。比如:vim操作后保存文件。ls -l列出的就是这个时间
ctime:状态改动时间。是该文件的inode节点最后一次被修改的时间,通过chmod、chown命令修改一次文件属性,这个时间就会更新。

三、总结软连接和硬连接区别,并用实例操作说明。

硬链接

符号(或软)链接

实例:

创建硬链接

可以看到硬链接文件与源文件inode节点号相同,链接数为2,删除源文件后链接数递减,硬链接文件仍可查看打开;创建跨分区硬链接时失败。
[root@centos7 data]# ln 1 1.1
[root@centos7 data]# ll -i 1 1.1
71 -rw-r--r-- 2 root root 16 Jun 22 09:05 1
71 -rw-r--r-- 2 root root 16 Jun 22 09:05 1.1
[root@centos7 data]# rm -rf 1
[root@centos7 data]# cat 1.1
123
123
123
123
[root@centos7 data]# ll -i 1.1
71 -rw-r--r-- 1 root root 16 Jun 22 09:05 1.1
[root@centos7 data]# ln /etc/issue issue
ln: failed to create hard link ‘issue’ => ‘/etc/issue’: Invalid cross-device link

创建软连接

可以看到软链接文件与源文件inode不同,所以是不同文件,与源文件存在映射关系,移动源文件后,软链接文件无法查看。
[root@centos7 data]# ln -s /etc/issue issue.link
[root@centos7 data]# ll -i issue.link 
69 lrwxrwxrwx 1 root root 10 Jun 22 08:42 issue.link -> /etc/issue
[root@centos7 data]# ll -i /etc/issue
16798756 -rw-r--r--. 1 root root 43 May 10 21:25 /etc/issue
[root@centos7 data]# mv /etc/issue /etc/issue.bak
[root@centos7 data]# cat issue.link 
cat: issue.link: No such file or directory

四、Linux 上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。

复制命令—cp

语法
cp [选项] 源文件 目标文件
源文件\目标             不存在                 存在且为文件              存在为目录
一个文件         创建dest,并将src填充         覆盖目标文件        在dest新建src同名文件并填充
多个文件                 报错                     报错           在dest新建src同名文件并填充
目录 -r    创建dest同名目录,src下文件复制其中      报错      在dest新建src同名目录,src下文件复制其中
常用选项
-i 覆盖前提示
-n 不覆盖,注意两者顺序
-r, -R 递归复制目录及内部的所有内容
-a 归档,相当于-dR --preserv=all
-d --no-dereference --preserv=links 不复制原文件,只复制链接名
--preserv[=ATTR_LIST]
              mode: 权限
              ownership: 属主属组
              timestamp: 
              links
              xattr
              context
              all
  -p 等同--preserv=mode,ownership,timestamp
-v --verbose
-f --force
-u --update 只复制源比目标更新文件或目标不存在的文件
-b 目标存在,覆盖前先备份,形式为 filename~
--backup=numbered 目标存在,覆盖前先备份加数字后缀

实例:

创建测试文件
[root@centos7 data]# touch test{1,5}
[root@centos7 data]# vim test1
[root@centos7 data]# cat test1
123
123

复制test1到test2(不存在自动生成)
[root@centos7 data]# cp test1 test2
[root@centos7 data]# cat test2
123
123

创建目录
[root@centos7 data]# mkdir test

复制多个文件到目录
[root@centos7 data]# cp test1 test2 test/
[root@centos7 data]# ll test
total 8
-rw-r--r-- 1 root root 8 Jun 22 11:11 test1
-rw-r--r-- 1 root root 8 Jun 22 11:11 test2

复制test1到test5,将test5内容覆盖
[root@centos7 data]# cp test1 test5
cp: overwrite ‘test5’? y
[root@centos7 data]# cat test5
123
123

复制目录到另一目录
[root@centos7 data]# cp -r scripts/ test
[root@centos7 data]# ll test
total 8
drwxr-xr-x 2 root root 57 Jun 22 11:13 scripts
-rw-r--r-- 1 root root  8 Jun 22 11:11 test1
-rw-r--r-- 1 root root  8 Jun 22 11:11 test2

复制源目录到另一目录(不存在自动创建),将源目录下文件复制至此目录下
[root@centos7 data]# cp -r scripts/ testnodir
[root@centos7 data]# ll testnodir/
total 4
-rw-r--r-- 1 root root 992 Jun 22 11:20 httpdinstall.sh
[root@centos7 data]# ll scripts/
total 4
-rw-r--r-- 1 root root 992 Jun 21 18:17 httpdinstall.sh

复制文件至目录
[root@centos7 data]# cp test5 test
[root@centos7 data]# ll test
total 12
drwxr-xr-x 2 root root 57 Jun 22 11:13 scripts
-rw-r--r-- 1 root root  8 Jun 22 11:11 test1
-rw-r--r-- 1 root root  8 Jun 22 11:11 test2
-rw-r--r-- 1 root root  8 Jun 22 11:13 test5

移动和重命名文件—mv

语法
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
常用选项:
 -i 交互式
 -f 强制
 -b 目标存在,覆盖前先备份

实例:

[root@centos7 data]# touch test1   //创建测试文件
[root@centos7 data]# ll
total 4
-rw-r--r-- 1 root root  16 Jun 22 09:05 1.1
drwxr-xr-x 2 root root  57 Jun 21 18:09 scripts
drwxr-xr-x 5 root root 141 Jun 22 09:05 sourcepackage
-rw-r--r-- 1 root root   0 Jun 22 11:24 test1
[root@centos7 data]# mv test1 test123    //重命名
[root@centos7 data]# ll
total 4
-rw-r--r-- 1 root root  16 Jun 22 09:05 1.1
drwxr-xr-x 2 root root  57 Jun 21 18:09 scripts
drwxr-xr-x 5 root root 141 Jun 22 09:05 sourcepackage
-rw-r--r-- 1 root root   0 Jun 22 11:24 test123
[root@centos7 data]# mv test123 /tmp/     //移动文件至目录
[root@centos7 data]# ll /tmp/test123 
-rw-r--r-- 1 root root 0 Jun 22 11:24 /tmp/test123
[root@centos7 data]# touch test123          //创建同名文件
[root@centos7 data]# mv -b /tmp/test123 test123     //移动文件覆盖时先备份
mv: overwrite ‘test123’? y
[root@centos7 data]# ll
total 4
-rw-r--r-- 1 root root  16 Jun 22 09:05 1.1
drwxr-xr-x 2 root root  57 Jun 21 18:09 scripts
drwxr-xr-x 5 root root 141 Jun 22 09:05 sourcepackage
-rw-r--r-- 1 root root   0 Jun 22 11:24 test123
-rw-r--r-- 1 root root   0 Jun 22 11:25 test123~    //备份文件

删除命令—rm

语法
rm [OPTION]... FILE...
常用选项
-f, --force 忽略不存在的文件,从不给出提示
-i, --interactive 进行交互式删除
-r, -R, --recursive 指示rm将参数中列出的全部目录和子目录均递归地删除。
-v, --verbose    详细显示进行的步骤

实例:

[root@centos7 data]# ll
total 4
-rw-r--r-- 1 root root  16 Jun 22 09:05 1.1
drwxr-xr-x 2 root root  57 Jun 21 18:09 scripts
drwxr-xr-x 5 root root 141 Jun 22 09:05 sourcepackage
-rw-r--r-- 1 root root   0 Jun 22 11:24 test123
-rw-r--r-- 1 root root   0 Jun 22 11:25 test123~
[root@centos7 data]# rm -f test123     //强制删除无需询问
[root@centos7 data]# rm -i test123~     //删除时需询问确认后删除
rm: remove regular empty file ‘test123~’? y
[root@centos7 data]# ll
total 4
-rw-r--r-- 1 root root  16 Jun 22 09:05 1.1
drwxr-xr-x 2 root root  57 Jun 21 18:09 scripts
drwxr-xr-x 5 root root 141 Jun 22 09:05 sourcepackage
[root@centos7 data]# rm -v 1.1   //显示删除过程
rm: remove regular file ‘1.1’? y
removed ‘1.1’
[root@centos7 data]# mkdir testdir     //创建目录
[root@centos7 data]# touch testdir/123     //创建目录下文件
[root@centos7 data]# rm -d testdir/      //删除空目录选项
rm: cannot remove ‘testdir/’: Directory not empty     //不是空目录删除失败
[root@centos7 data]# rm -r testdir/      //删除目录及递归子文件
rm: descend into directory ‘testdir/’? y
rm: remove regular empty file ‘testdir/123’? y
rm: remove directory ‘testdir/’? y
[root@centos7 data]# ll
total 0
drwxr-xr-x 2 root root  57 Jun 21 18:09 scripts
drwxr-xr-x 5 root root 141 Jun 22 09:05 sourcepackage

五、复制/etc/profile至/tmp/日录, 用查找替换命令删除/tmp/profile文件中的行首的空白字符

[root@centos7 data]# mv /etc/profile /data/
[root@centos7 data]# cat profile    //查看原内容
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
}


if [ -x /usr/bin/id ]; then
    if [ -z "$EUID" ]; then
        # ksh workaround
        EUID=`/usr/bin/id -u`
        UID=`/usr/bin/id -ru`
    fi
    USER="`/usr/bin/id -un`"
    LOGNAME=$USER
    MAIL="/var/spool/mail/$USER"
fi

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
else
    pathmunge /usr/local/sbin after
    pathmunge /usr/sbin after
fi

HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
    export HISTCONTROL=ignoreboth
else
    export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi

for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then 
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

unset i
unset -f pathmunge

查看修改后

[root@CentOS7 data]#vim profile 
:%s/^[[:space:]]\+//
[root@centos7 data]# cat profile 
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

pathmunge () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
esac
}


if [ -x /usr/bin/id ]; then
if [ -z "$EUID" ]; then
# ksh workaround
EUID=`/usr/bin/id -u`
UID=`/usr/bin/id -ru`
fi
USER="`/usr/bin/id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
fi

# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /usr/sbin
pathmunge /usr/local/sbin
else
pathmunge /usr/local/sbin after
pathmunge /usr/sbin after
fi

HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
export HISTCONTROL=ignoreboth
else
export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
fi

for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then 
. "$i"
else
. "$i" >/dev/null
fi
fi
done

unset i
unset -f pathmunge

六、在vim中设置tab缩进为4个字符

查看原vim中tab缩进字符
image.png
修改tab缩进其值为4个字符
image.png
上一篇下一篇

猜你喜欢

热点阅读