一、Linux发行版目录名称命名规则以及用途
1、目录结构
登录系统后,在当前命令窗口下输入命令ls /
[root@Centos8 ~]# ls /
bin data etc lib media mnt opt root sbin sys tmp var
boot dev home lib64 misc net proc run srv testdir usr
树状目录结构:
Linux的文件系统分层结构
:FHS Filesystem Hierarchy Standard
目前最新的标准是2.3版本:http://www.pathname.com/fhs/
2、目录遵循的命名规则
- 文件和目录被组织成一个单根倒置树结构
- 文件系统从根目录下开始,用“/”表示
- 根文件系统(rootfs):root filesystem
- 标准Linux文件系统(如:ext4),文件名称大小写敏感,例如:MAIL, Mail, mail, mAiL
- 以 . 开头的文件为隐藏文件
- 用“/”分隔路径
- 文件名最长255个字节
- 包括路径在内文件名称最长4095个字节
- 蓝色–>目录 绿色–>可执行文件 红色–>压缩文件 浅蓝色–>链接文件 灰色–>其他文件
- 除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用
- 每个文件都有两类相关数据:元数据:metadata,即属性, 数据:data,即文件内容
3、文件系统目录功能
基本目录功能
/boot
:这里存放的是启动 Linux 时使用的一些核心文件,如:内核文件(vmlinuz)、引导加载器( boot loader的、grub)放于此/bin
:bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令/sbin
:s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序/dev
:存储特殊文件(tty虚拟终端之类)和设备文件(字符设备(键盘、显示器)、块设备(硬盘、光盘))- b:block device,随机访问
- c:character device,线性访问
/etc
:etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录/home
:用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve/root
:root用户家目录/lib
:lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库libc.so.*
:动态链接的c库ld*
:运行时链接器/加载器modules
:用于存储内核模块的目录
/lib64
:64位系统特有的存放64位共享库的路径/media
:linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。/mnt
:临时文件系统挂载点,系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。/opt
:附加程序的安装位置,opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的/srv
:该目录存放一些服务启动之后需要提取的数据/tmp
:临时文件(temporary files)(可供所有用户执行写入操作)/usr
:usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录bin
:非系统启动时用到的程序sbin
:非系统启动时用到的系统程序include
:c程序的头文件(header files)lib
:程序依赖的库lib64
:程序依赖的库(64位)local
:用来安装本地应用程序(又一个层级目录),第三方程序
(比如在MacOS下,brew
安装的程序都会安装在usr/local/bin
下)share
:命令man手册页,命令自带文档/usr/share/dict/words
暴力破解的密码表(弱口令)
src
:某些程序的源代码
/var
:可变数据文件(系统日志、缓存文件)log
cache
mail
等
/proc
:proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/proc/cpuinfo
:/proc/partitions
:
/sys
:这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建(see also: https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/)
注意:在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件
- /etc:这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动
- /bin, /sbin, /usr/bin,/usr/sbin:系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下。
- /bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin、 /usr/sbin 则是给 root 使用的指令。
- /var: 一个非常重要的目录,系统上跑了很多程序,每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里(/var/spool/mail)。
二、描述文件的元数据信息有哪些,分别表示什么含义?如何查看?如何修改文件的时间戳信息?
参考文章:http://www.cnblogs.com/adforce/p/3522433.html
1、元数据(meta data)
概念:每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据(meta data)
位置:元数据是存放在node(index node)表中。node 表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息
元数据信息分类
第一个node表记录对应的元数据信息:
- inode number 节点号
- 文件类型
- 文件的读、写、执行权限
- 文件所有者UID
- 文件所属组GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
2、inode概念和结构
inode概念
理解inode,要从文件储存说起。
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个sector组成一个block。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元数据信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
inode结构
文件系统如何存取文件:
1、根据文件名,通过Directory里的对应关系,找到文件对应的Inode number
2、再根据Inode number读取到文件的Inode table
3、再根据Inode table中的Pointer读取到相应的Blocks
这里有一个重要的内容,就是Directory,他不是我们通常说的目录,而是一个列表,记录了一个文件/目录名称对应的Inode number。如下图:
inode表和目录
目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系
- 文件引用一个是 inode号
- 人是通过文件名来引用一个文件
- 一个目录是目录下的文件名和文件inode号之间的映射
3、inode大小
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。
使用df -ih查看每个硬盘分区的inode总数和已经使用的数量
[root@Centos8 ~]# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 91K 381 90K 1% /dev
tmpfs 98K 1 98K 1% /dev/shm
tmpfs 98K 694 98K 1% /run
tmpfs 98K 17 98K 1% /sys/fs/cgroup
/dev/mapper/cl-root 23M 68K 23M 1% /
/dev/mapper/cl-data 23M 10 23M 1% /data
/dev/sda1 512K 302 512K 1% /boot
tmpfs 98K 6 98K 1% /run/user/0
[root@Centos8 ~]#
使用
dumpe2fs -h /dev/hda | grep "Inode size"
查看每个inode节点的大小
4、查看inode信息
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号
表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:
- 系统找到这个文件名对应的inode号码
- 通过inode号码,获取inode信息
- 最后,根据inode信息,找到文件数据所在的block,读出数据
示例1:使用stat命令,查看某个文件的inode详细信息
[root@Centos8 ~]# stat welcome.txt
File: welcome.txt
Size: 34 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 102640660 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-12-23 18:10:52.030752314 +0800
Modify: 2020-12-23 18:09:58.860749310 +0800
Change: 2020-12-23 18:09:58.860749310 +0800
Birth: -
[root@Centos8 ~]#
示例2:使用ls -i命令,可以看到文件名对应的inode号码
[root@Centos8 ~]# ls -i welcome.txt
102640660 welcome.txt
[root@Centos8 ~]#
示例3:使用ls -di /boot 命令,可以看到文件夹对应的inode号码
[root@Centos8 /]# ls -di /boot
128 /boot
示例4:使用df -ih命令,查看每个硬盘分区的inode总数和已经使用的数量
[root@Centos8 /]# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 91K 381 90K 1% /dev
tmpfs 98K 1 98K 1% /dev/shm
tmpfs 98K 697 98K 1% /run
tmpfs 98K 17 98K 1% /sys/fs/cgroup
/dev/mapper/cl-root 23M 68K 23M 1% /
/dev/mapper/cl-data 23M 10 23M 1% /data
/dev/sda1 512K 302 512K 1% /boot
tmpfs 98K 6 98K 1% /run/user/0
[root@Centos8 /]#
5、命令和inode关系
cp 命令
:
- 分配一个空闲的inode号,在inode表中生成新条目
- 在目录中创建一个目录项,将名称与inode编号关联
- 拷贝数据生成新的文件
rm命令
:
- 链接数递减,从而释放的inode号可以被重用
- 把数据块放在空闲列表中
- 删除目录项
- 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv命令
- 如果mv命令的目标和源在相同的文件系统,作为mv 命令
用新的文件名创建对应新的目录项、删除旧目录条目对应的旧的文件名,不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动! - 如果目标和源在一个不同的文件系统, mv相当于cp和rm
6、修改时间戳
示例:修改文件的时间戳
[root@Centos8 data]# stat aa.txt ==>查看文件当前时间戳
File: aa.txt
Size: 11 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 132 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-02-19 09:49:54.679967033 +0800
Modify: 2021-02-19 09:49:54.679967033 +0800
Change: 2021-02-19 09:49:54.679967033 +0800
Birth: -
[root@Centos8 data]# touch -a aa.txt ==> 修改文件的atime,发现ctime跟着一起改变,因为ctime是元数据信息,包括了文件的时间等
[root@Centos8 data]# stat aa.txt
File: aa.txt
Size: 11 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 132 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-02-19 09:59:39.924951729 +0800
Modify: 2021-02-19 09:49:54.679967033 +0800
Change: 2021-02-19 09:59:39.924951729 +0800
Birth: -
[root@Centos8 data]# touch -c aa.txt ==>修改文件ctime
[root@Centos8 data]# stat aa.txt
File: aa.txt
Size: 11 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 132 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-02-19 10:00:07.095951019 +0800
Modify: 2021-02-19 10:00:07.095951019 +0800
Change: 2021-02-19 10:00:07.095951019 +0800
Birth: -
[root@Centos8 data]# touch -m aa.txt ==>修改文件mtime
[root@Centos8 data]# stat aa.txt
File: aa.txt
Size: 11 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 132 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-02-19 10:00:07.095951019 +0800
Modify: 2021-02-19 10:00:19.999950681 +0800
Change: 2021-02-19 10:00:19.999950681 +0800
Birth: -
[root@Centos8 data]#
三、总结软链接和硬链接区别,并用实例操作说明
1、硬链接
概念:
- 硬链接本质上是给一个文件起一个新的名称,实质是同一个文件
- 硬链接相当于多个链接指向同一份数据存储区域,每多一个硬链接,硬链接数+1,如果一个文件,有n个硬链接,删除n-1个硬链接,源文件还在,直到删除所有硬链接,才会删除源文件
特点:
- 创建硬链接会在对应的目录中增加额外的记录项以引用文件
- 对应于同一文件系统上一个物理文件
- 每个目录引用相同的inode号
- 创建时链接数递增
- 删除文件时:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文件被删除
- 不能跨越驱动器或分区
- 不支持对目录创建硬链接
实现格式:
ln filename [linkname ]
示例1:给文件创建硬链接,每个目录引用相同的inode号,创建时链接数递增
[root@Centos8 data]# ls
fstab
[root@Centos8 /]# ll -i /data/ /data/fstab.link ==>每个目录引用相同的inode号
133 -rw-r--r--. 1 root root 322 Feb 7 15:58 /data/fstab.link
/data/:
total 4
133 -rw-r--r--. 1 root root 322 Feb 7 15:58 fstab.link
[root@Centos8 /]#
[root@Centos8 data]# ln fstab fstab.link ==>对fstab文件创建硬链接
[root@Centos8 data]# ll -i !* ==> !* 表示调用前一条命令的所有参数作为本次命令的参数,查看文件的inode号
ll -i fstab fstab.link
133(inode号) -rw-r--r--. 2(链接数) root root 322 Feb 7 15:58 fstab ==> fstab和fstab.link具有相同的inode号,都为133,连接数变为2
133(inode号) -rw-r--r--. 2(链接数) root root 322 Feb 7 15:58 fstab.link
[root@Centos8 data]# cat fstab.link fstab ==> 查看两个文件内容,是一样的
/dev/mapper/cl-root / xfs defaults 0 0
UUID=0844fea5-2009-42db-99da-95420a53298c /boot xfs defaults 0 0
/dev/mapper/cl-data /data xfs defaults 0 0
/dev/mapper/cl-swap none swap defaults 0 0
/dev/mapper/cl-root / xfs defaults 0 0
UUID=0844fea5-2009-42db-99da-95420a53298c /boot xfs defaults 0 0
/dev/mapper/cl-data /data xfs defaults 0 0
/dev/mapper/cl-swap none swap defaults 0 0
[root@Centos8 data]#
示例2:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文件被删除
[root@Centos8 data]# rm -f fstab
[root@Centos8 data]# ls
fstab.link
[root@Centos8 data]# cat fstab.link
/dev/mapper/cl-root / xfs defaults 0 0
UUID=0844fea5-2009-42db-99da-95420a53298c /boot xfs defaults 0 0
/dev/mapper/cl-data /data xfs defaults 0 0
/dev/mapper/cl-swap none swap defaults 0 0
[root@Centos8 data]# ll -i fstab.link
133 -rw-r--r--. 1 root root 322 Feb 7 15:58 fstab.link
示例3:不能对目录创建硬链接
[root@Centos8 /]# ln /data/ /data/link
ln: /data/: hard link not allowed for directory
[root@Centos8 /]#
示例4:不能跨分区创建硬链接
[root@Centos8 /]# ln /data/fstab.link /boot/fstab.link2
ln: failed to create hard link '/boot/fstab.link2' => '/data/fstab.link': Invalid cross-device link
[root@Centos8 /]#
2、软链接(常用)
概念:软链接,又称符号 symbolic (或软 soft)链接,一个符号链接指向另一个文件,就像 windows 中快捷方式,软链接文件和原文件本质上不是同一个文件
特点
- 一个符号链接的内容是它引用文件的名称
- 可以对目录创建软链接
- 可以跨分区的文件实现
- 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
- 软链接如果使用相对路径,是相对于原文件的路径,而非相对于当前目录
实现格式:
ln -s filename [linkname]
示例1:对文件创建软链接,指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
[root@Centos8 data]# ls
fstab
[root@Centos8 data]# ln -s fstab fstab.slink ==> 对fstab文件创建软链接
[root@Centos8 data]# ls
fstab fstab.slink
[root@Centos8 data]# ll -i fstab fstab.slink
133(不增加inode)-rw-r--r--. 1 root root 322 Feb 7 15:58 fstab
131(新的inode) lrwxrwxrwx. 1 root root 5(大小为fstab文件名5个字母占用的字符数) Feb 7 16:19 fstab.slink -> fstab
[root@Centos8 data]#
示例2:对目录创建软链接
[root@Centos8 data]# ln -s /data/ /data/slink
[root@Centos8 data]# ll
total 4
-rw-r--r--. 1 root root 655 Feb 7 16:29 fstab
lrwxrwxrwx. 1 root root 6 Feb 7 16:34 slink -> /data/
[root@Centos8 data]# ll -i /data/slink/
total 4
131 -rw-r--r--. 1 root root 655 Feb 7 16:29 fstab
132 lrwxrwxrwx. 1 root root 6 Feb 7 16:34 slink -> /data/
[root@Centos8 data]# ll -i .
total 4
131 -rw-r--r--. 1 root root 655 Feb 7 16:29 fstab
132 lrwxrwxrwx. 1 root root 6 Feb 7 16:34 slink -> /data/
[root@Centos8 data]#
示例3:跨分区创建软链接
[root@Centos8 ~]# ln -s /etc/fstab /data/fstab.link
[root@Centos8 ~]# ll /data/fstab.link
lrwxrwxrwx. 1 root root 10 Feb 7 16:43 /data/fstab.link -> /etc/fstab
示例4:删除软链接本身,不会删除源目录内容
[root@Centos8 data]# ls
fstab.link
[root@Centos8 data]# ll fstab.link
lrwxrwxrwx. 1 root root 10 Feb 7 16:43 fstab.link -> /etc/fstab
[root@Centos8 data]# rm fstab.link -f
[root@Centos8 data]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Dec 16 03:52:34 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID=0844fea5-2009-42db-99da-95420a53298c /boot xfs defaults 0 0
/dev/mapper/cl-data /data xfs defaults 0 0
/dev/mapper/cl-swap none swap defaults 0 0
[root@Centos8 data]#
示例5:删除源目录的文件,不会删除链接文件
[root@Centos8 data]# ll
total 0
lrwxrwxrwx. 1 root root 10 Feb 7 16:46 fstab.link -> /etc/fstab
[root@Centos8 data]# rm -rf /etc/fstab
[root@Centos8 data]# ll
total 0
lrwxrwxrwx. 1 root root 10 Feb 7 16:46 fstab.link -> /etc/fstab ==> 链接文件还在
[root@Centos8 data]#
示例6:对应用软件进行升级和回滚,就是针对目录做的软链接。
- 例如:现有数据库为mysql5.6,需要升级到mysql5.7,且应用系统链接的数据库名称为mysql
- 实现思路:对mysql5.6创建软链接mysql(应用系统链接访问的是mysql,不关心后端数据库版本是哪个),升级为mysql5.7数据库时,将原有的软链接删除,对5.7创建软链接mysql,回退也是一样的道理
[root@Centos8 data]# tree
.
├── mysql5.6
│ └── 5.6.txt
└── mysql5.7
└── 5.7.txt
2 directories, 2 files
[root@Centos8 data]# ln -s mysql5.6 mysql
[root@Centos8 data]# ls
mysql mysql5.6 mysql5.7
[root@Centos8 data]# ll
total 0
lrwxrwxrwx. 1 root root 8 Feb 7 17:05 mysql -> mysql5.6
drwxr-xr-x. 2 root root 21 Feb 7 16:55 mysql5.6
drwxr-xr-x. 2 root root 21 Feb 7 16:55 mysql5.7
[root@Centos8 data]# rm -f mysql ==> 首先先删除到5.6的链接
[root@Centos8 data]# ln -s mysql5.7 mysql ==> 将软链接mysql指向5.7版本(升级数据库版本,回退一样的步骤)
[root@Centos8 data]# ll
total 0
lrwxrwxrwx. 1 root root 8 Feb 7 17:06 mysql -> mysql5.7
drwxr-xr-x. 2 root root 21 Feb 7 16:55 mysql5.6
drwxr-xr-x. 2 root root 21 Feb 7 16:55 mysql5.7
[root@Centos8 data]#
3、软链接和硬链接区别
1、本质不同
硬链接:同一个文件,多个名称。
软链接:不同的文件。
2、跨分区
硬链接:不支持跨分区。
软链接:支持跨分区。
3、目录
硬链接:不支持对目录创建。
软链接:支持对目录创建。
4、相互关系
硬链接:删除某一个硬链接,另一个硬链接不影响使用。
软链接:原始文件和软链接有依赖关系,原始文件删了,软链接就失效了。
5、inode编号
硬链接:inode编号是相同的。
软链接:inode编号不同。
6、链接数
硬链接:删除一个硬链接,硬链接的链接数会有变化。
软链接:删除一个软链接,链接数不会有变化,删除的相当于是一个文件(或快捷方式)。
7、相对路径:原始文件路径
硬链接:硬链接的相对路径,是相对的当前工作目录的相对路径。
软链接:软链接的原始文件路径是,相对的软链接的相对路径,而不是相对当前工作目录。
8、文件类型
硬链接:硬链接的文件类型是,原来是什么就是什么,例如:原来是普通文件,还是普通文件。
软链接:软链接的文件类型是L
9、命令的实现不一样
硬链接:ln
软链接:ln -s
4、软、硬链接和命令关系
复制(
cp
)
在复制过程中,复制软连接相当于复制了快捷方式,速度很快,而且可以跨分区。
在复制过程中,复制硬链接分为两种情形:
- 在同一分区复制,相当于多创建一个链接指向原数据存储位置,速度很快。
- 在不同分区复制,相当于把原来分区的数据拷贝过去存储,同时创建一个指向新数据区域的指针,速度比较慢。
删除(
rm
)
在删除过程中,删除软连接相当于删除了快捷方式,源文件还在。
在删除过程中,删除硬连接相当于删除了一个到数据块的指针,,除非删除所有硬链接文件,源文件才删除。
移动(
mv
)
在移动过程中,移动软连接相当于移动了快捷方式而已。
在移动过程中,移动硬连接分为两种情形:
- 在同一分区移动,相当于创建了一个新inode,指向数据块,并把原来的inode删掉
- 在不同分区移动,要把数据块复制到新分区,然后在新分区创建新的inode号指向新的数据块,并且把原来分区的inode号和数据块都删掉。
- 软连接支持对目录创建,硬链接不支持
四、Linux上的文件管理类命令有哪些,其常用的使用方法及其相关示例演示
1、文件管理类命令
- ls命令
- stat命令
- file命令
- touch命令
- cp命令
- mv命令
- rename命令
- rm命令
ls命令
作用:命令可以列出当前目录的内容或指定目录的文件列表
ls 查看不同后缀文件时的颜色由 /etc/DIR_COLORS 和@LS_COLORS变量定义
格式:
ls [options] [files_or_dirs]
参数:
-
-a
:全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用) -
-d
:仅列出目录本身,而不是列出目录内的文件数据(常用) -
-l --long
:长格式信息,列出文件的详细属性包含文件的属性与权限等等数据;命令可以简写为ll,alias ll=‘ls -l --color=auto’(常用) -
-h,--human-readable
:size用人类可读的格式表示 -
-d, --directory
:查看目录本身而非内部的文件详情 -
-r, --reverse
:反转排序(降序) -
-R, --recursive
递归显示(基本不用这个,递归显示用tree命令更直观) -
-t
:按修改时间排序
示例1:显示所有文件,包括隐藏文件
[root@Centos8 /]# ls -a
. bin data etc lib media mnt net proc run srv testdir usr
.. boot dev home lib64 misc mysql opt root sbin sys tmp var
[root@Centos8 /]#
示例2:按文件的修改时间从新到旧排列
[root@Centos8 ~]# ls -lt /etc
total 1336
-rw-r--r--. 1 root root 53 Feb 18 10:46 resolv.conf
-rw-r--r--. 1 root root 655 Feb 7 16:44 fstab
-rw-r--r--. 1 root root 2162 Feb 1 02:09 profile
-rw-r--r--. 1 root root 48374 Jan 27 11:49 ld.so.cache
drwxr-xr-x. 2 root root 48 Jan 26 17:32 PackageKit
drwxr-xr-x. 2 root root 4096 Jan 26 17:32 profile.d
drwxr-xr-x. 5 root root 51 Jan 26 17:31 xdg
drwxr-xr-x. 2 root root 21 Jan 26 17:31 xml
drwxr-xr-x. 2 root root 4096 Jan 26 17:31 alternatives
drwxr-xr-x. 6 root root 70 Jan 26 17:30 libreport
示例3:只显示目录本身,而不显示其下面文件
[root@Centos8 /]# ls -ld /etc/
drwxr-xr-x. 129 root root 8192 Feb 18 10:46 /etc/
[root@Centos8 /]#
示例4:递归显示目录中的文件
[root@Centos8 /]# ls /etc/sysconfig/
anaconda cpupower ip6tables-config man-db qemu-ga selinux
atd crond iptables-config modules raid-check smartmontools
autofs ebtables-config irqbalance network rsyslog sshd
chronyd firewalld kdump network-scripts run-parts sshd-permitrootlogin
console grub kernel nftables.conf samba wpa_supplicant
[root@Centos8 /]# ls -R /etc/sysconfig/
/etc/sysconfig/:
anaconda cpupower ip6tables-config man-db qemu-ga selinux
atd crond iptables-config modules raid-check smartmontools
autofs ebtables-config irqbalance network rsyslog sshd
chronyd firewalld kdump network-scripts run-parts sshd-permitrootlogin
console grub kernel nftables.conf samba wpa_supplicant
/etc/sysconfig/console:
/etc/sysconfig/modules:
/etc/sysconfig/network-scripts:
ifcfg-ens33.bak ifcfg-eth0
[root@Centos8 /]#
示例5:使用ls查看文件的三个时间属性
## 默认显示的是mtime时间
[root@Centos8 ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1572 Dec 16 12:19 anaconda-ks.cfg
## 显示文件的atime时间
[root@Centos8 ~]# ls -l --time=atime anaconda-ks.cfg
-rw-------. 1 root root 1572 Dec 23 14:13 anaconda-ks.cfg
## 显示文件的ctime时间
[root@Centos8 ~]# ls -l --time=ctime anaconda-ks.cfg
-rw-------. 1 root root 1572 Dec 16 12:19 anaconda-ks.cfg
[root@Centos8 ~]#
stat命令
作用:显示文件详细属性
格式:stat 【文件或目录】
文件时间属性
每个文件的时间属性有三种,atime,mtime,ctime
atime
(access time 访问时间):记录最后一次访问时间mtime
(modify time 修改时间):记录最后一次文件数据
的修改时间ctime
(change time 改变时间):记录最后一次文件元数据
的修改时间
示例:查看文件属性
[root@Centos8 ~]# stat anaconda-ks.cfg
File: anaconda-ks.cfg
Size: 1572 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 100663429 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-12-23 14:13:22.622947325 +0800
Modify: 2020-12-16 12:19:11.607943581 +0800
Change: 2020-12-16 12:19:11.607943581 +0800
Birth: -
[root@Centos8 ~]#
file命令
作用:文件可以包含多种类型的数据,使用file命令检查文件的类型
格式:
file [options] <filename>...
参数:
-b
:列出文件辨识结果时,不显示文件名称-f filelist
: 列出文件filelist中文件名的文件类型-F
:使用指定分隔符号替换输出文件名后默认的”:”分隔符-L
:查看对应软链接对应文件的文件类型-z
:尝试查看压缩文件内容--help
:显示命令在线帮助
示例1:显示文件类型
## 显示文件类型
[root@Centos8 ~]# file initial-setup-ks.cfg
initial-setup-ks.cfg: ASCII text
## 不显示文件名称
[root@Centos8 ~]# file -b initial-setup-ks.cfg
ASCII text
## 显示MIME类别
[root@Centos8 ~]# file -i initial-setup-ks.cfg
initial-setup-ks.cfg: text/plain; charset=us-ascii
[root@Centos8 ~]# file -bi initial-setup-ks.cfg
text/plain; charset=us-ascii
示例2:显示符号链接的文件类型
[root@Centos8 ~]# ls -l /var/mail
lrwxrwxrwx. 1 root root 10 Nov 3 23:22 /var/mail -> spool/mail
[root@Centos8 ~]# ls /var/mail/
aa3 root rpc yk
[root@Centos8 ~]# file /var/mail/
/var/mail/: directory
[root@Centos8 ~]# file /var/mail
/var/mail: symbolic link to spool/mail
[root@Centos8 ~]# file -L /var/mail
/var/mail: directory
[root@Centos8 ~]#
示例3:查看压缩文件内容
[root@CentOS7 ~]# file /boot/grub/splash.xpm.gz
/boot/grub/splash.xpm.gz: gzip compressed data, was "splash.xpm", from Unix, last modified: Wed Nov 16 05:03:25 2011
[root@CentOS7 ~]# file -z /boot/grub/splash.xpm.gz
/boot/grub/splash.xpm.gz: X pixmap image, ASCII text, with very long lines (gzip compressed data, was "splash.xpm", from Unix, last modified: Wed Nov 16 05:03:25 2011)
[root@CentOS7 ~]#
touch命令
作用:设置文件的修改和访问时间,如果指定的文件不存在,使用默认权限创建文件
格式:touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][–help][–version][文件或目录…]
参数:
-a
:仅改变 atime-m
:仅改变 mtime-c
:如果文件不存在,则不予创建-t [[CC]YY]MMDDhhmm[.ss]
:指定atime和mtime的时间戳CC
:YY
:MM
:表示月份,取值01-12DD
:表示天数,取值01-31hh
:每天的小时,取值00-23mm
:表示分钟,取值00-59SS
:表示秒钟,取值00-60
示例1:使用
touch
修改已存在文件的时间属性,已存在的文件会修改文件的三个属性,即atime,mtime,ctime
1、使用指令touch
修改文件"aa.txt"的时间属性为当前系统时间,输入如下命令:
[root@Centos8 data]# date
Fri Feb 19 09:47:42 CST 2021
[root@Centos8 data]# touch aa.txt ==> 修改文件的时间为当前系统时间
[root@Centos8 data]# ls -l aa.txt ==> 查看文件的时间属性
-rw-r--r--. 1 root root 11 Feb 19 `09:47` aa.txt
[root@Centos8 data]#
2、执行指令touch
修改文件属性以后,并再次查看该文件的时间属性,如下所示:
[root@Centos8 data]# touch aa.txt ==>修改文件时间属性为当前系统时间
[root@Centos8 data]# ls -l aa.txt ==>查看文件的时间属性
-rw-r--r--. 1 root root 11 Feb 19 `09:49` aa.txt
[root@Centos8 data]# stat aa.txt ==>文件的三个时间戳均改变了
File: aa.txt
Size: 11 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 132 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-02-19 `09:49:54`.679967033 +0800
Modify: 2021-02-19 `09:49:54`.679967033 +0800
Change: 2021-02-19 `09:49:54`.679967033 +0800
Birth: -
示例2:使用指令
touch
时,如果指定的文件不存在,则将创建一个新的空白文件。例如,在当前目录下,使用该指令创建一个空白文件"file",输入如下命令:
[root@Centos8 data]# ls
aa.txt mysql mysql5.6 mysql5.7
[root@Centos8 data]# touch file
[root@Centos8 data]# ll file
-rw-r--r--. 1 root root 0 Feb 19 09:54 file
[root@Centos8 data]# ls
aa.txt file mysql mysql5.6 mysql5.7
[root@Centos8 data]#
示例3:修改文件的时间戳
[root@Centos8 data]# stat aa.txt ==>查看文件当前时间戳
File: aa.txt
Size: 11 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 132 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-02-19 09:49:54.679967033 +0800
Modify: 2021-02-19 09:49:54.679967033 +0800
Change: 2021-02-19 09:49:54.679967033 +0800
Birth: -
[root@Centos8 data]# touch -a aa.txt ==> 修改文件的atime,发现ctime跟着一起改变,因为ctime是元数据信息,包括了文件的时间等
[root@Centos8 data]# stat aa.txt
File: aa.txt
Size: 11 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 132 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-02-19 09:59:39.924951729 +0800
Modify: 2021-02-19 09:49:54.679967033 +0800
Change: 2021-02-19 09:59:39.924951729 +0800
Birth: -
[root@Centos8 data]# touch -c aa.txt ==>修改文件ctime
[root@Centos8 data]# stat aa.txt
File: aa.txt
Size: 11 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 132 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-02-19 10:00:07.095951019 +0800
Modify: 2021-02-19 10:00:07.095951019 +0800
Change: 2021-02-19 10:00:07.095951019 +0800
Birth: -
[root@Centos8 data]# touch -m aa.txt ==>修改文件mtime
[root@Centos8 data]# stat aa.txt
File: aa.txt
Size: 11 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 132 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-02-19 10:00:07.095951019 +0800
Modify: 2021-02-19 10:00:19.999950681 +0800
Change: 2021-02-19 10:00:19.999950681 +0800
Birth: -
[root@Centos8 data]#
cp命令
作用:利用 cp(copy)命令可以实现文件或目录的复制
格式:
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE...DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE..
cp [-adfilprsu] 来源档(source) 目标档(destination
cp [options] source1 source2 source3 .... directory
参数:
-i
如果目标已存在,覆盖前提示是否覆盖-n
不覆盖,注意两者顺序-r, -R
递归复制目录及内部的所有内容-a
归档,相当于-dpR --preserv=all,常用于备份功能-d --no-dereference --preserv=links
不复制原文件,只复制链接名--preserv[=ATTR_LIST]
- mode: 权限
- ownership: 属主属组
- timestamp:
- links
- xattr
- context
- all
-p
:等同–preserv=mode,ownership,timestamp`,保留原文件或目录的属性信息,包括属主、属组、权限和时间-P
:复制软链接本身,而非复制软链接指向的源文件-v --verbose
:显示执行过程-f --force
:如果目标文件不能打开,先删除在打开-u --update
只复制源比目标更新文件或目标不存在的文件-b
目标存在,覆盖前先备份,默认形式为filename~
,只保留最近的一个备份--backup=numbered
目标存在,覆盖前先备份加数字后缀,形式为filename.~#~
,可以保留多个版本
注意事项
源文件 | 目标文件不存在 | 目标存在且为文件 | 目标存在且为目录 |
---|---|---|---|
一个文件 | 会先创建目的(DEST)文件,再将源文件中的内容复制到目的(DEST)文件中 | 将SRC中的内容覆盖至DEST中,目标文件中的原始数据回丢失。建议复制时使用-i 选项 | 在该目录下创建与原文件同名的文件,并将SRC文件中的内容复制到DEST中 |
多个文件 | 提示错误 | 提示错误 | 在该目录下分别创建与原文件同名的文件,并将SRC文件中的内容一 一复制到对应的DEST中 |
目录文件 | 创建指定DEST同名目录,复制源(SRC)目录中所有文件至目的(DEST)目录下 | 提示错误 | 在DEST下创建与原目录同名的目录,并将SRC中的内容复制到新目录中 |
示例1:用 root 身份,将 root 目录下的 .bashrc 复制到 /tmp 下,并命名为 bashrc(当源文件为一个文件,目标文件存在且为一文件时,将覆盖)
[root@Centos8 ~]# cp ~/.bashrc /tmp/bashrc
[root@Centos8 tmp]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite '/tmp/bashrc'? n <==n不覆盖,y为覆盖
示例2:复制的目录是多层,需要指定
-r
选项
[root@Centos8 ~]# cp /etc/ /data/
cp: -r not specified; omitting directory '/etc/'
[root@Centos8 ~]# cp -r /etc/ /data/
[root@Centos8 ~]#
示例3:覆盖已存在的目标文件前先备份
[root@Centos8 data]# ls
aa.txt etc fstab mysql mysql5.6 mysql5.7
[root@Centos8 data]# cp -b /etc/fstab .
cp: overwrite './fstab'? y
[root@Centos8 data]# ls -l
total 20
-rw-r--r--. 1 root root 11 Feb 19 10:00 aa.txt
drwxr-xr-x. 129 root root 8192 Feb 19 14:47 etc
-rw-r--r--. 1 root root 655 Feb 19 14:52 fstab
-rw-r--r--. 1 root root 0 Feb 19 14:52 fstab~==>备份的文件
lrwxrwxrwx. 1 root root 8 Feb 7 17:06 mysql -> mysql5.7
drwxr-xr-x. 2 root root 21 Feb 7 16:55 mysql5.6
drwxr-xr-x. 2 root root 21 Feb 7 16:55 mysql5.7
[root@Centos8 data]#
mv命令
作用:mv 命令可以实现文件或目录的移动和重命名
- 同一分区移动数据,速度很快:数据位置没有变化
- 不同分区移动数据,速度相对慢:数据位置发生了变化
格式:
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
参数:
-i
交互式操作,覆盖前提示用户是否覆盖-f
强制覆盖,不提示-b
目标存在,覆盖前先备份
示例1:重命名文件名
[root@Centos8 data]# ls
aa.txt etc fstab fstab~ mysql mysql5.6 mysql5.7
[root@Centos8 data]# mv fstab fstab.bak
[root@Centos8 data]# ls
aa.txt etc fstab~ fstab.bak mysql mysql5.6 mysql5.7
[root@Centos8 data]#
示例2:使用
-i
选项,实现目标文件存在,覆盖前提示
[root@Centos8 data]# mv -i /etc/fstab .
mv: overwrite './fstab'?
示例3:使用
-b
选项,实现目标存在,覆盖前先备份
[root@Centos8 data]# ls
aa.txt etc fstab mysql mysql5.6 mysql5.7
[root@Centos8 data]# mv -b /etc/fstab .
mv: overwrite './fstab'? y
[root@Centos8 data]# ls
aa.txt etc fstab `fstab~(备份的文件)` mysql mysql5.6 mysql5.7
[root@Centos8 data]#
rename命令
作用:批量修改文件名
格式:rename [options] expression(被替换) replacement(替换为) file(文件名)…
示例:将
.conf
结尾的文件,批量改名为.config.bak
[root@Centos8 data]# touch f{0..9}.conf
[root@Centos8 data]# ls
aa.txt f0.conf f2.conf f4.conf f6.conf f8.conf fstab mysql mysql5.7
etc f1.conf f3.conf f5.conf f7.conf f9.conf fstab~ mysql5.6
[root@Centos8 data]# rename .conf .conf.bak *.conf
[root@Centos8 data]# ls
aa.txt f1.conf.bak f4.conf.bak f7.conf.bak fstab mysql5.6
etc f2.conf.bak f5.conf.bak f8.conf.bak fstab~ mysql5.7
f0.conf.bak f3.conf.bak f6.conf.bak f9.conf.bak mysql
[root@Centos8 data]#
rm命令
作用:删除文件和目录
格式:rm [OPTION]… FILE…
参数:
-i
交互式-f
强制删除-r
递归 删除-d
删除空目录,非空目录不能删除--no-preserve-root
删除/
,centos5版本之前为默认值--preserve-root
对/
不进行递归删除,在centos6以后的版本为默认值
示例:
2、目录管理类命令
- pwd
- cd
- tree命令
- mkdir命令
- rmdir命令
pwd命令
作用:显示当前shell CWD的绝对路径
每个shell和系统进程都有一个当前的工作目录 CWD:current work directory
格式:
pwd [OPTION]...
参数:
-P
显示真实物理路径-L
显示链接路径(默认)
示例:
[root@Centos8 bin]# ll /
total 28
lrwxrwxrwx. 1 root root 7 Nov 3 23:22 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Feb 7 16:33 boot
drwxr-xr-x. 4 root root 51 Feb 7 17:06 data
drwxr-xr-x. 20 root root 3200 Jan 25 14:49 dev
drwxr-xr-x. 129 root root 8192 Feb 18 10:46 etc
[root@Centos8 ~]# cd /bin/
[root@Centos8 bin]# pwd
/bin
[root@Centos8 bin]# pwd -P
/usr/bin
[root@Centos8 bin]# pwd -L
/bin
[root@Centos8 bin]#
cd命令
作用: change directory 改变目录
格式:
- 切换至父目录:
cd ..
- 切换至当前用户主目录:
cd
- 切换至以前的工作目录:
cd -
参数:
-P
切换至物理路径,而非软链接目录
相关环境变量
PWD
:当前目录路径OLDPWD
:上一次目录路径
示例1
[root@centos8 ~]#cd /etc/sysconfig
[root@centos8 sysconfig]#pwd
/etc/sysconfig
[root@centos8 sysconfig]#cd ../../data
[root@centos8 data]#pwd
/data
[root@centos8 data]#cd /bin
[root@centos8 bin]#pwd
/bin
[root@centos8 bin]#cd -P /bin
[root@centos8 bin]#pwd
/usr/bin
示例2:使用-P选项切换至物理路径,而非软链接目录
[root@Centos8 /]# cd /bin/ ==> 软链接目录
[root@Centos8 bin]# pwd
/bin
[root@Centos8 bin]# cd -P /bin ==> 使用-P选项切换至物理路径,而非软链接目录
[root@Centos8 bin]# pwd
/usr/bin
[root@Centos8 bin]#
示例3:使用变量
OLDPWD
,和cd -
,切换上次工作目录
[root@Centos8 ~]# pwd
/root
[root@Centos8 ~]# cd /etc/sysconfig/
[root@Centos8 sysconfig]# pwd
/etc/sysconfig
[root@Centos8 sysconfig]# cd -
/root
[root@Centos8 ~]# cd $OLDPWD
[root@Centos8 sysconfig]# pwd
/etc/sysconfig
[root@Centos8 sysconfig]#
tree命令
作用:查看目录结构
常用选项:
-d
:只显示目录-L level
:指定显示的层级数目-P pattern
:只显示符合pattern的文件或目录名称
--p
:列出权限标识-f
:在每个文件或者目录之前,显示完整的相对路径名称-s
:列出文件或目录大小
示例1:
-d
选项,只显示目录
[root@CentOS7 sys]# tree -d /bin/
/bin/
0 directories
[root@CentOS7 sys]#
示例2:使用
-L
选项,查看/
目录下最大层级至二级目录的文件
[root@CentOS7 ~]# tree -L 2 / | less
/
├── bin -> usr/bin
├── boot
│ ├── config-3.10.0-693.el7.x86_64
│ ├── efi
│ ├── grub
│ ├── grub2
│ ├── initramfs-0-rescue-3294e3e9c57e4456ae2de75b02f30ddc.img
│ ├── initramfs-3.10.0-693.el7.x86_64.img
│ ├── initrd-plymouth.img
│ ├── symvers-3.10.0-693.el7.x86_64.gz
│ ├── System.map-3.10.0-693.el7.x86_64
│ ├── vmlinuz-0-rescue-3294e3e9c57e4456ae2de75b02f30ddc
│ └── vmlinuz-3.10.0-693.el7.x86_64
├── data
├── dev
│ ├── agpgart
│ ├── autofs
│ ├── block
│ ├── bsg
│ ├── btrfs-control
│ ├── bus
│ ├── cdrom -> sr0
│ ├── char
│ ├── console
│ ├── core -> /proc/kcore
示例3:查看指定目录下子目录,不包含文件
[root@CentOS7 ~]# tree -L 1 -d /etc
/etc
├── alternatives
├── audisp
├── audit
├── auto.master.d
├── bash_completion.d
├── binfmt.d
├── chkconfig.d
├── cron.d
├── cron.daily
├── cron.hourly
├── cron.monthly
├── cron.weekly
├── dbus-1
├── default
├── depmod.d
├── dhcp
├── dracut.conf.d
├── firewalld
├── gcrypt
├── gnupg
├── groff
├── grub.d
├── gss
├── init.d -> rc.d/init.d
├── iproute2
├── kernel
├── krb5.conf.d
├── ld.so.conf.d
├── libnl
├── logrotate.d
├── modprobe.d
├── modules-load.d
├── my.cnf.d
├── NetworkManager
├── openldap
├── opt
├── pam.d
├── pkcs11
├── pki
├── plymouth
├── pm
├── polkit-1
├── popt.d
├── postfix
├── ppp
├── prelink.conf.d
├── profile.d
├── python
├── rc0.d -> rc.d/rc0.d
├── rc1.d -> rc.d/rc1.d
├── rc2.d -> rc.d/rc2.d
├── rc3.d -> rc.d/rc3.d
├── rc4.d -> rc.d/rc4.d
├── rc5.d -> rc.d/rc5.d
├── rc6.d -> rc.d/rc6.d
├── rc.d
├── rpm
├── rsyslog.d
├── rwtab.d
├── sasl2
├── security
├── selinux
├── skel
├── ssh
├── ssl
├── statetab.d
├── sudoers.d
├── sysconfig
├── sysctl.d
├── systemd
├── terminfo
├── tmpfiles.d
├── tuned
├── udev
├── vmware-tools
├── wpa_supplicant
├── X11
├── xdg
├── xinetd.d
├── yum
└── yum.repos.d
81 directories
[root@CentOS7 ~]#
示例4:查看/etc/目录下最大深度为2级的文件列表,显示全部路径和权限
[root@CentOS7 ~]# tree -f -p -L 2 /etc/
/etc
├── [-rw-r--r--] /etc/adjtime
├── [-rw-r--r--] /etc/aliases
├── [-rw-r--r--] /etc/aliases.db
├── [drwxr-xr-x] /etc/alternatives
├── [-rw-r--r--] /etc/yum.conf
└── [drwxr-xr-x] /etc/yum.repos.d
├── [drwxr-xr-x] /etc/yum.repos.d/backup
├── [-rw-r--r--] /etc/yum.repos.d/Centos-7.repo
└── [-rw-r--r--] /etc/yum.repos.d/epel.repo
154 directories, 301 files
mkdir命令
作用:及make directories 缩写,创建目录
格式:mkdir [OPTION]… DIRECTORY…
参数:
-m
:指定创建文件的模式(权限),作用类似于chmod-p
:递归创建目录,默认创建目录其父目录必须存在,如果父目录不存在,希望自动创建父目录,使用此选项-v
:创建目录时候给出详细说明,创建目录是列出他们
示例1:创建目录
[root@CentOS7 ~]# mkdir /data/mysql
[root@CentOS7 ~]# tree /data/
/data/
└── mysql
1 directory, 0 files
[root@CentOS7 ~]#
示例2:创建目录及父目录,当父目录不存在是,直接创建子目录默认会失败,可通过
-p
选项,实现父目录自动创建;使用-v
选项显示创建过程
[root@CentOS7 ~]# mkdir /data/dir1/dir2/dir3
mkdir: cannot create directory ‘/data/dir1/dir2/dir3’: No such file or directory
[root@CentOS7 /]# mkdir -pv /data/dir1/dir2/dir3
mkdir: created directory ‘/data/dir1’
mkdir: created directory ‘/data/dir1/dir2’
mkdir: created directory ‘/data/dir1/dir2/dir3’
[root@CentOS7 /]#
[root@CentOS7 ~]# tree /data/
/data/
├── dir1
│ └── dir2
│ └── dir3
└── mysql
4 directories, 0 files
[root@CentOS7 ~]#
rmdir命令
作用:
- 删除空目录,删除的目录内,不能有文件,否则无法删除
- 如果想删除非空目录,可以使用
rm -r
命令,递归删除目录树
格式:
rmdir [OPTION]... DIRECTORY...
参数:
-p
:递归删除目录及其空的父目录-v
:显示详细信息
示例1:
[root@CentOS7 /]# rmdir -pv /data/dir1/dir2/dir3
rmdir: removing directory, ‘/data/dir1/dir2/dir3’
rmdir: removing directory, ‘/data/dir1/dir2’
rmdir: removing directory, ‘/data/dir1’
rmdir: removing directory, ‘/data’
rmdir: failed to remove directory ‘/data’: Device or resource busy
[root@CentOS7 /]# tree /data/
/data/
└── mysql
1 directory, 0 files
[root@CentOS7 /]#
五、复制/etc/profile 至 /tmp/目录,用查找替换命令删除 /tmp/profile文件中的行首空白字符
1、使用cp命令,将/etc/profile文件复制到/tmp目录中
[root@Centos8 ~]# cp /etc/profile /tmp/
[root@Centos8 ~]# ll /tmp/
total 4
-rw-r--r--. 1 root root 2124 Feb 19 18:13 profile
2、使用vim编辑/tmp/profile文件,vim支持正则表达式
- vim /tmp/profile
[root@Centos8 ~]# vim /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
- 用查找命令
/^[[:blank:]]\+
,找到该文件行首的空白字符 - 在vim中使用替换功能,格式:s/要查找的内容/替换为的内容/修饰符
- 如果要替换全局的要%s
命令如下%s/^[[:blank:]]\+//g
:
六、在vim中设置tab缩进4个字符
1、永久生效
打开vim配置文件 vim /etc/vimrc,在文档最后面输入
set ts=4
set expandtab
[root@Centos8 ~]# vim /etc/vimrc
set noexpandtab
set ts=4
2、临时生效
使用vim编辑器打开一个配置文件,直接输入命令模式下直接输入:set tabstop=4就设置成功tab键缩进4个字符的设置了
没有设置之前,默认是缩进8个字符
:
[root@Centos8 etc]# vim fstab
aa
12345678
# /etc/fstab
/dev/mapper/cl-root / xfs defaults 0 0
UUID=0844fea5-2009-42db-99da-95420a53298c /boot xfs defaults 0 0
/dev/mapper/cl-data /data xfs defaults 0 0
/dev/mapper/cl-swap none swap defaults 0 0
~
使用set tabstop=4设置以后缩进为4个字符
[root@Centos8 etc]# vim fstab
aa
1234
#
# /etc/fstab
/dev/mapper/cl-root / xfs defaults 0 0
UUID=0844fea5-2009-42db-99da-95420a53298c /boot xfs defaults 0 0
/dev/mapper/cl-data /data xfs defaults 0 0
/dev/mapper/cl-swap none swap defaults 0 0
:set tabstop=4