美文网首页
Linux目录相关命令

Linux目录相关命令

作者: david161 | 来源:发表于2022-05-14 19:52 被阅读0次

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命令的效果,如下图:


image.png

其中第一个字段的第一个字符是文件类型。如果是"-",表示普通文件;如果是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)打印或显示当前工作路径

相关文章

网友评论

      本文标题:Linux目录相关命令

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