cd 命令(目录切换命令)
cd(Change Directory),用来切换工作目录至指定的目录。
指定的目录可以是绝对路径或相对路径。若指定目录名称省略,则直接切换至当前用户的home directory(也就是刚login时所在的目录)。另外,~ 也表示为 home directory 的意思,. 则是表示目前所在的目录,… 则表示目前目录位置的上一层目录。
命令格式
cd [-L|-P] [DIR]
参数说明
-p
#如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录
-L
#如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。
-
#当仅使用一个横杠-时,切换到环境变量OLDPWD所表示的目录
--
#两个横杠,切换到用户家目录
常用示例
1、切换至根目录
cd /
2、进入上一级目录
cd ../
3、进入home目录
cd ~ 或 cd --
# 还可以使用绝对路径 cd /home/user_name/
# cd /home/mingongge/ #切换到用户为mingongge的家目录
#但是root用户除外,它的家目录就是/root
4、进入上一次工作路径
cd -
5、返回上两级目录
cd ../..
6、把上个命令的参数作为cd参数使用
cd !$
cd命令可以说是Linux中最基本的命令语句,其他的命令语句要进行操作,都是建立在使用cd命令上的。所以,学习Linux常用命令,首先就要学好cd命令的使用方法技巧。
目录查看命令
ls命令
ls(list),ls是list的缩写,ls命令显示指定目录下的内容,列出指定目录下所含的文件及子目录。此命令与Windows系统中dir命令功能相似。
语法格式
ls(选项)(参数)
#选项说明
-a #显示指定目录下的所有文件以及子目录,包含隐藏文件
-A #显示指定目录下的(除“.”和“..”之外)所有文件及子目录
-d #显示指定目录的属性信息
-l #显示指定目录下的文件及子目录详细信息,输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等
-r #倒序显示指定目录下的文件及子目录
-t #以时间顺序显示指定目录下的文件及子目录
-F #在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
-k:#以KB(千字节)为单位显示文件大小
-m:#用“,”号区隔每个文件和目录的名称
-n:#以用户识别码和群组识别码替代其名称
-s:#显示文件和目录的大小,以区块为单位
-L:#如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录
-R:#递归处理,将指定目录下的所有文件及子目录一并处理
常用示例
ls -a 列出目录所有文件,包含.开始的隐藏文件
ls -A 列出除.和..的其他文件
ls -r 反序排列
ls -t 以文件修改时间排序
ls -S 以文件大小排序
ls -h 以易读大小显示
ls -l 以列表方式列出文件,除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来
ll 显示当前目录下文件详细信息。
ll -a 显示当前目录下所有文件(包括隐藏文件)
这里我们来看一下ls -l命令的效果,如下图:

其中第一个字段的第一个字符是文件类型。如果是"-",表示普通文件;如果是d,表示目录。
剩下的9个字符是权限位,3个一组,每一组rwx表示“读(read)”“写(write)”“执行(execute)”。这三组分别表示文件所属的用户权限、文件所属的组权限以及其他用户的权限。
第二个字段是硬链接(hard link)数目,硬链接
第三个字段是所属用户。
第四个字段是所属用户组。
第五个字段是文件大小。
第六个字段是文件修改日期。
最后一个字段是文件名。
应用实例
1、以下命令列出/root目录下文件及子目录。
[root@test ~]# ls -l /root/
total 4
-rw-------. 1 root root 1330 Mar 26 09:50 anaconda-ks.cfg
drwxr-xr-x 2 root root 6 Apr 24 01:59 test
drwxr-xr-x 2 root root 6 Apr 24 01:59 tools
2、以下命令以时间顺序倒序显示/root目录下的文件及子目录,并显示其详细信息。
[root@test ~]# ls -lrt /root/
total 4
-rw-------. 1 root root 1330 Mar 26 09:50 anaconda-ks.cfg
drwxr-xr-x 2 root root 6 Apr 24 01:59 test
drwxr-xr-x 2 root root 6 Apr 24 01:59 tools
3、显示文件索引节点号(inode)。一个索引节点代表一个文件;
[root@ ~]# ls -i *
134435243 1.sh 134318146 anaconda-ks.cfg
4、列出当前工作目录下所有档案及目录;目录于名称后加'/',可执行档于名称后加'*'
ls -AF
5、计算当前目录下的文件数和目录数
ls -l * | grep "^-" | wc -l
ls -l * | grep "^d" | wc -l
6、在ls中列出文件的绝对路径
#ls |sed "s:^:`pwd`/:"
/root/scripts/1.c
/root/scripts/2.c
/root/scripts/3.c
/root/scripts/a b.txt
/root/scripts/b.pdf
/root/scripts/cecho.sh
/root/scripts/echo.sh
tree命令
tree命令的作用是以树形结构显示目录下的内容。
命令安装
#Centos
yum install tree -y
#Ubuntu
sudo apt-get install tree
语法格式
tree [选项] [目录]
选项说明
-a #显示所有文件
-d #只显示目录(名称)
-l #显示链接文件的原始文件
-f #显示所列出的文件或目录的完整目录路径
-i #不以阶梯的形式显示文件或目录名称
-q #将控制字符以?字符代替,显示文件和目录名称
-N #直接显示文件或目录的名称
-p #显示每个文件的权限信息
-u #显示文件所有者或者uid
-g #显示文件所属组或者gid
-s #显示每个文件的大小信息
-h #以可读的方式显示文件的大小信息
-D #显示最后修改日期
-v #按字母数字正序显示文件
-r #按字母数字倒序显示文件
-t #按最后时间排序显示文件
-C #在文件和目录列表上加上色彩,便于区分文件类型
-P pattern #只显示匹配正则表式的文件或目录名称
-I pattern #与上结果相反
应用举例
#树形显示当前目录及其子目录下的文件及目录名称
[root@centos7 testdir]# tree
.
├── dir
│ ├── test2.txt~
│ ├── test3.txt
│ └── test3.txt.bak
├── test2.txt
└── test2.txt~
1 directory, 5 files
#只显示目录名称
[root@centos7 testdir]# tree -d
.
└── dir
1 directory
#显示目录及文件的权限信息
[root@centos7 testdir]# tree -p
.
├── [drwxr-xr-x] dir
│ ├── [-rw-r--r--] test2.txt~
│ ├── [-rw-r--r--] test3.txt
│ └── [-rw-r--r--] test3.txt.bak
├── [-rw-r--r--] test2.txt
└── [-rw-r--r--] test2.txt~
1 directory, 5 files
#显示几层信息2代表2层(向下)
[root@centos7 testdir]# tree -L 2
.
├── dir
│ ├── test2.txt~
│ ├── test3.txt
│ └── test3.txt.bak
├── test2.txt
└── test2.txt~
1 directory, 5 files
[root@centos7 testdir]# tree -L 1
.
├── dir
├── test2.txt
└── test2.txt~
1 directory, 2 files
#显示文件和目录的所有者
[root@centos7 testdir]# tree -u
.
├── [root ] cp -> /usr/bin/cp
├── [root ] dir
│?? ├── [root ] test2.txt~
│?? ├── [root ] test3.txt
│?? └── [root ] test3.txt.bak
├── [root ] test2.txt
└── [root ] test2.txt~
1 directory, 6 files
#显示文件和目录的所属组
[root@centos7 testdir]# tree -g
.
├── [root ] cp -> /usr/bin/cp
├── [root ] dir
│?? ├── [root ] test2.txt~
│?? ├── [root ] test3.txt
│?? └── [root ] test3.txt.bak
├── [root ] test2.txt
└── [root ] test2.txt~
1 directory, 6 files
#不按树形形式显示文件和目录
[root@centos7 testdir]# tree -i
.
cp -> /usr/bin/cp
dir
test2.txt~
test3.txt
test3.txt.bak
test2.txt
test2.txt~
1 directory, 6 files
[root@centos7 testdir]# tree
.
├── cp -> /usr/bin/cp
├── dir
│ ├── test2.txt~
│ ├── test3.txt
│ └── test3.txt.bak
├── test2.txt
└── test2.txt~
1 directory, 6 files
#显示文件和目录的完整路径
[root@centos7 testdir]# pwd
/root/testdir
[root@centos7 testdir]# tree -f
.
├── ./cp -> /usr/bin/cp
├── ./dir
│ ├── ./dir/test2.txt~
│ ├── ./dir/test3.txt
│ └── ./dir/test3.txt.bak
├── ./test2.txt
└── ./test2.txt~
1 directory, 6 files
[root@centos7 ~]# tree -f ./testdir/
./testdir
├── ./testdir/cp -> /usr/bin/cp
├── ./testdir/dir
│ ├── ./testdir/dir/test2.txt~
│ ├── ./testdir/dir/test3.txt
│ └── ./testdir/dir/test3.txt.bak
├── ./testdir/test2.txt
└── ./testdir/test2.txt~
1 directory, 6 files
mkdir命令(创建目录命令)
mkdir 命令用于创建新目录。创建目录时,如果目录名前没有指定路径,那么就直接在当前工作目录下创建新的目录。如指定了路径,那么就会在这个指定的目录下创建一个新目录。创建目录是需要注意,你所创建的目录名与当前目录下的文件名没有重名,如果有重名,系统会出现如下的提示,无法创建成功。
[root@centos7 test]# ls -l
total 0
-rw-r--r-- 1 root root 0 Jan 2 07:06 test
[root@centos7 test]# mkdir test
mkdir: cannot create directory ‘test’: File exists
命令语法
mkdir [选项] [目录名]
mkdir [option] [directory]
选项说明
-m,--mode=模式 #设定权限<模式>(类似 chmod)
-p,--parents #可以是一个路径名称,递归创建目录,可以创建目录路径不存在的目录,即一次可以建立多个目录;
-v,--verbose #显示创建目录的创建过程信息
--help #显示帮助信息并退出
--version #输出版本信息并退出
mkdir temp 当前工作目录下创建名为 temp的文件夹
mkdir -p 用于递归创建目录,创建多级目录时需要用到该命令
mkdir -p /temp/test 在temp目录下创建路径为/temp/test的目录
mkdir -v 创建的时候显示创建的过程
应用举例
1. 创建新目录(一个目录)
[root@centos7 ~]# mkdir testdir
[root@centos7 ~]# ls -l
total 21884
-rw-------. 1 root root 1320 Aug 20 10:39 anaconda-ks.cfg
drwxr-xr-x 2 root root 6 Jan 2 07:12 testdir
2.一次创建多个目录
[root@centos7 ~]# cd testdir
[root@centos7 testdir]# ls
[root@centos7 testdir]# mkdir test1 test2 test3 test4
[root@centos7 testdir]# ls
test1 test2 test3 test4
[root@centos7 testdir]# mkdir -p test6/{1..5}
[root@centos7 testdir]# tree test6
test6
├── 1
├── 2
├── 3
├── 4
└── 5
5 directories, 0 files
3.递归创建目录,当上一级目录不存在时,需要使用递归参数
[root@centos7 testdir]# mkdir test5/test
mkdir: cannot create directory ‘test5/test’: No such file or directory
[root@centos7 testdir]# mkdir -p test5/test
[root@centos7 testdir]# tree
.
├── test1
├── test2
├── test3
├── test4
└── test5
└── test
6 directories, 0 files
4.创建目录时,并配置其权限
#创建的新目录,默认权限是755
[root@centos7 test5]# ll
total 0
drwxr-xr-x 2 root root 6 Jan 2 07:16 test
[root@centos7 test5]# mkdir -m 777 test1
[root@centos7 test5]# ll
total 0
drwxr-xr-x 2 root root 6 Jan 2 07:16 test
drwxrwxrwx 2 root root 6 Jan 2 07:38 test1
chmod命令(目录权限)
chmod 命令用来变更文件或目录的权限。
文件或目录权限有读取、写入、执行这3种,另外还有3种特殊权限。用户可以使用chmod去设置文件与目录的权限,设置方式采用文字或数字皆可。链接文件的权限无法直接变更,如果用户需要对链接文件修改权限,其真实作用是作用在原始文件上。
语法格式
chmod [选项] [权限] [文件或目录]
chmod [OPTION] [MODE] FILE
chmod [OPTION] [MODE] DIRECETORY
选项说明
u #用户user,文件或目录的所有者。
g #用户组group,文件或目录所属组
o #其它用户others
a #所有用户all,系统默认
+ #添加权限
- #取消权限
= #配置文件的权限为指定的权限
r #可读权限
w #可写权限
x #可执行权限
- #没有权限
x #设置可执行权限
s #设置suid和sgid,可以使用“u+s”,“g+s”的方式来设置
t #只有目录或文件的所有者才可以删除目录下的文件
-c #效果类似“-v”参数
-f #操作过程中不显示任何错误信息;
-R #递归处理,将指定目录下的所有文件及子目录一并处理;
-v或——verbose #显示命令运行时的详细执行过程;
--reference=<参考文件或目录> #把指定文件或目录的所属组权限设成参考文件或目录的所属组一样;
<权限范围>+<权限设置> #开启权限范围的文件或目录的该选项权限设置;
<权限范围>-<权限设置> #关闭权限范围的文件或目录的该选项权限设置;
<权限范围>=<权限设置> #指定权限范围的文件或目录的该选项权限设置;
--help #显示帮助信息
--version #显示版本信息
特殊权限说明
Linux系统除了正常的读写操作权限外,还有Linux特殊权限。包括SET位权限(suid,sgid)和粘滞位权限(sticky)。
chmod u+s filename #设置suid位
chmod u-s filename #去掉suid设置
chmod g+s filename #设置sgid位
chmod g-s filename #去掉sgid设置
chmod +t filename #设置粘滞位权限
chmod -t filename #去掉粘滞位权限
如果一个文件被设置了suid或sgid,在其所有者或所属组权限的可执行位上有明显的标记,如果文件设置了suid且也设置了x(执行)权限,则在其执行权限位上会显示一个字母s(小写)。但是,如果没有设置x权限,则显示为字母S(大写)。如下:
-rwsr-xr-x #设置了suid,且文件所有者也配置了可执行权限
-rwSr--r-- #设置了suid,但文件所有者没有配置可执行权限
-rwxr-sr-x #设置了guid,且所属组也配置了可执行权限
-rw-r-Sr-- #设置了guid,但所属组没有配置可执行权限
一个文件或目录如果被设置了粘滞位权限,会在其他人权限的可执行位上有标记。如果文件设置了sticky还设置了x(执行)位,其他人权限的可执行位显示一个字母t(小写)。但是,如果没有设置x位,则显示一个字母T(大写)。如下:
-rwsr-xr-t #表示设置了粘滞位且其他人用户也配置了可执行权限
-rwSr--r-T #表示设置了粘滞位但其他人用户没有配置可执行权限
应用实例
$ chmod u+x file
#给file的属主增加执行权限
$ chmod 751 mingongge
#给mingongge的属主分配读、写、执行权限
$ chmod u=rwx,g=rx,o=x mingongge
#给mingongge属主分配读写执行权限,属组分配读执行权限,其它人分配执行权限
$ chmod =r mingongge
$ chmod 444 mingongge
#为mingongge的所有者、所属组、其他人分配读权限
$ chmod -R u+r mingongge
#递归地给mingongge录下所有文件和子目录的属主分配读的权限
$ chmod 4755 mingongge
#设置用户ID,给属主分配读、写和执行权限,给所属组和其他用户分配读、执行的权限。
mv命令(目录移动命令)
mv 命令用于移动并重命名文件和目录。或者将文件从一个目录移动到另一个目录中,如果将一个文件移动到一个已经存在的目标文件中,这时目标文件的内容会被此文件内容覆盖。
如果源为文件,而目标为目录,mv 将进行文件的位置移动。如果源为目录,则目标只能是目录(不能为文件),mv 将进行目录的重命令名。
mv 命令移动文件时,在目标不同的情况下,会有下面4种不同的结果:
1)如果目标是指定的某一个具体路径,则源文件会被移动到此目录下,且文件名不变。
2)如果目标不是目录,则源文件名(只能有一个)会变为此目标文件名,如果存在同名文件,则会覆盖己存在的同名文件。
3)如果源文件和目标文件在同一个目录下,mv 的作用就是修改文件名。
4)当目标是目录时,源文件或目录可以是多个,这时所有的源文件都会被移至目标目录下。且所有的文件都将保留以前的文件名。
语法格式
mv [选项] 源文件或目录 目标文件或目录
mv [options] source destination
选项说明
-b #当文件存在时,覆盖前,为其创建一个备份
-f #如果移到的文件或目录与目标重复,则直接覆盖
-i #交互式操作,覆盖前会提示用户进行确认操作,用户通过输入Y/N来确认是否覆盖
-u #若目标文件已存在,且与需移动的文件同名,只有在源文件比目标文件较新时,才会更新目标文件
-t #指定mv的目标目录,此选项使用于移动多个文件到一个目录的情况,此时目标文件在前,源文件在后。
-S<后缀>:#为备份文件指定后缀,而不使用默认的后缀(删除源文件中的斜杠“/”)
-n #不覆盖任何现有文件
-T #将目标当作普通文件,而不是目录
-v #详细输出命令的执行过程
应用举例
1. 移动文件到目标目录
[root@centos7 testdir]# ll
total 0
-rw-r--r-- 1 root root 0 Feb 25 2021 filetest
-rw-r--r-- 1 root root 0 Feb 25 2021 testfile
[root@centos7 ~]# mv mingongge.txt testdir/
[root@centos7 ~]# ll testdir/
total 0
-rw-r--r-- 1 root root 0 Feb 25 2021 filetest
-rw-r--r-- 1 root root 0 Jan 2 08:43 mingongge.txt
-rw-r--r-- 1 root root 0 Feb 25 2021 testfile
2. 移动并重命令文件
[root@centos7 testdir]# mv mingongge.txt test/mingongge
[root@centos7 testdir]# ll test/
total 0
-rw-r--r-- 1 root root 0 Jan 2 08:50 mingongge
mv test.log test1.txt 将文件 test.log 重命名为 test1.txt
mv llog1.txt log2.txt log3.txt /test3 将文件 log1.txt,log2.txt,log3.txt 移动到根的 test3 目录中
mv * ../ 移动当前文件夹下的所有文件到上一级目录
3.如果目标位置有同名文件,我们不希望它被覆盖,可以加上-n选项。
[root@centos7 testdir]# ll *.txt dir/*.txt
-rw-r--r-- 1 root root 0 Jan 2 08:58 dir/test1.txt
-rw-r--r-- 1 root root 0 Jan 2 08:58 dir/test2.txt
-rw-r--r-- 1 root root 0 Jan 2 09:03 test1.txt
-rw-r--r-- 1 root root 0 Jan 2 08:57 test2.txt
-rw-r--r-- 1 root root 0 Jan 2 09:03 test3.txt
[root@centos7 testdir]# mv -nv *.txt dir/
‘test3.txt’ -> ‘dir/test3.txt’
#目标目录中没有test3.txt文件,所以移动成功
[root@centos7 testdir]# ll
total 0
drwxr-xr-x 2 root root 57 Jan 2 09:04 dir
-rw-r--r-- 1 root root 0 Jan 2 09:03 test1.txt
-rw-r--r-- 1 root root 0 Jan 2 08:57 test2.txt
4.备份功能
#如果test2.txt存在,它将会被重命令为test2.txt,原来的文件会被备份
[root@centos7 dir]# cat test1.txt
1
[root@centos7 dir]# cat test2.txt
2
[root@centos7 dir]# mv -b test1.txt test2.txt
mv: overwrite ‘test2.txt’? y
[root@centos7 dir]# ll
total 12
-rw-r--r-- 1 root root 2 Jan 2 09:12 test2.txt
-rw-r--r-- 1 root root 2 Jan 2 09:12 test2.txt~
-rw-r--r-- 1 root root 2 Jan 2 09:12 test3.txt
[root@centos7 dir]# cat test2.txt
1
[root@centos7 dir]# cat test2.txt~
2
#如果test3.txt存在,它将会被重命令为test3.txt.bak
[root@centos7 dir]# mv -b --suffix=.bak test2.txt test3.txt
mv: overwrite ‘test3.txt’? y
[root@centos7 dir]# ll
total 12
-rw-r--r-- 1 root root 2 Jan 2 09:12 test2.txt~
-rw-r--r-- 1 root root 2 Jan 2 09:12 test3.txt
-rw-r--r-- 1 root root 2 Jan 2 09:12 test3.txt.bak
[root@centos7 dir]# cat test3.txt
1
[root@centos7 dir]# cat test3.txt.bak
3
rm命令(目录删除命令)
rm 命令用来删除指定的文件或目录,此命令是一个危险的命令,操作前一定要再三确认是否正确,然后再执行操作步骤。
默认情况,它是不能直接删除目录的,需要配合选项来删除。当使用 -r 或 -R 选项来执行 rm 时,它会递归删除任何匹配到的目录,且它们的子目录以及子目录下包含的所有文件。
如需要针对文件扩展名字符匹配来删除多个文件时,rm 命令需要使用 -i 选项来配合完成。使用这个选项时,系统会逐一提示你是否要删除文件,当你输入y并按Enter键,文件就会被删除,反之,则文件不会被删除。
语法格式
rm [选项] 文件或目录
mv [options] FILE DIRECTORY
选项说明
-d:#把要删除的目录的硬连接数量变成0,删除该目录
-f:#强制删除文件或目录
-i:#删除之前提示用户是否删除
-r或-R:#递归处理
--preserve-root:#不对根目录进行递归操作;
-v:#显示指令的详细执行过程。
应用举例
rm -i *.log 删除任何.log文件,删除前逐一询问确认
rm -f test 删除test目录下的文件,强制删除不用询问
rm -rf test 删除test目录和其子目录下所有的文件,而且不用确认直接强制删除
rm -rf * 将当前目录下的所有目录和文件全部删除
rm -rf /* 将根目录下的所有文件全部删除
这里的rm -f 和rm -rf命令要慎重使用,一定要看清楚目录里面的东西,非必要不建议使用,linux的文件恢复比较困难。
find命令(目录查询命令)
用于在文件树中查找文件,并作出相应的处理。find 命令用来在指定目录下查找文件,在参数之前的任何字符串都会当作是目录名。使用 find 命令时,如何不设置任何参数,则 find 命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部显示出来。
find 还是一个功能非常强大的用于处理 Linux 系统上文件的工具,它可以单独查找文件,也可以与其他程序(命令)结合对需要处理的文件进行操作。
补充说明
Linux文件类型:
f #普通文件
l #符号连接
d #目录
c #字符设备
b #块设备
s #套接字
p #Fifo
UNIX/Linux文件系统中的每个文件都有三种时间戳:
1)访问时间 (-atime/天,-amin/分钟):用户最近一次访问时间。
2)修改时间 (-mtime/天,-mmin/分钟):文件最后一次被修改的时间。
3)变化时间 (-ctime/天,-cmin/分钟):文件元数据(例如权限等)
语法格式
find [目录路径] [选项] [文件名]
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
find pathname -options #通常的格式
选项说明
-amin<分钟>:#查找在指定时间内被存取过的文件或目录,单位分钟
-mmin<分钟>:#查找在指定时间内被更改过的文件或目录,单位分钟
-mtime<24小时数>:#查找在指定时间内被更改过的文件或目录,单位24小时
-atime<24小时数>:#查找在指定时间被写入过的文件或目录,单位24小时
-cmin<分钟>:#查找在指定时间之内被更改过的文件或目录
-ctime<24小时数>:#查找在指定时间之时被更改的文件或目录,单位以24小时计算
-daystart:#从今天开始计算时间
-depth:#从指定目录下最深层的子目录开始查找
-exec<执行指令>:#如果find命令返回值为True,就执行该指令
-false:#将find命令返回值都设为False
-fstype<文件系统类型>:#只查找此指定文件系统类型下的文件或目录
-gid<群组识别码>:#查找匹配此群组识别码的文件或目录
-group<群组名称>:#查找匹配此群组名称的文件或目录
-help或——help:#帮助信息
-links<连接数目>:#查找匹配指定的硬连接数目的文件或目录
-maxdepth<目录层级>:#设置查找的最大目录层级
-mindepth<目录层级>:#设置查找的最小目录层级
-name<范本样式>:#指定字符串作为寻找文件或目录的范本
-path<范本样式>:#指定字符串作为寻找目录的范本样式
-perm<权限数值>:#查找符合指定的权限数值的文件或目录
-size<文件大小>:#查找符合指定的文件大小的文件
-true: #将find命令返回值都设为True
-type<文件类型>:#只查找匹配指定的文件类型的文件
-uid<用户识别码>:#只查找匹配指定的用户识别码的文件或目录
-user<拥有者名称>:#只查找匹配指定的拥有者名称的文件或目录
-version:#显示版本信息
应用举例
1. 当前目录搜索所有文件,文件内容包含 “192.168.1.111” 的内容
find . -type f -name "*" | xargs grep "192.168.1.111"
2. 根据文件或者正则表达式进行匹配,查找需要的文件或目录
#列出当前目录及子目录下所有文件和文件夹
[root@centos7 ~]# find .
#在/mingongge目录下查找包含mingongge开头的文件名
[root@centos7 ~]# find /mingongge -name "mingongge*.log"
/mingongge/mingongge_errors.log
/mingongge/mingongge.log
/mingongge/mingongge_test.log
#当前目录及子目录下查找所有以.txt和.log结尾的文件
[root@centos7 ~]# find . \( -name "*.txt" -o -name "*.log" \)
或
[root@centos7 ~]# find . -name "*.txt" -o -name "*.log"
#匹配文件路径或者文件
[root@centos7 ~]# find /usr/ -path "*txt*"
#基于正则表达式匹配文件路径
[root@centos7 ~]# find . -regex ".*\(\.txt\|\.log\)$"
#忽略大小写
[root@centos7 ~]# find . -iregex ".*\(\.txt\|\.log\)$"
3.find 否定参数用法举例
#找出/mingongge下不是以.log结尾的文件
[root@centos7 ~]# find /mingongge ! -name "*.log"
4.基于目录深度搜索
#向下最大深度限制为5
[root@centos7 ~]# find . -maxdepth 5 -type f
#搜索出深度距离当前目录至少3个子目录的所有文件
[root@centos7 ~]# find . -mindepth 3 -type f
5. 根据文件时间戳进行查找
#查找最近10天内被访问过的所有文件
[root@centos7 ~]# find . -type f -atime -10
#查找超过10天内被访问过的所有文件
[root@centos7 ~]# find . -type f -atime +10
#查找访问时间超过20分钟的所有文件
[root@centos7 ~]# find . -type f -amin +20
#找出比mingongge修改时间更长的所有文件
[root@centos7 ~]# find . -type f -newer mingongge
6.删除查找到的匹配文件
#删除当前目录下所有.txt文件
[root@centos7 ~]# find . -type f -name "*.txt" -delete
7.根据文件权限/所有权进行匹配:
#当前目录下找出权限为777的文件
[root@centos7 ~]# find . -type f -perm 777#找出当前目录下所有者是mingongge的所有文件
[root@centos7 ~]# find . -type f -user mingongge
#找出当前目录下用户组为mingongge的所有文件
[root@centos7 ~]# find . -type f -group mingongge #找出当前目录下权限不是644的.log文件
[root@centos7 ~]# find . -type f -name "*.log" ! -perm 644
8. find 和 -exec 选项结合使用
#找出当前目录下所有者为root的文件,并把所有者更改为mingongge这个用户
[root@centos7 ~]# find .-type f -user root -exec chown mingongge {} \;
#找出当前用户家目录下所有的.log文件并执行删除动作
[root@centos7 ~]# find $HOME/. -name "*.log" -exec rm {} \;
#查找当前目录下所有.log文件并将他们拼接起来然后写入到mingongge.txt这个文件中
[root@centos7 ~]# find . -type f -name "*.log" -exec cat {} \;> /mingongge.txt
#查找出10天前的.log文件,然后全部移动到mingongge目录下
[root@centos7 ~]# find . -type f -mtime +10 -name "*.log" -exec cp {} mingongge \;
#找出当前目录下所有.log文件,然后以“File:文件名”的格式打印输出到屏幕上
[root@centos7 ~]# find . -type f -name "*.log" -exec printf "File: %s\n" {} \;
9. 根据文件大小来查找目标文件
#查找当前目录下文件大小超过500M的文件
[root@centos7 ~]# find . -type f -size +500M
./mingongge/backup_file.tar.gz
./mingongge/upload.tar.gz
#查找当前目录超过500M的文件,并打印出文件的详细属性信息
[root@centos7 ~]# find . -type f -size +800M -print0 | xargs -0 ls -l
-rw-r--r-- 1 root root 4250099200 Apr 15 2019 ./mingongge/backup_file.tar.gz
-rw-r--r-- 1 root root 6832225765 Oct 14 12:57 ./mingongge/upload.tar.gz
#查找当前目录超过500M的文件,并打印出文件的具体大小
[root@centos7 ~]# find . -type f -size +500M -print0 | xargs -0 du -h|sort -nr
6.8G ./mingongge/upload.tar.gz
4G ./mingongge/backup_file.tar.gz
10.查找系统中前5的大文件
# find / -type f -print0 | xargs -0 du -h | sort -rh | head -n 5
1.1G /download/ubuntu-17.04-desktop-amd64.iso
377M /download/app_backup.tar.gz
100M /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.0
93M /usr/lib/firefox/libxul.so
84M /var/lib/snapd/snaps/core_3604.snap
11. 其他常用用法
find -atime -2 查找 48 小时内修改过的文件
find ./ -name '*.log' 在当前目录查找以.log结尾的文件
find /opt -perm 777 查找/opt目录下权限为777的文件
find -size +1000c 查找大于1K的文件
find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录
find / -user user1 搜索属于用户 'user1' 的文件和目录
find /home/user1 -name *.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件
find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件
find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件
find / -name *.rpm -exec chmod 755 '{}' 搜索以 '.rpm' 结尾的文件并定义其权限
find / -xdev -name *.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备
pwd命令(查看当前路径 )
pwd (printing working directory)打印或显示当前工作路径
网友评论