Linux文件管理技术实践

news2024/9/28 17:24:21

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【大模型研究】(1):从零开始部署书生·浦语2-20B大模型,使用fastchat和webui部署测试,autodl申请2张显卡,占用显存40G可以运行

1&#xff0c;演示视频 https://www.bilibili.com/video/BV1pT4y1h7Af/ 【大模型研究】&#xff08;1&#xff09;&#xff1a;从零开始部署书生浦语2-20B大模型&#xff0c;使用fastchat和webui部署测试&#xff0c;autodl申请2张显卡&#xff0c;占用显存40G可以运行 2&…

重磅!证监会回应股市波动!2万亿元救市计划正在商榷!将提振比特币?

最近这段时间&#xff0c;国内资本市场震荡走弱、波动加大&#xff0c;一些投资者深感忧虑。多家机构表示&#xff0c;市场波动已引起高层的重视。 继1月23日&#xff0c;证监会党委扩大会议从宏观层面提出资本市场建设发力重点后&#xff0c;1月24日证监会副主席王建军的一席采…

工作软技能第一弹,关于职场沟通、成长的那些事

引言 在谈绩效后&#xff0c;我收获了一些心得&#xff0c;在此梳理出来&#xff0c;加深印象并且共勉 基本信息 在步入职场后&#xff0c;你可能跟我一样虽然技术水平有在上升&#xff0c;但是在处理一些事情上可能偶尔没能获得预期的成果。我在通过绩效沟通以及自我反思后…

centos系统安装Ward服务器监控工具

简介 Ward是一个简约美观多系统支持的服务器监控面板 安装 1.首先安装jdk yum install java-1.8.0-openjdk-devel.x86_64 2.下载jar wget 3.启动 java -jar ward-1.8.8.jar 体验 浏览器输入 http://192.168.168.110:4000/ 设置服务名设置为:myserver 端口号:5000 点击…

php实现多进程的几种方式

目录 一&#xff1a;使用pcntl扩展库 二&#xff1a;使用Swoole扩展 三&#xff1a;使用多进程模式PHP-FPM 在PHP中实现多进程主要有以下几种方式&#xff1a; 一&#xff1a;使用pcntl扩展库 pcntl扩展库提供了多线程相关的函数&#xff0c;如pcntl_fork()用于创建子进程…

探索设计模式的魅力:深入理解面向对象设计的深层原则与思维

如何同时提高一个软件系统的可维护性 和 可复用性是面向对象对象要解决的核心问题。 通过学习和应用设计模式&#xff0c;可以更加深入地理解面向对象的设计理念&#xff0c;从而帮助设计师改善自己的系统设计。但是&#xff0c;设计模式并不能够提供具有普遍性的设计指导原则。…

C#用DateAndTime.DateDiff方法和TimeSpan分别计算时间间隔

目录 一、计算时间间隔的方法 1.用DateAndTime.DateDiff方法计算时间间隔 2.使用TimeSpan获取日期时间间隔 二、实例 1.示例一&#xff1a;用DateAndTime.DateDiff方法计算时间间隔 2.示例二&#xff1a;使用TimeSpan获取日期时间间隔 一、计算时间间隔的方法 1.用Date…

vue3 组件通信 mitt

mitt 安装 pnpm add mitttypescript 在 tsconfig.json 中设置 “strict”: true {"compilerOptions": {"strict": true,} }使用 导出 emitter src/utils/mitt/index.ts import mitt from mitttype Events {get-name: string }export const emitter …

go-zero 统一返回

1、整体目录结构 1、全局处理主入口 package manageimport ("net/http""github.com/zeromicro/go-zero/rest/httpx" )type Body struct {Code int json:"code"Message string json:"message"Result interface{} jso…

每日一道Java面试题:方法重载与方法重写,这把指定让你明明白白!

写在开头 请聊一聊Java中方法的重写和重载&#xff1f; 这个问题应该是各大厂面试时问的最多的话题之一了&#xff0c;它们几乎贯穿了我们日常的开发工作&#xff0c;在过往的博客中我们多多少少都提到过重载与重写&#xff0c;而今天我们就一起来详细的学习一下这二者的功能与…

arcgis实现截图/截屏功能

arcgis实现截图/截屏功能 文章目录 arcgis实现截图/截屏功能前言效果展示相关代码 前言 本篇将使用arcgis实现截图/截屏功能&#xff0c;类似于qq截图 效果展示 相关代码 <!DOCTYPE html> <html> <head><meta charset"utf-8"><meta nam…

InnoDB索引

B树与B树 索引的数据结构就是B树&#xff0c;它的叶子节点存储数据(数据页)&#xff0c;非叶子节点存储索引(索引页)。 所以索引走树&#xff0c;全表扫走叶子节点的单向链表(mysql里优化成双向) 二级索引页(非主键) 多个目录项记录 目录项记录 每页记录的最小值 主键值 …

Linux系统下常用软件安装汇总,包括mysql,java,git,redis等

01.环境搭建 1.安装列表 MySQL 5.7.11 Java 1.8 Apache Maven 3.6 tomcat8.5 git Redis Nginx python docker 2.安装mysql 1.拷贝mysql安装文件到Linux的某个目录下 2.解压Linux安装包&#xff1a;tar -xvzf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz 3.进入解压后…

[漏洞复现]Redis 沙盒逃逸漏洞(CVE-2022-0543)

一、漏洞情况分析 Redis 存在代码注入漏洞&#xff0c;攻击者可利用该漏洞远程执行代码。 二、漏洞复现 春秋云境.com 进入靶场 开始复现 三、漏洞处置建议 把靶场关了&#xff0c;跟漏洞说“白白吧

4.【SpringBoot3】文章管理接口开发

序言 在文章管理模块&#xff0c;有以下接口需要开发&#xff1a; 新增文章文章列表&#xff08;条件分页&#xff09;获取文章详情更新文章删除文章 数据库表字段和实体类属性&#xff1a; 1. 新增文章 需求分析 当用户点击左侧菜单中的“文章管理”后&#xff0c;页面主…

apk加固后,签名后没有V2签名的,targetsdk版本改为30后报字节没有对齐的

当我吧targetsdk版本改为30后,加固后重新签名发现,安装不上报错 adb: failed to install E:\XX\262_rel.apk: Failure [-124: Failed parse during installPackageLI: Targeting R (version 30 and above) requires the resources.arsc of installed APKs to be stored uncomp…

全桥变压器计算1

一共有两级&#xff0c;先DC升压&#xff0c;后H桥逆变为AC 因为两级都有损耗&#xff0c;所以一般用输入功率计算 电池升压到400V高压用的效率用表示&#xff0c;后面DC转AC的效率用表示&#xff0c;输入电压用Vin&#xff0c;输出功率Po2000W,输入功率为Pin 一般和96% 所…

叩开c++的大门

目录 1. 什么是c&#xff1f; 2. c的发展史 3. c和c语言的区别是什么呢&#xff1f; 4. 接下来让我们正式进入c的学习吧。 4.1 c的关键字 4.2 命名空间 4.2.1 命名空间的定义 4.2.2 命名空间的使用 4.3 c的输入输出 std命名空间的使用惯例std是C标准库的命名空间&…

深入《羊了个羊》:从0到1的消除游戏开发

一、游戏简介 《羊了个羊》是一款备受欢迎的消除类游戏。玩家需要通过交换相邻的方块&#xff0c;使三个或更多相同方块连成一线&#xff0c;从而将它们消除。消除方块可以获得分数&#xff0c;并在全球排行榜上与其他玩家竞争。 设置项目结构 首先&#xff0c;在文本编辑器中…

【数据结构与算法】之字符串系列-20240126

这里写目录标题 一、12. 整数转罗马数字二、43. 字符串相乘三、49. 字母异位词分组四、151. 反转字符串中的单词五、179. 最大数 一、12. 整数转罗马数字 中等 罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D …