shell
shell的种类(了解)
shell是用于和Linux内核进行交互的一个程序,他的功能和window系统下的cmd是一样的。而且shell的种类也有很多常见的有c shell、bash shell、Korn shell等等。而本文就是使用Linux最常见的bash shell对Linux常见指令展开探讨。
内置shell指令和外置shell指令
内置指令和外置指令是Linux为了能够在解决内存的情况下,确保操作系统运行性能的有效手段,为了能够提高系统响应速度,想cat、pwd、exit、echo等这些指令都会在用户登录的时候将其直接载入内存中。而外置的shell指令就类似于ls等这些只有用户使用的时候才会将指令载入内存的命令就是外置指令。
不同用户所能够看到的shell
当用户登录成功后,shell就会根据根据不同身份的用户做出不同的命令行提示,假如我们是普通用户那么下图所示的位置就是一个$,若为超级用户,则提示一个#。
无论是普通用户还是超级用户,他们指令命令的过程都是一样的,假如他们输入了内置的指令,那么shell会直接通过内部的解释器解释为系统调用,然后交给系统内核执行。若不是内置指令,则要先去硬盘查找到对应指令,在执行上述那些解释提交内核等步骤。
shell语法以及使用技巧
shell使用的语法格式也很简单,即
command [-option arg]
翻译成中文就是命令 [选项] [参数]
就以查看文件列表为例子,我们的命令可以是只有命令如
ls
即查看文件
或者带一个选项
ls -l
亦或者带一个参数
ls -l /etc
了解完了shell基本语法之后,我们再来聊聊shell一些特殊的技巧,其实有时候,我们可以在一次输入完成多条指令,只需用; 隔开即可。举个例子,假如我们在tmp文件夹下有一个文件mylinux1.txt
我们希望为其复制出一个mylinux2.txt之后,再查看当前文件列表是否有这个数据时,我们就可以将两条命令用封号隔开一起输入给操作系统
cp mylinux1.txt mylinux2.txt ; ls -l
可以看到在完成复制之后,第二条查看文件列表的命令也执行成功了
而有些时候,我们使用的命令太长了,我们希望输入的时候可以换行输入,对此我们可以使用\来隔开,命令如下
ls -l \
/etc
shell的通配符
有时候我们使用的命令需要的参数可能会出现模糊匹配的情况,对此shell提供了强大的通配符为我们解决问题。
在介绍统配符,使用实例之前,我们先介绍一个指令
ls -l
这个指令意味列出当前目录下所有非隐藏文件的详细信息
假若我们希望找到当前目录下所有的txt文件信息呢?以我们上文距离的tmp为例子,命令如下所示,可以看到*就代表未知数。我们希望查找到的文件就是任何一个.txt结尾的文件
ls -l *.txt
假如我们要查询的一个文件只有一个未知数呢?例如我们想找一个myliu(这个单词未知)1.txt的文件,我们要怎么找呢?很简单,上面的*表示全未知数,而?就是表示单未知数的。所以我们的命令为
ls -l mylinu?1.txt
亦或者,有时候就对文件的某个单词不确定,但又有给定范围,比如说你知道你要查找的文件是mylinux(这个位置的字母未知,但是你确定可能是1或者2)的时候,你就可以使用范围匹配
ls -l mylinux[12].txt
shell重定向
聊到shell重定向我们就无法先理解一些重定向的概念,在标准的操作系统运行中,我们将键盘的内容输入给操作系统,这就是标准输入。而操作系统的处理结果显示到屏幕上,这就是标准的输出。同理错误信息从操作系统输出到屏幕或者打印机上也是标准的错误输出。
所以重定向的概念也很好理解,如下图,输入重定向则是将这些由用户输入内容改为用文件内容作为输入
。而输出和错误重定向则是将结果输出到屏幕改为结果输出到文件中
了解了这些概念之后,我们就可以介绍操系统的重定向使用示例了,首先我们来了解一下输入重定向,最直接的命令就是wc,wc就是用于统计当前文本内容的行数、单词数、字符数
wc < /etc/shadow
很明显这条命令就是使用文本作为输入,典型的输入重定向。输出内容也说明当前文件44行、44个单词、1266个字符。
关于输入重定向还有一种特别的使用方式,即将以你希望的字符作为开头,当你在输入这个字符的时候就代表输入结束。
例如我希望wc能够统计我们自己指定的字符串,所以我会议str作为开头,当我再次输入str后,就代表输入结束,让wc给我统计出最终结果,示例如下,注意我们重定向符号是<<哦
了解了输入重定向之后,输出重定向也很好解释了,例如我们希望将ls -l的结果输出到ls.txt文件中,我们就可以这样写
ls -l >ls.txt
需要注意,使用>指定输出位置时,会将该文件的内容覆盖了,所以若想将内容追加的输出文本,我们就必须使用
ls -l >> ls.txt
而错误重定向则是将你指令输出错误的结果输出到文本中,他的重定向符号和输出重定向差不多,若不需要将错误结果追加到文本中则是2>,
若是需要追加则是2>>
不追加的错误重定向示例
ls abc 2>err.txt
追加的错误重定向示例
ls abc 2>>err.txt
shell的管道符
说到shell管道符,这个符号也是很强大的,它会将上一条指令的输入作为下一条指令的输出。例如我们直到ls -l是查看当前文件列表详细信息,more是分页查看你所指定的内容。
那么有意思的来了,如果我们希望将ls -l的内容作为more查看的内容要怎么做呢?命令如下即可
ls -l | more
shell引用
shell引用就是对于某些对Linux而言是关键字的字符通过转移的形式将其表达出来,例如你有一个文件为abc?,若你想将他重命名为abc,使用下面这条命令是不会成功的
mv abc? abc
正确的做法是通过转移字符\将?表达出来
mv abc\? abc
需要注意的是转移字符在在单引号或者双引号内部都是需要转移的,例如 S H E L L 代表的是 s h e l l 的环境变量 , 若你在单引号中直接声明,很可能输出的就是 s h e l l 的环境变量若你想输出为 ‘ SHELL代表的是shell的环境变量,若你在单引号中直接声明,很可能输出的就是shell的环境变量 若你想输出为` SHELL代表的是shell的环境变量,若你在单引号中直接声明,很可能输出的就是shell的环境变量若你想输出为‘SHELL`这几个字符的话,你就得学会转移,如第二个示例
[root@localhost tmp]# str1="$SHELL"
[root@localhost tmp]# echo $str1
/bin/bash
如下所示,通过\完成了特殊变量的转移
[root@localhost tmp]# str2="\$SHELL"
[root@localhost tmp]# echo $str2
$SHELL
系统管理和维护指令
ls
了解了shell基础之后我们就可以展开探讨一些基础命令,首先就是ls这个命令了,这个命令是我们在Linux之中最常用的命令,通过这条命令我们可以看到文件或者文件夹的各种信息
这条指令的常见选项如下所示
选项与参数:
-a :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
-A :全部的文件,连同隐藏档,但不包括 . 与 .. 这两个目录
-d :仅列出目录本身,而不是列出目录内的文件数据(常用)
-f :直接列出结果,而不进行排序 (ls 预设会以档名排序!)
-F :根据文件、目录等信息,给予附加数据结构,例如:
*:代表可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
-h :将文件容量以人类较易读的方式(例如 GB, KB 等等)列出来;
-i :列出 inode 号码,inode 的意义下一章将会介绍;
-l :长数据串行出,包含文件的属性与权限等等数据;(常用)
-n :列出 UID 与 GID 而非使用者与群组的名称 (UID 与 GID 会在账号管理提到!)
-r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;
-R :连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来;
-S :以文件容量大小排序,而不是用档名排序;
-t :依时间排序,而不是用档名。
--color=never :不要依据文件特性给予颜色显示;
--color=always :显示颜色
--color=auto :让系统自行依据设定来判断是否给予颜色
--full-time :以完整时间模式 (包含年、月、日、时、分) 输出
--time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime)
而非内容变更时间 (modification time)
例如,我们想查看家目录下的文件详细信息,包括隐藏文件夹信息,我们就可以使用下面这条命令
ls -al ~
又比如,我们想查看家目录下的文件详情,并且不显示颜色,对于特殊文件,我们还希望能显示他的文件类型,例如文件夹那么输出的文件夹后面就会加一个/,而可执行文件就会加一个*等。
ls -alF --color=never ~
最后我们再给一个例子,我们希望能够完整的展示出当前文件夹列表下文件修改时间的完整信息
ls -al --full-time ~
命令就差不多这些了,更多选项读者们可以根据上文提供的命令选项查看效果,这里就不过多做演示了
pwd
pwd说白了就是查看当前你所处的工作位置,非常简单
需要补充的是这条指令还有一个比较特殊,或者说是非常偏门的用法那就是-P
,这个命令查可以追踪那些软链接文件实际的工作路径。
# 进入下面这个目录
cd /var/mail/
# 查看当前所处位置
pwd
#可以看到输出的当前目录位置
/var/mail
# 查看当前所处位置的文件夹实际的工作目录,而非链接目录
pwd -P
# 可以看到输出的是实际工作目录位置
/var/spool/mail
cd
cd命令完整的英文为change directory,说白了就是改变文件目录,而谈到改变目录,我们必须了解关于操作系统的中这几个关键字所代表的目录含义
1. . 代表当前目录
2. .. 代表上级目录
3. ~ 代表家目录
4. - 代表上次目录
了解了这些概念后我们就一一展开描述,当前目录就不多描述了,比较少用。使用cd跳到上级目录,就比如我当前在tmp目录,使用cd ..
就可以回到上级目录了。
同理回到家目录也一样,使用cd ~
需要补充说明的是,我们当前所使用的用户是root,root在Linux中是至高无上的,所以我们可以到别人的家目录,示例如下
最后我们再来说说cd -
,意为跳到上次所处的目录,说起来很拗口实际很简单,举个例子
首先我们回到根目录
cd /
在进入/tmp目录
cd /tmp
此时,我们使用cd到var目录
cd /var
由于我们是从tmp跳到var的,所以在var执行cd -,就会从var目录跳回用户之前呆着的目录位置,原理如下图
命令的结果如下图所示
date
date指令对于超级用户来说,可以修改日期以及查看日期,而普通用户则只能查看日期了,这个指令的参数比较多,如下所示
具体例子,由于我现在是超级用户,假如我想将时间改为20220607
date -s 20220607
而我想将时间改为17:30
date -s 17:30
若我们想日期和时间一起改,则可以
date -s "20220629 00:32"
su
su常用于切换用户身份,还有一些参数如下
我们怕是切换为root都是使用su root,实际上我们也可以使用su -然后输入密码切换为root账户,如下图所示:
有时候我们想以普通用户身份修改root账户密码,我们就可以使用如下命令来完成
su -c passwd
clear
这个就是一个控制台清屏操作无数赘述
man
查看命令帮助信息,和–help差不多
例如
man ls
我们就会看到这些
who
who命令用于显示目前登录到系统中的用户情况,基本使用参数如下
查看系统运行级别
查看每个用户的登录详情以及终端使用情况
w
同样是显示系统上登录用户的信息,参数如下
使用示例
uname指令
该命令常用于查询操作系统的查询选项的,命令选项如下所示:
例如
uname -a
即可查看操作系统的内核信息
uptime指令
uptime主要用于查看系统运行时长以及使用情况的指令
free命令
查看内存使用情况,参数如下
使用示例
ps指令
查看进程的使用情况
使用示例
top命令
查看系统处理器使用情况
键入
top
我们逐行分析这些数据是什么,第1行分别是当前系统时间、运行时长,当前登录系统的用户数量为2,5、10、15分钟统计的系统负载。
第3行则是当前任务总数,运行中的二年无数,休眠的任务书,停止的还有僵尸进程任务数。
第3行us代表系统用户进程所占百分比,sy代表系统进程所占百分比,id空闲cpu所占的百分比。wa代表等待输入输出的进程所占百分比。
第4行就是free指令就能看到的不多赘述了。
文件的管理和编辑
mkdir指令
创建文件夹的命令,常见选项如下
特殊用法,假如我们要创建user1,再基于user1文件夹下创建user2,我们就可以使用-p,一次性创建两级不存在的目录
mkdir -p user1/user2
文件内容查阅相关指令
cat、tac直接查阅
cat指令:将文件内容作为标准输出,以下便是命令的基本选项:
-A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E :将结尾的断行字符 $ 显示出来;
-n :打印出行号,连同空白行也会有行号,与 -b 的选项不同;
-T :将 [tab] 按键以 ^I 显示出来;
-v :列出一些看不出来的特殊字符
指令示例
直接查看文件内容
cat /etc/issue
查看时候带上行号
cat -n /etc/issue
将文件内容的特殊字符都显示出来
cat -A /etc/man_db.conf
tac和cat差不多,从英文字符排序就知道tac是反向输出的,示例如下
nl:添加行号打印输出
选项与参数:
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在屏幕的最左方显示;
-n rn :行号在自己字段的最右方显示,且不加 0 ;
-n rz :行号在自己字段的最右方显示,且加 0 ;
-w :行号字段的占用的字符数。
基础示例
nl /etc/issue
若有空白行也打印输出行号以及内容
nl -b a /etc/issue
输出所有行同时,行号右对齐,缺就补0
nl -b a -n rz /etc/issue
上述命令默认都是补为6位数,我们可以通过-w设置为补充为3位数
nl -b a -n rz -w 3 /etc/issue
more、less可翻页查询
more可以对查看文件进行翻页、搜索等强大功能,键入more以及对应文件后,使用如下命令可完成相应功能
空格键 (space):代表向下翻一页;
Enter :代表向下翻『一行』;
/字符串 :代表在这个显示的内容当中,向下搜寻『字符串』这个关键词;
:f :立刻显示出文件名以及目前显示的行数;
q :代表立刻离开 more ,不再显示该文件内容。
b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
相比之下,less相当于more的加强版,指令更强大一些
空格键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字符串 :向下搜寻『字符串』的功能;
?字符串 :向上搜寻『字符串』的功能;
n :重复前一个搜寻 (与 / 或 ? 有关!)
N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
g :前进到这个资料的第一行去;
G :前进到这个数据的最后一行去 (注意大小写);
q :离开 less 这个程序
less /etc/man_db.conf
head、tail查看头尾
head即从头开始查看文件,一般格式为
head -n number
不指定行,默认输出文件前10行
head /etc/man_db.conf
输出前20行
head -20 /etc/man_db.conf
输出100行之前的数据
head -n -100 /etc/man_db.conf
tail:文件从后往前看
显示倒数10行
tail /etc/man_db.conf
显示最后的20行
tail -n 20 /etc/man_db.conf
查看100行以后的数据
tail -n +100 /etc/man_db.conf
实时输出尾巴那几行数据,直到按ctrl+c
tail -f /etc/man_db.conf
例题1:
- 显示 /etc/man_db.conf 的第 11 到第 20 行
首先使用nl命令查看11到20行的内容
答案
head -20 /etc/man_db.conf |tail -n +11
例题2:希望上面看到的结果能够显示行号
nl /etc/man_db.conf|head -20 |tail -n +11
或者
cat -n /etc/man_db.conf | head -n 20 | tail -n 10
od查看非文本文档
od指令常用于查看那些非纯文本的文件。例如/etc/passwd等
选项或参数:
-t :后面可以接各种『类型 (TYPE)』的输出,例如:
a :利用默认的字符来输出;
c :使用 ASCII 字符来输出
d[size] :利用十进制(decimal)来输出数据,每个整数占用 size bytes ;
f[size] :利用浮点数(floating)来输出数据,每个数占用 size bytes ;
o[size] :利用八进制(octal)来输出数据,每个整数占用 size bytes ;
x[size] :利用十六进制(hexadecimal)来输出数据,每个整数占用 size bytes
是ASCII查看对应文件
od -t c /usr/bin/passwd
查看对应文件的字符八进制值与ASCII值对照
od -t oCc /usr/bin/passwd
例题:我不想找 google,想要立刻找到 password 这几个字的 ASCII 对照,该如何透过 od 来判断?
echo password|od -t oCc
diff指令
用于比较两个文件字符之间的差异,命令的选项如下
例如我们有两个文件分别是a、b,这俩文件内容如下
diff a b
可以看到结果输出了1c1说明b文件的第一行和第一个文件a相比有改变,若是d则说明后者和前者比被删了某些数据,a则说明后者比前者多了某些数据
加个-c显示两者的不同之处的位置
grep
从文件中找到需要的字符串,选项参数如下
从a中找到this这个字符串
grep this a
若只想找到匹配的行数
grep -c this a
rm
删除指令,常见命令选项如下
-f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
我们常用的就是rm -rf
touch指令
touch命令常用于常见文件或者修改文件时间信息,关于文件涉及的时间信息有以下3种
1. atime:文件最后一次被访问的时间
2. ctime:文件权限或者属性被修改的时间
3. mtime:文件内容被修改的时间
常见文件指令大家都熟练不多赘述,这里我们聊以下如何基于touch修改atime和ctime
我们以bashrc文件为例,查看他的mtime,atime,ctime
#从家目录复制文件
[zhangshiyu@localhost tmp]$ cp ~/.bashrc bashrc
# 查看mtime atime ctime
[zhangshiyu@localhost tmp]$ ll bashrc ;ll --time=atime bashrc ;ll --time=ctime bashrc ;
-rw-r--r--. 1 zhangshiyu zhangshiyu 231 Jun 29 15:48 bashrc
-rw-r--r--. 1 zhangshiyu zhangshiyu 231 Jun 29 15:48 bashrc
-rw-r--r--. 1 zhangshiyu zhangshiyu 231 Jun 29 15:48 bashrc
# 将其mtime,atime改为两天前
touch -d "2 days ago" bashrc
使用touch精确修改mtime、atime
touch -t 202206261553 bashrc
更多指令选项如下
-a :仅修订 access time;
-c :仅修改文件的时间,若该文件不存在则不建立新文件;
-d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
-m :仅修改 mtime ;
-t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]
ln
常见链接的指令,链接分为两种:
1. 软链接:类似于windows的快捷方式,文件被删除这个链接就作为
2. 硬链接:增加一个文件的指针,除非所有文件的指针都被删了,否则这个文件就不会被销毁
ln命令常见选项
演示建立硬链接,只有文件指针和硬链接都被删除文件才会被删除,首先我们需要建立一个示例文件如下图
创建硬链接
ln linkfile.txt linkfile2.txt
确保两者链接为同一个文件,我们修改linkfile2,在this is my file后面加一个字符串1,结果查看源文件也修改了,说明两者链接的是同一个file
删除文件指针,结果通过硬链接还能查看,由此能出硬链接独立于文件指针,其中一者删除不会影响另一方
演示软链接,实验如下,创建测试文件lf,建立软链接lf2
[root@localhost tmp]# echo this is my file >lf
[root@localhost tmp]# ln -s lf lf2
删除文件指针,软链接无法查看文件
file命令
用于查看文件类型
file ~/.bashrc
file /usr/bin/passwd
可以看到该文件为动态函数库文件
file /var/lib/mlocate/mlocate.db
数据库data文件
split命令
用于将大文件切割的,指令参数如下
讲nginx日志切割成3k一份,名字都以back打头
split -b 3k /var/log/nginx/access.log /var/log/nginx/back
文件复制与移动
复制
cp指令就是用于文件的复制,以下为cp指令的选项
-a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用)
-d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;
-f :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l :进行硬式连结(hard link)的连结档建立,而非复制文件本身;
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r :递归持续复制,用于目录的复制行为;(常用)
-s :复制成为符号链接文件 (symbolic link),亦即『快捷方式』文件;
-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。
--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了。
最后需要注意的,如果来源档有两个以上,则最后一个目的文件一定要是『目录』才行!
将/var/log/wtmp
复制到当前目录
cp /var/log/wtmp .
但是我们发现复制的属性不完全相同,对此我们可以使用-a将文件原原本本复制过来
cp -a /var/log/wtmp wtmp2
如果要复制目录,我们可以使用-r,确保里面的东西可以递归的被复制过去
cp -r /etc/ /tmp/
移动
若是需要文件移动,我们可以使用mv命令,对应选项如下
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会更新 (update)
当然mv命令也常用于文件重命名,例如将文件a重命名为b
mv a b
指令与文件的搜寻
which
根据环境变量path查看指令是否存在
whereis
whereis会搜寻特定目录下的文件,执行效率会快一些
选项与参数:
-l :可以列出 whereis 会去查询的几个主要目录而已
-b :只找 binary 格式的文件
-m :只找在说明文件 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件
whereis ifconfig
locate
相比于后面的指令find,locate是去数据库中查找文件,执行效率和对性能影响相对较低一些
选项与参数:
-i :忽略大小写的差异;
-c :不输出档名,仅计算找到的文件数量
-l :仅输出几行的意思,例如输出五行则是 -l 5
-S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
-r :后面可接正规表示法的显示方式
locate passwd
find
虽然是基于磁盘查找性能差,但是这个文件查询命令我们比较经常用到
选项与参数:
1. 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
-mtime n :n 为数字,意义为在 n 天之前的『一天之内』被更动过内容的文件;
-mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件档名;
-mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件档名。
-newer file :file 为一个存在的文件,列出比 file 还要新的文件档名
上面的参数可能看着很懵,我们使用下面这张图理解一下,如果find -mtime -4
就说明查找前4天时间段的文件。find -mtime 4
即查找前第4天的文件。find -mtime +4
即查找第4天前的所有文件
查找第4天前的数据
find /var/log/ -mtime +4
今天是26号可以看到查找到的文件是21号,确实在4天前
find更多参数
选项与参数:
3. 与文件权限及名称有关的参数:
-name filename:搜寻文件名为 filename 的文件;
-size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:
c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB
还要大的文件,就是『 -size +50k 』
-type TYPE :搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f), 装置文件 (b, c),
目录 (d), 连结档 (l), socket (s), 及 FIFO (p) 等属性。
-perm mode :搜寻文件权限『刚好等于』 mode 的文件,这个 mode 为类似 chmod
的属性值,举例来说, -rwsr-xr-x 的属性为 4755 !
-perm -mode :搜寻文件权限『必须要全部囊括 mode 的权限』的文件,举例来说,
我们要搜寻 -rwxr--r-- ,亦即 0744 的文件,使用 -perm -0744,
当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,
因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。
-perm /mode :搜寻文件权限『包含任一 mode 的权限』的文件,举例来说,我们搜寻
-rwxr-xr-x ,亦即 -perm /755 时,但一个文件属性为 -rw-------
也会被列出来,因为他有 -rw.... 的属性存在!
根目录开始查询passwd文件
find / -name passwd
模糊含有passwd的文件
find / -name "*passwd*"
查看run目录下为socket的文件
find /run/ -type s
查询有suiid、sgid、sbit的文件
find / -perm /7000
当然,为了便于查看详情信息我们可以将上面的查询结果以文件列表的形式展现出来,以下指令原理如下图,exec前面的指令作为后面{}的参数,交给ls -l作为参数
find / -perm /7000 -exec ls -l {} \;
参考文献
鸟哥的Linux私房菜
循序渐进Linux(第2版)