第二周作业(6.15-6.21)

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

  • 文件名最长255个字节
  • 包括路径在内文件名称最长4095个字节
  • 蓝色-->目录 绿色-->可执行文件 红色-->压缩文件 浅蓝色-->链接文件 灰色-->其他文件
  • 除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用它们

b. 各目录用途

  • /boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
  • /bin:所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
  • /sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
  • /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
  • /lib64:专用于x86_64系统上的辅助共享库文件存放位置
  • /etc:配置文件目录
  • /home/USERNAME:普通用户家目录
  • /root:管理员的家目录
  • /media:便携式移动设备挂载点
  • /mnt:临时文件系统挂载点
  • /dev:设备文件及特殊文件存储位置
    b: block device,随机访问
    c: character device,线性访问
  • /opt:第三方应用程序的安装位置
  • /srv:系统上运行的服务用到的数据
  • /tmp:临时文件存储位置

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

  • 元数据信息有文件的属性、大小、创建时间、访问时间、属主属组等信息,可以用stat命令查看。
    例子:
[root@centos7 ~]# stat anaconda-ks.cfg 
  File: ‘anaconda-ks.cfg’
  Size: 2011        Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d  Inode: 201326658   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-05-15 16:47:46.915000157 +0800
Modify: 2020-05-15 16:39:32.459019102 +0800
Change: 2020-05-15 16:39:32.459019102 +0800
 Birth: -
  • 三个时间戳:
    access time 访问时间,atime,读取文件内容
    modify time 修改时间, mtime,改变文件内容(数据)
    change time 改变时间, ctime,元数据发生改变
  • touch命令可修改时间戳
    格式:touch [OPTION]... FILE...
    -a 仅改变 atime和ctime
    -m 仅改变 mtime和ctime
    -t [[CC]YY]MMDDhhmm[.ss]
    指定atime和mtime的时间戳
    例:
[root@centos7 ~]# touch /data/time.log
[root@centos7 ~]# ll /data/time.log
-rw-r--r--. 1 root root 0 Jun 21 20:59 /data/time.log
[root@centos7 ~]# stat /data/time.log
  File: ‘/data/time.log’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d  Inode: 67          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:etc_runtime_t:s0
Access: 2020-06-21 20:59:54.001361020 +0800
Modify: 2020-06-21 20:59:54.001361020 +0800
Change: 2020-06-21 20:59:54.001361020 +0800
 Birth: -
[root@centos7 ~]# touch -t 201906200800.30 /data/time.log 
[root@centos7 ~]# stat /data/time.log
  File: ‘/data/time.log’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d  Inode: 67          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:etc_runtime_t:s0
Access: 2019-06-20 08:00:30.000000000 +0800
Modify: 2019-06-20 08:00:30.000000000 +0800
Change: 2020-06-21 21:06:06.861376238 +0800
 Birth: -
[root@centos7 ~]# ll /data/time.log
-rw-r--r--. 1 root root 0 Jun 20  2019 /data/time.log

3. 总结软连接和硬连接区别,并用实例操作说明。
1)硬链接

  • 创建硬链接会增加额外的记录项以引用文件
  • 对应于同一文件系统上一个物理文件
  • 每个目录引用相同的inode号
  • 创建时链接数递增
  • 删除文件时:
    • rm命令递减计数的链接
    • 文件要存在,至少有一个链接数
    • 当链接数为零时,该文件被删除
  • 不能跨越驱动器或分区
    语法:
    ln filename [linkname ]

2)软链接:

  • 一个符号链接指向另一个文件
  • ls - l的 显示链接的名称和引用的文件
  • 一个符号链接的内容是它引用文件的名称
  • 可以对目录进行
  • 可以跨分区
  • 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
  • 语法:
    ln -s filename [linkname]
    例:
[root@centos7 data]# touch {1..2}.txt
[root@centos7 data]# ll
total 0
-rw-r--r--. 1 root root 0 Jun 21 21:22 1.txt
-rw-r--r--. 1 root root 0 Jun 21 21:22 2.txt
-rw-r--r--. 1 root root 0 Jun 20  2019 time.log
[root@centos7 data]# mkdir link
[root@centos7 data]# ln 1.txt link/1.link
[root@centos7 data]# ll
total 0
-rw-r--r--. 2 root root  0 Jun 21 21:22 1.txt
-rw-r--r--. 1 root root  0 Jun 21 21:22 2.txt
drwxr-xr-x. 2 root root 20 Jun 21 21:23 link
-rw-r--r--. 1 root root  0 Jun 20  2019 time.log
[root@centos7 data]# ll link/
total 0
-rw-r--r--. 2 root root 0 Jun 21 21:22 1.link
[root@centos7 data]# vim 1.txt 
[root@centos7 data]# cat 1.txt link/1.link 
aaaa
bbbb
cccc
aaaa
bbbb
cccc
[root@centos7 data]# ln -s .././2.txt ./link/2.link
[root@centos7 data]# ll link/
total 0
lrwxrwxrwx. 1 root root 10 Jun 21 21:42 2.link -> .././2.txt
[root@centos7 data]# vim 2.txt 
[root@centos7 data]# cat 2.txt 
1111
2222
4444
[root@centos7 data]# cat link/2.link 
1111
2222
4444
[root@centos7 data]# ll
total 8
-rw-r--r--. 1 root root 15 Jun 21 21:24 1.txt
-rw-r--r--. 1 root root 15 Jun 21 21:29 2.txt
-rw-r--r--. 1 root root  0 Jun 21 21:34 3.txt
drwxr-xr-x. 2 root root 20 Jun 21 21:42 link
-rw-r--r--. 1 root root  0 Jun 20  2019 time.log

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

  • 创建空文件和刷新时间
    touch命令
    格式:touch [OPTION]... FILE...
    -a 仅改变 atime和ctime
    -m 仅改变 mtime和ctime
    -t [[CC]YY]MMDDhhmm[.ss]
    指定atime和mtime的时间戳
    -c 如果文件不存在,则不予创建
    示例
[root@centos7 data]# touch touch.txt
[root@centos7 data]# ll
total 0
-rw-r--r--. 1 root root 0 Jun 21 22:00 touch.txt
  • 复制文件和目录cp
    cp [OPTION]... [-T] SOURCE DEST
    cp [OPTION]... SOURCE... DIRECTORY
    cp [OPTION]... -t DIRECTORY SOURCE...
    cp SRC DEST
SRC是文件:
如果目标不存在:新建DEST,并将SRC中内容填充至DEST中
如果目标存在:
如果DEST是文件:将SRC中的内容覆盖至DEST中
基于安全,建议为cp命令使用-i选项
如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中
  cp SRC... DEST
SRC... 多个文件
DEST 必须存在,且为目录,其它情形均会出错
cp SRC DEST
SRC是目录:此时使用选项:-r
如果DEST不存在:则创建指定目录,复制SRC目录中所有文件至DEST中
如果DEST存在:
如果DEST是文件:报错
如果DEST是目录:
源/目标 不存在 存在且为文件 存在且为目录
一个文件 新建DEST,并将SRC中内容填充至DEST中 将SRC中的内容覆盖至DEST中,注意数据丢失风险!建议用 –i 选项 在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中
多个文件 提示错误 提示错误 在DEST下新建与原文件同名的文件,并将原文件内容复制进新文件中
目录须使用-r选项 创建指定DEST同名目录,复制SRC目录中所有文件至DEST下 提示错误 在DEST下新建与原目录同名的目录,并将SRC中内容复制至新目录中

cp常用选项

cp
  -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]# mkdir cp
[root@centos7 data]# cp touch.txt cp
[root@centos7 data]# ll cp/
total 0
-rw-r--r--. 1 root root 0 Jun 21 22:20 touch.txt
  • 移动和重命名文件命令mv
  mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
常用选项:
-i 交互式
-f 强制
-b 目标存在,覆盖前先备份
  • 删除命令rm
rm [OPTION]... FILE...
常用选项:
-i 交互式
-f 强制删除
-r 递归
--no-preserve-root 删除/
示例:
rm -rf /*
  • 目录操作
tree 显示目录树
-d: 只显示目录
-L level:指定显示的层级数目
-P pattern: 只显示由指定pattern匹配到的路径
mkdir 创建目录
-p: 存在于不报错,且可自动创建所需的各目录
-v: 显示详细信息
-m MODE: 创建目录时直接指定权限
rmdir 删除空目录
-p: 递归删除父空目录
-v: 显示详细信息
rm -r 递归删除目录树

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

[root@centos7 ~]# cp /etc/profile /tmp
[root@centos7 ~]# cat /tmp/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 ~]# sed -ri 's/^[[:space:]]+//;/^$/d' /tmp/profile
[root@centos7 ~]# cat /tmp/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

6. 在vim中设置tab缩进为4个字符
vim中在末行模式中,有关于tab设置其缩进的,默认是8个字符:

image

后设置其为4个字符,就好了。

image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。