美文网首页
第二周技术作业

第二周技术作业

作者: 神牧 | 来源:发表于2020-06-22 11:58 被阅读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号
    • 创建时链接数递增
    • 删除文件时:m命令递减计数的链接
    • 文件要存在,至少有一个链接数
    • 当链接数为零时,该文件被删除
    • 不能跨越驱动器或分区
    • 语法:
      ln filename [linkname ]

    符号(或软)链接

    • 一个符号链接指向另一个文件
    • ls - l的 显示链接的名称和引用的文件
    • 一个符号链接的内容是它引用文件的名称
    • 可以对目录进行
    • 可以跨分区
    • 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
    • 语法:
      ln -s filename [linkname]

    实例:

    创建硬链接

    可以看到硬链接文件与源文件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

    相关文章

      网友评论

          本文标题:第二周技术作业

          本文链接:https://www.haomeiwen.com/subject/rwitfktx.html