Linux文件管理技术实践

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:

  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版)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/347925.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型相关学习资料整理【长久更新】

笔者学习和收集大模型相关资料&#xff0c;只收集&#xff1a;官方 OR 易懂 OR 全面。 且后续我会针对大模型的名词和新机制做专门易懂的博客讲解&#xff0c;可以点个关注。等待后续更新。 目前整理资料如下&#xff1a; 1. 核心应用开发框架 1. semantic-kernel【微软】 …

vue3-elementPlus部分组件样式修改

前提&#xff1a;在less语言下使用/deep/&#xff1b;在sass语言下使用 ::v-deep 替换 /deep/ 但::v-deep的写法已经废弃&#xff0c;建议使用:deep(css选择器) elementUI样式修改&#xff1a;vue2-elementUI部分组件样式修改_vue2 圆圈选中样式-CSDN博客 el-dropdown //下拉…

如何修复HP打印机黄灯故障灯?这里提供详细步骤

HP打印机配备了两个黄色指示灯,一个在“恢复”按钮上,另一个在打印头警报图标上。此类指示灯主要出现在HP Deskjet、Smart Tank和Envy系列打印机上。 当打印头警报图标亮起黄色时,问题主要出现在墨盒。它表示墨盒内的墨芯液位低,或者是时候清洁打印头了。如果“恢复”按钮…

lumen自定义封装api限流中间件

背景 现在公司重构api项目&#xff0c;针对有些写入和请求的接口需要进行限制设置。比如说一分钟60次等。看了网上的都是laravel的throttle限流&#xff0c;但是没有针对lumen的&#xff0c;所以需要自己重新封装。 实现 1.在App\Http\Middleware下创建一个自定义的中间件&a…

CS BOF文件编写/改写

Beacon Object File(BOF) cs 4.1后添加的新功能&#xff0c; Beacon在接收执行obj前&#xff0c;Cobalt Strike会先对这个obj文件进行一些处理&#xff0c;比如解析obj文件中一些需要的段.text&#xff0c;.data&#xff0c;在处理一些表比如IMAGE_RELOCATION&#xff0c;IMAGE…

QT入门篇---无门槛学习

1.1 什么是 Qt Qt 是⼀个 跨平台的 C 图形⽤⼾界⾯应⽤程序框架 。它为应⽤程序开发者提供了建⽴艺术级图形界⾯所需的所有功能。它是完全⾯向对象的&#xff0c;很容易扩展。Qt 为开发者提供了⼀种基于组件的开发模式&#xff0c;开发者可以通过简单的拖拽和组合来实现复杂的…

RUST笔记 FireDBG| Rust 代码调试器

安装https://firedbg.sea-ql.org/blog/2023-12-12-introducing-firedbg/ 更新VSCODE sudo dpkg -i code_1.85.2-1705561292_amd64.deb 安装FireDBG binaries (base) pddpdd-Dell-G15-5511:~$ curl https://raw.githubusercontent.com/SeaQL/FireDBG.for.Rust/main/install.sh …

[极客大挑战 2019]PHP1

知识点&#xff1a; 1.序列化的属性个数大于实际属性个数可以绕过_wakeup() 详见[CTF]PHP反序列化总结_ctf php反序列化-CSDN博客 2.private属性类名和属性名前都会有多一个NULL&#xff0c;phpstorm运行结果可以显示出来&#xff0c;但是复制出去会变成空格&#xff0c;要手动…

【Single Cell Genomics】Part2 Deep representation learning (form theislab)

文章目录 7 Deep representation learning in single cell genomics7.1 scanpy7.2 DCA7.3 scGen: predicting single-cell perturbation effects7.4 Human cell atlas 来自Manolis Kellis教授&#xff08;MIT计算生物学主任&#xff09;的课 YouTube&#xff1a;Single Cell Ge…

关于达梦认证DCA DCP,TIDB认证PCTA PCTP考试那点事儿

文章最后有彩蛋&#xff0c;一定要看到最后... 一、正确的道路上遇到正确的你 伴随中国数据库领域的快速技术进步&#xff0c;国内数据库生态蓬勃发展&#xff0c;并不断涌现出极具创新力的产品&#xff0c;推动了数据库应用的遍地开花。截至2024年1月&#xff0c;墨天轮数据社…

SWMM模型INP解析

.INP文件解析 [OPTIONS]&#xff1a;SWMM软件运行前需要设置的参数 [RAINGAGES]雨水节点&#xff0c;核心设置雨水时间序列&#xff0c;可为INP内部数据也可为外部txt数据&#xff0c;TIMESERIES对应【TIMESERIES】模块&#xff0c;TS_1为时间序列名称 [TIMESERIES]&#xff0…

红黑树底层实现

什么是红黑树 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red&#xff08;红&#xff09;或Black&#xff08;黑&#xff09;&#xff0c;它是一种比AVL树在使用上更优秀的树&#xff0c;通过对任何一条从根…

微信小程序开发position等于static、relative、absolute、fixed、stricky时元素显示详细介绍

No Position 不设置position时显示,以红色元素做测试: Static 元素根据界面正常流进行定位。top、right、bottom、left 和 z-index 属性不起作用。这是默认值。 红色元素设置position: static,显示如下: Relative 元素根据界面正常流进行定位。以元素当前位置为基准,根…

g2o--ba代码解析

概要 g2o是常用的图优化理论c库&#xff0c;其自带了很多example讲解如何使用该库文件&#xff0c;本文分析其中ba的示例代码。 所谓的图优化&#xff0c;就是把一个常规的优化问题&#xff0c;以图&#xff08;Graph&#xff09;的形式来表述。 在图中&#xff0c;以顶点表…

单片机介绍

本文为博主 日月同辉&#xff0c;与我共生&#xff0c;csdn原创首发。希望看完后能对你有所帮助&#xff0c;不足之处请指正&#xff01;一起交流学习&#xff0c;共同进步&#xff01; > 发布人&#xff1a;日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…

Spring Boot 模块工程(通过 Maven Archetype)建立

前言 看到我身边的朋友反馈说&#xff0c;IDEA 新建项目时&#xff0c;如果通过 Spring Initializr 来创建 Spring Boot , 已经无法选择 Java 8 版本&#xff0c;通过上小节的教程&#xff0c;不知道该如何创建 Spring Boot 模块工程。如下图所示&#xff1a; 一.IDEA 搭建 …

记录一下uniapp 集成腾讯im特别卡(已解决)

uniapp的项目运行在微信小程序 , 安卓 , ios手机三端 , 之前这个项目集成过im,不过版本太老了,0.x的版本, 现在需要添加客服功能,所以就升级了 由于是二开 , 也为了方便 , 沿用之前的webview嵌套腾讯IM的方案 , 选用uniapp集成ui ,升级之后所有安卓用户反馈点击进去特别卡,几…

【深度学习】CodeFormer训练过程,如何训练人脸修复模型CodeFormer

文章目录 BasicSR介绍环境数据阶段 I - VQGAN阶段 II - CodeFormer (w0)阶段 III - CodeFormer (w1) 代码地址&#xff1a;https://github.com/sczhou/CodeFormer/releases/tag/v0.1.0 论文的一些简略介绍&#xff1a; https://qq742971636.blog.csdn.net/article/details/134…

Mysql索引相关学习笔记:B+ Tree、索引分类、索引优化、索引失效场景及其他常见面试题

前言 索引是Mysql中常用到的一个功能&#xff0c;可以大大加快查询速度&#xff0c;同时面试中也是经常碰到。本文是学习Mysql索引的归纳总结。 索引采用的数据结构——B 树 本部分主要是参考自小林Coding B树的由来 二分查找可以每次缩减一半&#xff0c;从而提高查找效率…

【mongoDB】数据库的创建和删除

目录 1. 查看所有数据库 2.创建数据库 3.查看当前连接的数据库 4.删除数据库 1. 查看所有数据库 show dbs 2.创建数据库 use 数据库名 例如创建一个名为 aaa 的数据库 3.查看当前连接的数据库 db 4.删除数据库 use 数据库名 db.dropDataBase() 比如删除数据库 aaa