在Linux系统的文件与目录的管理上,不外乎『显示属性』、『拷贝』、『删除文件』、『移动文件或目录』、『重命名』等常用操作,由于文件与目录的管理在 Linux当中是很重要的,尤其是每个人自己家目录的数据也都需要管理,所以我们来谈一谈有关文件与目录的一些基础管理部分吧.



♥ 文章声明 ♥
该系列文章部分文字描述,整理于以下文献,化繁为简.
《鸟哥的Linux私房菜 (基础学习篇 第三版)》 - 作者:鸟哥
《Linux就该这么学》 - 作者:刘遄



◆ls 显示目录或文件◆

ls命令用来显示目标列表,在Linux系统中是使用率较高的命令.ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件,其参数我们会在下面进行说明.

[root@localhost ~]# ls --help

命令语法:[ ls [选项] 文件或目录 ]

-a #显示所有文件,包括隐藏文件,连同.与..的文件也列出来
-A #显示所有文件,包括隐藏文件,但不列出.与..
-d #仅列出目录
-f #直接列出结果不排序
-h #文件大小显示为B KB MB
-i #列出文件的Inode号
-l #以长格式显示
-n #列出uid与gid
-S #以文件容量大小排序(大文件在前小文件在后)
-t #以时间大小排序(大日期在前小日期在后)
-r #将排序结果反向输出
-R #递归显示目录以及子目录
-Z #列出SELinux安全上下文
--full-time #列出文件详细时间
--time=atime/ctime/mtime #列出指定时间

实例1:使用 ​​ls -lh​​ 参数查询所在目录详细信息

[root@localhost ~]# ls -lh
total 0
-rw-r--r--. 1 root root 0 Nov 13 09:36 admin
drwxr-xr-x. 2 root root 6 Nov 13 09:36 lyshark

第1项: 文件权限位
第2项: 引用计数(文件:硬链接数 目录:目录下的子目录个数)
第3项: 文件的所有者(属主->此处为root)
第4项: 文件的所属组(属组->此处为root)
第5项: 文件大小(默认单位字节byte)
第6项: 最后一次修改时间
第7项: 文件名

实例2:使用 ​​ls -lh --full-time​​ 显示文件创建的详细时间信息

[root@localhost ~]# ls -h --full-time
total 0
-rw-r--r--. 1 root root 0 2018-11-13 09:36:25.172274787 -0500 admin
drwxr-xr-x. 2 root root 6 2018-11-13 09:36:13.292275532 -0500 lyshark

实例3:使用 ​​ls -lhS​​ 显示文件,并按照文件由大到小打印

[root@localhost ~]# ls -lhS
total 0
drwxr-xr-x. 2 root root 6 Nov 13 09:36 lyshark
-rw-r--r--. 1 root root 0 Nov 13 09:36 admin

实例4:使用 ​​ls -lhrS​​ 显示文件,并按照文件由小到大打印

[root@localhost ~]# ls -lhrS
total 0
-rw-r--r--. 1 root root 0 Nov 13 09:36 admin
drwxr-xr-x. 2 root root 6 Nov 13 09:36 lyshark

实例5:使用 ​​ls -lZ​​ 显示文件,并显示SeLinux安全上下文

[root@localhost ~]# ls -lZ 
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 admin
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 lyshark

◆cd 目录跳转与切换◆

cd命令用来切换工作目录至dirname,其中dirName表示法可为绝对路径或相对路径,若目录名称省略,则变换至使用者的home directory,.则是表示目前所在的目录,..则表示目前目录位置的上一层目录,其参数我们会在下面进行说明.

[root@localhost ~]# cd --help

命令语法:[ cd [选项] 目录 ]

cd #进入用户主目录
cd ~ #进入用户主目录
cd - #返回进入此目录之前所在的目录
cd .. #返回上级目录
cd ../.. #返回上两级目录
cd !$ #把上个命令的参数作为cd参数使用

实例1:使用 ​​cd ~ or cd​​ 切换到用户家目录

[root@localhost etc]# pwd
/etc

[root@localhost etc]# cd

[root@localhost ~]# pwd
/root

实例2:使用 ​​cd ..​​ 切换上一级目录里去

[root@localhost ~]# pwd
/root

[root@localhost ~]# cd ..

[root@localhost /]# pwd
/

实例3:使用 ​​cd ../..​​ 切换上两级目录里去

[root@localhost sysconfig]# pwd
/etc/sysconfig

[root@localhost sysconfig]# cd ../..

[root@localhost /]# pwd
/

◆mkdir 创建新目录◆

mkdir命令用来创建目录,该命令创建由dirname命名的目录,如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录,如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录,在创建目录时,应保证新建的目录与它所在目录下的文件没有重名,其参数我们会在下面进行说明.

[root@localhost ~]# mkdir --help

语法格式:[ mkdir [选项] 新目录名 ]

-v #显示创建过程
-p #递归创建目录
-Z #设置安全上下文
-m #建立目录时同时设置权限

实例1:使用 ​​mkdir -p​​ 递归创建目录

[root@localhost ~]# mkdir -p /tmp/lyshark/lyshark

[root@localhost ~]# ls -lh /tmp/lyshark/
total 0
drwxr-xr-x. 2 root root 6 Nov 13 09:56 lyshark

实例2:使用 ​​mkdir -m​​ 建立目录时同时设置权限.

[root@localhost ~]# mkdir -m 000 lyshark

[root@localhost ~]# ls -lh
total 0
d---------. 2 root root 6 Nov 13 10:02 lyshark

◆touch 创建空文件◆

touch命令有两个功能,一是用于把已存在文件的时间标签更新为系统当前的时间,它们的数据将原封不动地保留下来,二是用来创建新的空文件,多数情况下我们只是用它来创建空文件,其参数我们会在下面进行说明.

[root@localhost ~]# touch --help

语法格式:[ touch [选项] 文件名 ]

-a #修改访问时间
-c #修改文件时间,若文件不存在则不创建新文件
-m #仅修改mtime
-t #修改文件时间(touch -t 1806101012)

实例1:使用 ​​touch​​ 命令在当前目录下创建一个空文件lyshark.txt.

[root@localhost ~]# ls -lh
total 0

[root@localhost ~]# touch lyshark.txt

[root@localhost ~]# ls -lh
total 0
-rw-r--r--. 1 root root 0 Nov 13 10:32 lyshark.txt

实例2:使用 ​​touch -t​​ 命令修改文件的时间改成15年11月03日11点59分.

[root@localhost ~]# ls -lh --full-time
total 0
-rw-r--r--. 1 root root 0 2018-11-13 10:35:50.639051120 -0500 lyshark.txt

[root@localhost ~]# touch -t 1511031159 lyshark.txt

[root@localhost ~]# ls -lh --full-time
total 0
-rw-r--r--. 1 root root 0 2015-11-03 11:59:00.000000000 -0500 lyshark.txt

◆cp 复制文件或目录◆

cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录,它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下.cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误,其参数我们会在下面进行说明.

[root@localhost ~]# cp --help

语法格式:[ cp [选项] 源文件或目录 目标目录 ]

-a #相当于pdr
-d #连同链接文件的属性一起复制
-f #强制复制
-i #如目标文件已存在,则覆盖时询问
-p #连同文件属性一起复制(备份常用)
-r #递归复制,用于目录的复制
-s #复制时创建软连接
-u #源文件更新时才会提示复制

实例1:使用 ​​cp -a​​ 命令实现文件拷贝,将/etc/的文件拷贝到/tmp/目录下.

[root@localhost ~]# cp -a /etc/* /tmp/

[root@localhost ~]# ls -lh /tmp/
total 1.1M
-rw-r--r--. 1 root root 16 Oct 13 12:37 adjtime
-rw-r--r--. 1 root root 1.5K Jun 7 2013 aliases
-rw-r--r--. 1 root root 12K Oct 13 12:39 aliases.db
drwxr-xr-x. 2 root root 236 Oct 13 12:34 alternatives
....省略....

实例2:使用 ​​cp -s​​ 命令实现拷贝文件,将/etc/passwd创建软链接到/tmp/目录下.

[root@localhost ~]# cp -s /etc/passwd /tmp/

[root@localhost ~]# ls -lh /tmp/
total 0
lrwxrwxrwx. 1 root root 11 Nov 13 10:09 passwd -> /etc/passwd

实例3:使用 ​​cp -a​​ 命令实现一次拷贝多个文件,到/tmp/目录下.

[root@localhost ~]# cp -a /etc/passwd /etc/shadow /tmp/

[root@localhost ~]# ls -lh /tmp/
total 8.0K
-rw-r--r--. 1 root root 898 Oct 13 12:37 passwd
----------. 1 root root 714 Oct 13 12:37 shadow

◆mv 移动文件或目录◆

mv命令用来对文件或目录重新命名,或将文件从一个目录移到另一个目录中.source表示源文件或目录,target表示目标文件或目录.如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖,其参数我们会在下面进行说明.

[root@localhost ~]# mv --help

语法格式:[ mv [选项] 源文件或目录 目标目录 ]

-f #强制移动
-i #以互动方式移动
-u #源文件更新才会移动

实例1:使用 ​​mv​​ 命令实现将/etc/passwd移动到/tmp目录下.

[root@localhost ~]# mv /etc/passwd /tmp/

[root@localhost ~]# ls -lh /tmp/
total 4.0K
-rw-r--r--. 1 0 root 898 Oct 13 12:37 passwd

实例2:使用 ​​mv​​ 命令实现一次移动多个文件,下面将/etc/passwd和/etc/shadow 移动到/tmp目录下.

[root@localhost ~]# mv /etc/passwd /etc/shadow /tmp/

[root@localhost ~]# ls -lh /tmp/
total 8.0K
-rw-r--r--. 1 0 root 898 Oct 13 12:37 passwd
----------. 1 0 root 714 Oct 13 12:37 shadow

实例3:使用 ​​mv​​ 命令实现重命名,将当前目录下的lyshark改名为linux.

[root@localhost ~]# ls -lh
total 0
drwxr-xr-x. 2 root root 6 Nov 13 10:19 lyshark

[root@localhost ~]# mv lyshark/ linux

[root@localhost ~]# ls -lh
total 0
drwxr-xr-x. 2 root root 6 Nov 13 10:19 linux

◆rm 删除文件或目录◆

rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉.对于链接文件,只是删除整个链接文件,而原有文件保持不变,使用rm命令要格外小心,因为一旦删除了一个文件,就无法再恢复它,其参数我们会在下面进行说明.

[root@localhost ~]# rm --help

语法格式:[ rm [选项] 文件或目录 ]

-f #不提示警告信息,直接删除
-r #递归删除
-i #删除前提示
-fr #常用搭配

实例1:使用 ​​rm -fr​​ 命令删除当前目录下的linux目录.

[root@localhost ~]# ls
linux
[root@localhost ~]# rm -fr linux/
[root@localhost ~]# ls

实例2:使用 ​​rm -fr *​​ 命令使用通配符,删除指定文件夹内的所有文件.

[root@localhost lyshark]# ls
1 10 2 3 4 5 6 7 8 9

[root@localhost lyshark]# rm -fr *
[root@localhost lyshark]# ls

◆file 判断文件的类型◆

file命令用来检测给定文件的类型,file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程,其参数我们会在下面进行说明.

[root@localhost ~]# file --help

语法格式:[ file [选项] 文件或目录 ]

-b #列出辨识结果时,不显示文件名称
-c #详细显示指令执行过程
-f 文件名 #在文件中一次读取并判断格式
-z #查询压缩包信息

实例1:使用 ​​file​​ 命令判断/etc/passwd 和 /bin/bash 文件的格式.

[root@localhost ~]# file /etc/passwd
/etc/passwd: ASCII text

[root@localhost ~]# file /bin/bash
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.32,
BuildID[sha1]=9a57e086388119ecd285c4d5c66823f3f3b68ab5, stripped

实例2:使用 ​​file -z​​ 命令读取lyshark.tar.gz压缩包文件属性.

[root@localhost ~]# ls -lh
total 9.4M
-rw-r--r--. 1 root root 9.4M Nov 13 10:51 lyshark.tar.gz

[root@localhost ~]# file -z lyshark.tar.gz
lyshark.tar.gz: POSIX tar archive (GNU) ,
(gzip compressed data, from Unix, last modified: Tue Nov 13 10:51:13 2018)

实例3:使用 ​​file -f​​ 命令在文件中读取指定行,并依次判断文件.

[root@localhost ~]# cat temp 
/etc/passwd
/etc/shadow
/bin/bash
/bin/ls

[root@localhost ~]# file -f temp
/etc/passwd: ASCII text
/etc/shadow: ASCII text

/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.32,
BuildID[sha1]=9a57e086388119ecd285c4d5c66823f3f3b68ab5, stripped

/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.32,
BuildID[sha1]=ec3f3e5e8160c9917e8a4b896fe9044748472991, stripped

◆stat 查询文件状态◆

stat命令用于显示文件的状态信息,stat命令的输出信息比ls命令的输出信息要更详细,其参数我们会在下面进行说明.

[root@localhost ~]# stat --help

语法格式:[ stat [选项] 文件或目录 ]

-L #支持符号连接
-f #显示文件系统状态而非文件状态
-t #以简洁方式输出信息

实例1:使用 ​​stat​​ 命令查询/bin/bash和/etc/passwd的相信信息.

[root@localhost ~]# stat /bin/bash
File: ‘/bin/bash’
Size: 964544 Blocks: 1888 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 50340311 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:shell_exec_t:s0
Access: 2018-11-13 09:33:12.197999579 -0500
Modify: 2017-09-26 09:14:20.000000000 -0400
Change: 2018-10-13 12:32:43.377997461 -0400
Birth: -

[root@localhost ~]# stat /etc/passwd
File: ‘/etc/passwd’
Size: 898 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 17175992 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2018-11-13 10:19:51.777111271 -0500
Modify: 2018-10-13 12:37:59.147984612 -0400
Change: 2018-11-13 10:19:05.849114152 -0500
Birth: -

实例2:使用 ​​stat -f​​ 命令显示系统的状态信息.

[root@localhost ~]# stat -f /bin/bash
File: "/bin/bash"
ID: fd0000000000 Namelen: 255 Type: xfs
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 4452864 Free: 4155020 Available: 4155020
Inodes: Total: 8910848 Free: 8877953

◆ln 创建链接文件◆

ln命令用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接,如果要创建符号连接必须使用"-s"选项,符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的,其参数我们会在下面进行说明.

[root@localhost ~]# ln --help

语法格式:[ stat [选项] 文件或目录 ]

-L #支持符号连接
-d #建立目录的硬链接
-f #强制建立链接
-i #覆盖前询问
-s #建立一个软链接

实例1:使用 ​​ln​​ 命令建立一个硬链接.

[root@localhost ~]# ls -lhi
total 944K
33844798 -rwxr-xr-x. 1 root root 942K Sep 26 2017 bash

[root@localhost ~]# ln bash bash_ln
[root@localhost ~]# ls -lhi
total 1.9M
33844798 -rwxr-xr-x. 2 root root 942K Sep 26 2017 bash
33844798 -rwxr-xr-x. 2 root root 942K Sep 26 2017 bash_ln

实例2:使用 ​​ln -s​​ 命令建立一个软链接.

[root@localhost ~]# ls -lhi
total 944K
33844798 -rwxr-xr-x. 1 root root 942K Sep 26 2017 bash

[root@localhost ~]# ln -s bash bash_link
[root@localhost ~]# ls -lhi
total 944K
33844798 -rwxr-xr-x. 1 root root 942K Sep 26 2017 bash
33959316 lrwxrwxrwx. 1 root root 4 Nov 13 11:06 bash_link -> bash


文件内容查阅命令

如果我们要查阅一个文件的内容时,这里有相当多有趣的命令可以来分享一下,最常使用的显示文件内容的命令可以说是 cat 与 more 及 less 了,此外如果我们要查看一个很大型的文件(好几百MB时),但是我们只需要后端的几行字而已,此时我们可以使用tail命令查看后面的行,当然是用tac命令也可以达到相应效果,下面开始说说各个命令的用途吧.

◆cat 文本打印命令◆

cat命令连接文件并打印到标准输出设备上,cat经常用来显示文件的内容,当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容,为了控制滚屏,可以按Ctrl+S键停止滚屏,按Ctrl+Q键可以恢复滚屏,按Ctrl+C(中断)键可以终止该命令的执行,并且返回Shell提示符状态,其参数我们会在下面进行说明.

[root@localhost ~]# cat --help

语法格式:[ cat [选项] 文件名 ]

-b #列出行号,空白行不标号
-E #将结尾段行符$显示出来
-T #将Tab键以^I显示出来
-n #打印出行号

实例1:使用 ​​cat -n​​ 命令给指定文本标号并打印.

[root@localhost ~]# cat -n /etc/passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
....省略....

实例2:使用 ​​cat -E​​ 命令显示文本结束符$.

[root@localhost ~]# cat -E /etc/passwd
root:x:0:0:root:/root:/bin/bash$
bin:x:1:1:bin:/bin:/sbin/nologin$
daemon:x:2:2:daemon:/sbin:/sbin/nologin$
adm:x:3:4:adm:/var/adm:/sbin/nologin$
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin$
sync:x:5:0:sync:/sbin:/bin/sync$
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown$
....省略....

◆head 显示开头文本◆

head命令用于显示文件的开头的内容,在默认情况下,head命令显示文件的头10行内容,其参数我们会在下面进行说明.

[root@localhost ~]# head --help

语法格式:[ head [选项] 文件名 ]

-c 10 #显示前10个字符
-n 10 #显示前10行
-v #总是显示文件名的头信息
-q #不显示文件名的头信息

实例1:使用 ​​head -c​​ 命令显示文本的前20个字符.

[root@localhost ~]# head -c 20 /etc/passwd
root:x:0:0:root:/roo

[root@localhost ~]#

实例2:使用 ​​head -n​​ 命令显示文本前3行.

[root@localhost ~]# head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

◆tail 显示结尾文本◆

tail命令用于输入文件中的尾部内容,tail命令默认在屏幕上显示指定文件的末尾10行,如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题,如果没有指定文件或者文件名为"-",则读取标准输入,如果表示字节或行数的N值之前有一个"+"号,则从文件开头的第N项开始显示,而不是显示文件的最后N项.N值后面可以有后缀:b表示512,k表示1024,m表示1048576(1M),其参数我们会在下面进行说明.

[root@localhost ~]# tail --help

语法格式:[ tail [选项] 文件名 ]

-c 10 #显示后10个字符
-n 10 #显示文件后10行
-f #持续监测文件后面的变化
--pid=PID #与-f合用,表示在进程ID,死掉之后结束

实例1:使用 ​​tail -n​​ 命令显示文本后3行.

[root@localhost ~]# tail -n 3 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
lyshark:x:1000:1000:lyshark:/home/lyshark:/bin/bash

实例2:使用 ​​tail -f​​ 命令动态监控一个文件.

[root@localhost ~]# tail -f /var/log/messages 
Nov 13 10:01:01 localhost systemd: Starting Session 3 of user root.
Nov 13 10:10:54 localhost kernel: e1000: ens32 NIC Link is Down
Nov 13 10:10:58 localhost kernel: e1000: ens32 NIC Link is Up
Nov 13 10:10:58 localhost NetworkManager[772]: <info>
....省略....

实例3:使用 ​​tail --pid=PID​​ 命令监视一个进程.

[root@localhost ~]# ps
PID TTY TIME CMD
1404 pts/0 00:00:00 bash
11441 pts/0 00:00:00 ps
[root@localhost ~]#
[root@localhost ~]# tail --pid=1401
tail: warning: PID ignored; --pid=PID is useful only when following
....省略....

实例4:使用 ​​tail -n +5​​ 命令从第五行以后开始打印.

[root@localhost ~]# tail -n +5 /etc/passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
....省略....

实例5:使用 ​​tail -n +5 | head -n 3​​ 命令从第五行开始打印,向下打印2行内容.

[root@localhost ~]# tail -n +5 /etc/passwd |head -n 3
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

◆nl 指定格式输出文本◆

nl命令读取file参数(缺省情况下标准输入),计算输入中的行号,将计算过的行号写入标准输出.在输出中,nl命令根据您在命令行中指定的标志来计算左边的行,输入文本必须写在逻辑页中,每个逻辑页有头、主体和页脚节(可以有空节),除非使用-p选项,nl命令在每个逻辑页开始的地方重新设置行号.可以单独为头、主体和页脚节设置行计算标志其默认的结果与cat -n有点不太一样,nl可以将行号做比较多的显示设计,包括位数与是否自动补齐0等等的功能,其参数我们会在下面进行说明.

[root@localhost ~]# nl --help

语法格式:[ nl [选项] 文件名 ]

-c 10 #显示后10个字符
-b a #列出行号,包括空格(类似 cat -n)
-b t #列出行号,不包括空格(类似 cat -n)
-n ln #行号显示在最左边
-n rn #行号显示在最右边
-n rz #行号显示在最右边,并加0补齐
-w #指定补齐0的个数

实例1:使用 ​​nl -b a ​​ 命令给文本标号打印(类似于cat -n).

[root@localhost ~]# nl -b a /etc/passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
....省略....

实例2:使用 ​​nl -b a -n rz​​ 命令列出文本并给予编号,空格0填充.

[root@localhost ~]# nl -b a -n rz /etc/passwd
000001 root:x:0:0:root:/root:/bin/bash
000002 bin:x:1:1:bin:/bin:/sbin/nologin
000003 daemon:x:2:2:daemon:/sbin:/sbin/nologin
000004 adm:x:3:4:adm:/var/adm:/sbin/nologin
000005 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
....省略....

实例3:使用 ​​nl -b a -n rz -w 3​​ 命令列出文本并给予编号,编号填充2行0.

[root@localhost ~]# nl -b a -n rz -w 3 /etc/passwd
001 root:x:0:0:root:/root:/bin/bash
002 bin:x:1:1:bin:/bin:/sbin/nologin
003 daemon:x:2:2:daemon:/sbin:/sbin/nologin
004 adm:x:3:4:adm:/var/adm:/sbin/nologin
005 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
....省略....

◆od 非纯文本文件打印◆

od命令用于输出文件的八进制、十六进制或其它格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符,常见的文件为文本文件和二进制文件,此命令主要用来查看保存在二进制文件中的值,其参数我们会在下面进行说明.

[root@localhost ~]# od --help

语法格式:[ od [选项] 文件名 ]

-t a #利用默认字符来输出
-t c #使用ASCII字符输出
-t d #使用十进制输出
-t f #使用浮点数输出
-t o #使用八进制输出
-t x #使用十六进制输出

实例3:使用 ​​od -t a​​ 命令使用默认格式输出.

[root@localhost ~]# od -t a /bin/cd 
0000000 # ! / b i n / s h nl b u i l t i
0000020 n sp c d sp " $ @ " nl
0000032

实例3:使用 ​​od -t c​​ 命令使用ASCII输出.

[root@localhost ~]# od -t c /bin/cd 
0000000 # ! / b i n / s h \n b u i l t i
0000020 n c d " $ @ " \n
0000032

◆more 翻页浏览文本◆

more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作,more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令),其参数我们会在下面进行说明.

[root@localhost ~]# more --help

语法格式:[ more 文件名 ]

空格 #像下翻一页
B #向上翻一页
Enter #向下滚动一行
/字符串 #向下查找字符串
:f #立即显示行号
q或Q #退出

实例1:使用 ​​more​​ 命令打开一个文本.

[root@localhost ~]# more /var/log/messages 
Oct 13 12:39:15 localhost journal: Runtime journal is using 6.0M (max allowed 48.7M, tryi
ng to leave 73.0M free of 481.1M available → current limit 48.7M).
Oct 13 12:39:15 localhost kernel: Initializing cgroup subsys cpuset
Oct 13 12:39:15 localhost kernel: Initializing cgroup subsys cpu
Oct 13 12:39:15 localhost kernel: Initializing cgroup subsys cpuacct
Oct 13 12:39:15 localhost kernel: Linux version 3.10.0-862.el7.x86_64 (mockbuild@x86-034.
build.eng.bos.redhat.com) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP W

--More--(0%)

◆less 可控翻页浏览◆

less命令的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览.用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页,要退出less程序,应按Q键,其参数我们会在下面进行说明.

[root@localhost ~]# less --help

语法格式:[ less [选项] 文件名 ]

-e #文件显示完成后自动退出
-f #强制显示文件
-l #搜索时忽略大小写的差异
-N #每一行行首显示行号

空格 #向下翻动一页
[pageup] #向上翻动一页
/字符串 #向下查找字符串
?字符串 #向上查找字符串
q #退出

实例1:使用 ​​less​​ 命令打开一个文本.

[root@localhost ~]# less -e /var/log/messages

Oct 13 12:39:15 localhost journal: Runtime journal is using 6.0M (max allowed 48.7M, tryi
ng to leave 73.0M free of 481.1M available → current limit 48.7M).
Oct 13 12:39:15 localhost kernel: Initializing cgroup subsys cpuset
Oct 13 12:39:15 localhost kernel: Initializing cgroup subsys cpu
Oct 13 12:39:15 localhost kernel: Initializing cgroup subsys cpuacct
Oct 13 12:39:15 localhost kernel: Linux version 3.10.0-862.el7.x86_64 (mockbuild@x86-034.
build.eng.bos.redhat.com) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP W

/var/log/messages


命令与文件的查找

文件的搜寻可就厉害了,因为我们常常需要知道那个文件放在哪里,才能够对该文件进行一些修改或维护等动作,有些时候某些软件配置档的档名是不变的,但是各Linux发行版,放置的目录则不同.此时就得要利用一些搜寻命令将该配置档的完整档名捉出来,这样才能修改嘛.下面我们将介绍这些常用查找命令.

◆which 查命令绝对路径◆

which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录,which指令会在环境变量$PATH设置的目录里查找符合条件的文件,也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令,其参数我们会在下面进行说明.

[root@localhost ~]# which --help

语法格式:[ which [选项] 命令名 ]

-n 长度 #指定文件名长度
-p 长度 #指定文件名长度
-w #指定输出时栏位的宽度

实例1:使用 ​​which​​ 命令查看一个命令是在那个目录里.

[root@localhost ~]# which bash
/usr/bin/bash

[root@localhost ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls

◆whereis 寻找特定文件◆

whereis命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径,该命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s),如果省略参数,则返回所有信息,其参数我们会在下面进行说明.

[root@localhost ~]# whereis --help

语法格式:[ whereis [选项] 文件名 ]

-b #只找二进制文件
-m #只找man文档
-s #只找源代码

实例1:使用 ​​where -b​​ 命令只找二进制文件.

[root@localhost ~]# whereis -b ifconfig
ifconfig: /usr/sbin/ifconfig

[root@localhost ~]# whereis -m ifconfig
ifconfig: /usr/share/man/man8/ifconfig.8.gz

◆locate 缓存查找文件◆

locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocatedb,这个数据库中含有本地所有文件信息,Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件,为了避免这种情况,可以在使用locate之前,先使用updatedb命令,,手动更新数据库,updatedb命令会根据/etc/updatedb.conf来更新文件,其参数我们会在下面进行说明.

注意:这里需要注意的是,locate这个命令默认是不安装的,我们可以执行 ​​yum install -y mlocate​​ 来安装它.

[root@localhost ~]# locate --help

语法格式:[ locate [选项] 文件名 ]

-d 目录 #指定数据库所在的目录
-i #忽略大小写差异
-r #后面接正则表达式

实例1:使用 ​​locate​​ 命令查询一个文件.

[root@localhost ~]# updatedb 
[root@localhost ~]# locate /etc/passwd
/etc/passwd
/etc/passwd-

◆find 遍历文件查找◆

-name 按文件名查找

常用查询通配符

\* #匹配任意一个或多个字符
? #匹配任意一个字符
[] #指定范围,外侧加引号

实例1:查找/var/目录下,以.log结尾的文件.

[root@localhost ~]# find /var/ -name "*.log"
/var/log/tuned/tuned.log
/var/log/audit/audit.log
/var/log/anaconda/X.log
/var/log/anaconda/program.log
....省略....

实例2:查找/root/目录下,以[1-3之间],结尾是.txt的文件

[root@localhost ~]# ls
1.txt 2.txt 3.txt Catalog File

[root@localhost ~]# find /root/ -name "[1-3].txt"
/root/1.txt
/root/2.txt
/root/3.txt

实例3:查找/etc/目录下,开头是6个任意字符的文件

[root@localhost ~]# find /etc/ -name "??????"
/etc/grub.d
/etc/grub.d/README
/etc/shells
/etc/init.d
....省略....

-size 根据大小查找

单位是 block 数据块  一块是512字节

1M -> 1024k -> 2048 块 (1块是0.5k 也就是512字节)

100M -> 102400k -> 204800块

实例1:查找/etc/目录下,小于10k的文件

root@localhost ~]# find /etc/ -size -10k
/etc/crypttab
/etc/.pwd.lock
/etc/environment
....省略....

实例2:查找/etc/目录下,大于1M的文件

[root@localhost ~]# find /etc/ -size +1M   #查询大于1M的文件
/etc/udev/hwdb.bin
/etc/selinux/targeted/active/policy.kern
/etc/selinux/targeted/contexts/files/file_contexts.bin
/etc/selinux/targeted/policy/policy.31
....省略....

#注意:+-号如果没有,是精确到这么大,通常都会带上+或-号表示一个范围.

-user 根据属主查找

实例1:在/root目录中查找属于wang用户的文件

[root@localhost ~]# find /root/ -user wang
/root/1.txt
/root/2.txt
/root/3.txt
#注意:系统中要存在该用户,否则会报错误.

-perm 根据权限查找

实例1:查找/boot/目录中权限是644的文件

[root@localhost ~]# find /boot/ -perm 0644
/boot/grub2/device.map
/boot/grub2/i386-pc/gcry_rmd160.mod
/boot/grub2/i386-pc/acpi.mod
/boot/grub2/i386-pc/gcry_rsa.mod
....省略....

-type 根据类型查找

-type f 二进制文件(普通文件)
-type l 软链接文件
-type d 目录

实例1:查找/usr/bin/目录下,类型是二进制文件.

[root@localhost ~]# find /usr/bin/ -type f
/usr/bin/cp
/usr/bin/gzip
/usr/bin/alias
/usr/bin/csplit
/usr/bin/bash
....省略....

-time 按时间查找

按天数   ctime  atime  mtime
按分钟 cmin amin mmin

c change #表示属性被修改过:所有者、所属组、权限
a access #被访问过(被查看过)
m modify #表示内容被修改过

实例1:查找/etc/目录下,在120分钟以内,内容被修改过的文件

[root@localhost ~]# find /etc/ -mmin -120
/etc/
/etc/resolv.conf
/etc/group-
/etc/gshadow-
/etc/group
/etc/gshadow
....省略....

实例2:查找/etc/目录下,在7天之前,属性被修改过的文件

[root@localhost ~]# find /etc/ -ctime +7
/etc/resolv.conf
/etc/group-
/etc/gshadow-
....省略....

-inum 根据i节点查询

实例1:有一些文件的硬链接数量很多,有相同的i节点,查找其中一个文件的i节点号,一次性删除。

[root@localhost ~]# find ./ -inum 1024 -exec rm{} \;   #删除相同I节点的数据

-and or 逻辑连接符

-a    (and 逻辑与)     
-o (or 逻辑或)

实例1:在/etc/目录下,查找大于1k,并且小于10k的文件

[root@localhost ~]# find /etc/ -size +1k -a -size -10k
/etc/
/etc/grub.d/00_header
/etc/grub.d/20_ppc_terminfo
/etc/grub.d/00_tuned
/etc/rc.d/init.d/README
/etc/rc.d/init.d/netconsole
/etc/rc.d/init.d/network
/etc/pam.d
....省略....

-exec 命令执行连接符

[查询格式] find  ...  -exec 命令 {}  \;

{} #表示find查询的结果集
\ #是转义符,不使用命令别名,直接使用命令本身
; #分号是表示语句的结束.

#注意:固定格式,只能这样写.注意中间的空格.

-----------------------------------------------------------------
说明: 转义符的作用是什么?

在linux中有一个别名机制,如rm删除文件,执行的却是rm -i(用which rm 可以查看命令别名),
使用rm删除文件前会提示,就是因为rm -i这个参数。如果想使用命令原意,可以在加\转义,
如:\rm test.txt 则不会提示,直接删除

实例1:查找/var/log/目录下名字以.log结尾的文件,找到后执行 ls -l 显示详细信息.

[root@localhost ~]# find /var/log/ *.log -exec ls -l {} \;
total 1176
drwxr-xr-x. 2 root root 204 Sep 18 09:12 anaconda
drwx------. 2 root root 23 Sep 18 09:12 audit
-rw-------. 1 root root 53001 Sep 19 00:57 boot.log
-rw-------. 1 root utmp 384 Sep 18 09:22 btmp
drwxr-xr-x. 2 chrony chrony 6 Apr 12 13:37 chrony
-rw-------. 1 root root 3523 Sep 19 01:01 cron
-rw-r--r-- 1 root root 119414 Sep 19 00:57 dmesg
-rw-r--r-- 1 root root 119599 Sep 18 23:35 dmesg.old
-rw-r--r--. 1 root root 1320 Sep 19 00:23 firewalld
-rw-r--r--. 1 root root 193 Sep 18 09:05 grubby_prune_debug
....

实例2:查找/etc/目录下名字以"init*"开头的文件,找到后,只列出文件,过滤掉目录,并执行 ls -l 显示详细信息.

[root@localhost ~]# find /etc/ -name "init*" -a -type f -exec ls -l {} \;

-rw-r--r--. 1 root root 511 Apr 11 01:09 /etc/inittab
-rw-r--r--. 1 root root 798 Apr 11 01:09 /etc/sysconfig/init
-rwxr-xr-x. 1 root root 5419 Jan 2 2018 /etc/sysconfig/network-scripts/init.ipv6-global
-rw-r--r--. 1 root root 30 Apr 11 14:12 /etc/selinux/targeted/contexts/initrc_context

实例3:查找/tmp/下,的yum.log文件,找到后直接删除.

[root@localhost tmp]# find /tmp/ -name yum.log -exec rm {} \;
[root@localhost tmp]#

实例4:查找根下,找关于lyshark用户的所有文件,找到后直接删除.

[root@localhost ~]# find / -user lyshark -exec rm -r {} \;

find: ‘/proc/1465/task/1465/fd/6’: No such file or directory
find: ‘/proc/1465/task/1465/fdinfo/6’: No such file or directory
find: ‘/proc/1465/fd/5’: No such file or directory
find: ‘/proc/1465/fdinfo/5’: No such file or directory
find: ‘/root/Catalog’: No such file or directory
find: ‘/home/lyshark’: No such file or directory

#rm -r 连带目录一起删除.报错原因:-exec 不适合大量传输,速率慢导致.

实例5:在根下,查找lyshark用户的文件,找到后删除,删除前会提示是否删除.

[root@localhost ~]# find / -user lyshark -ok rm -r {} \;
find: ‘/proc/1777/task/1777/fd/6’: No such file or directory
find: ‘/proc/1777/task/1777/fdinfo/6’: No such file or directory

< rm ... /root/LyShark > ? y

# -ok的使用和-exec是一样的,区别是-ok,执行时会提示你是否进行下一步操作.

版权声明:本博客文章与代码均为学习时整理的笔记,文章 [均为原创] 作品,转载请 [添加出处] ,您添加出处是我创作的动力!