目录
一、mkdir命令
1.1基本语法
1.2常用示例
1.2.1创建目录
1.2.2创建多级目录
1.2.3设置权限
1.2.4递归修改权限
1.2.5显示帮助信息
二、touch命令
2.1基本语法
2.2常用示例
2.2.1创建新的空文件
2.2.2更新现有文件的访问和修改时间戳
2.2.3创建多个文件
2.2.4通过参考文件设置新文件的时间戳
2.2.5使用指定的时间戳创建新文件
三、mv命令
3.1语法格式
3.2常用示例
3.2.1将文件移动到目标目录(将文件从一个目录移动到另一个目录):
3.2.2重命名文件:
3.2.3移动并重命名文件:
四、cp命令
4.1基本语法
4.2常用示例
4.2.1复制文件到目标位置
4.2.2复制目录及其内容到目标位置
4.2.3复制多个文件到目标位置
4.2.4仅复制源目录中更新的文件到目标目录
4.2.5复制并重命名文件
五、删除命令(rm/rmdir)
5.1 rm 命令
5.1.1基本语法
5.1.2示例用法
5.2 rmdir 命令
5.2.1基本语法
5.2.2示例用法:
六、chmod命令
6.1数字表示基本语法
6.2数字表示用法示例
6.3符号表示语法格式
6.4符号表述用法示例
七、chown命令
7.1基本语法
7.2示例用法
八、wc命令
8.1基本语法
8.2示例用法
九、find命令
9.1基本语法
9.2 示例用法
(一)按照文件名查找
(二)按照文件的类型查找
(三)按照用户和组查找
(四)按照被读取/被修改的时间查找
(五)按照文件大小查找
十、cat命令
10.1基本语法
10.2示例用法
十一、grep命令(三剑客之一)
11.1基本语法
11.2用法示例
11.2.1通配符
11.2.2转义符
十二、sed命令(三剑客之一)
12.1基本语法
12.2用法示例
12.2.1动作一:p打印
12.2.2动作二:d删除
12.2.3动作三:s替换
12.2.3.1部分数据替换
12.2.3.2 标签在替换中的使用
12.2.3.3 &在替换中的使用
12.2.4动作四:c取代
12.2.5动作五:a新增
篇前小知识:
假如在Liunx中遇到我们不熟悉的命令或者不认识的命令时,应该怎么办?以下几种方法可以帮助大家快速了解:
1.使用
man
命令来查看一个命令的用法和帮助文档要查看命令的用法,只需在终端中输入
man
命令,后跟你想要了解的命令的名称。例如,要查看ls
命令的用法,可以执行以下命令:man ls
显示与
ls
命令相关的详细信息,包括命令的描述、用法示例、选项和参数等等。你可以使用箭头键上下滚动阅读文档,按Q
键(大写Q)退出。2.使用命令后加上
--help
选项来获取简短的用法提示例如,要查看
grep
命令的用法,可以执行以下命令:grep --help
部分结果展示:
3.whatis
命令用于显示给定命令的简短描述或帮助信息。它通常用于查找命令的用法和功能。
要使用
whatis
命令,只需在终端中输入以下内容:whatis 命令名
将"命令名"替换为您想要查找的实际命令名称。
例如,如果您要查找
ls
命令的简短描述,可以运行以下命令:whatis ls
返回与该命令相关的简短描述
4.通过网络途径,上网查询
一、mkdir命令
mkdir命令用于在Linux中创建新的文件夹或目录。
1.1基本语法
mkdir [选项] 目录名
常用选项包括:
-
-m
:指定新创建目录的权限。例如,mkdir -m 755 directoryname
将创建一个具有所有者读、写、执行权限,其他用户有读和执行权限的目录。默认权限为777。 -
-p
:递归创建目录,即如果指定的目录路径中的某些目录不存在,也会一并创建。例如,mkdir -p /path/to/newdirectory
会创建路径中所有不存在的目录。
1.2常用示例
以下是一些常见的Linux文件夹或目录相关的操作:
1.2.1创建目录
使用mkdir
命令来创建新的目录。例如,要创建以下几个目录,可以执行以下命令:
--创建目录:csy
mkdir csy--创建目录:csybackup
mkdir csybackup--创建目录:csyothers
mkdir csyothers
使用ls
命令列出指定目录中的文件和子目录。例如,要列出当前目录的内容,可以执行以下命令:
使用cd
命令进入指定的目录。例如,要进入myfolder
目录,可以执行以下命令:
cd csy
使用pwd
命令来显示当前所在的目录路径。例如,要查看当前目录的路径,可以执行以下命令:
1.2.2创建多级目录
使用-p
选项可以创建多级目录,如果父级目录不存在,则会同时创建父级目录。格式如下:
mkdir -p parent_directory/child_directory
比如创建csy/fail1,csy1/fail1,执行以下命令:
mkdir -p csy/fail1
mkdir -p csy1/fail1
查看创建的目录/文件夹:
1.2.3设置权限
使用-m
选项来设置新创建目录的权限。权限可以使用八进制数表示,例如755
表示所有者有读、写、执行权限,而其他用户只有读和执行权限。格式如下:
mkdir -m 755 directory_name
比如给csy2目录设置权限为755:
mkdir -m 755 csy2
查看权限:
提示:
查看mkdir文件或目录的权限,可以使用
ls -l
命令。查看文件或目录权限的步骤:
- 打开终端(对于Linux或Mac用户)或命令提示符(对于Windows用户)。
- 导航到想要查看权限的文件或目录所在的位置。例如,如果目标文件或目录位于
/path/to/directory
,则可以使用cd /path/to/directory
命令导航到该目录。- 输入
ls -l
命令并按Enter键执行。这将显示指定目录中的所有文件和子目录以及它们的权限信息。在返回的列表中,每个文件或目录的权限由9个字符表示。这些字符表示了三组权限:所有者权限、组权限和其他用户的权限。每组权限包括读取(r)、写入(w)和执行(x)权限。其中,r表示读取权限,w表示写入权限,x表示执行权限。如果没有该权限,则会显示短横线(-)。
- 777 表示所有者、群组和其他用户都具有读取(4)、写入(2)和执行(1)文件或目录的权限。也就是说,所有人都可以对该文件或目录进行读取、写入和执行操作。
- 755 表示所有者具有读取、写入和执行的权限,而群组和其他用户只有读取和执行的权限。这意味着只有所有者可以对文件或目录进行写入操作,而群组和其他用户只能读取和执行。
例如,以下是一个示例输出:
drwxr-xr-x 2 user group 4096 Oct 5 09:55 directory -rw-r--r-- 1 user group 1024 Oct 5 09:54 file.txt
文件夹
directory
的权限为drwxr-xr-x
,文件file.txt
的权限为rw-r--r--
。要解读权限,请注意每个权限组的顺序:
- 第一位:如果是
d
,则表示是一个目录;如果是-
,则表示是一个文件。- 后续9位:分为三组,每组3个字符。第一组表示所有者的权限,第二组表示组权限,第三组表示其他用户的权限。
那么drwxr-xr-x
可以解读为:
d
:表示是一个目录rwx
:所有者具有读取、写入和执行权限r-x
:组用户具有读取和执行权限r-x
:其他用户具有读取和执行权限因此上面图中显示则可以解释为:
anaconda-ks.cfg
:rw-------,只有root用户具有读取和写入权限。csy
:drwxr-xr-x,所有者(root用户)具有读取、写入和执行权限,组用户和其他用户具有读取和执行权限。csy1
:drwxr-xr-x,所有者(root用户)具有读取、写入和执行权限,组用户和其他用户有读取和执行权限。csy2
:drwxr-xr-x,所有者(root用户)具有读取、写入和执行权限,组用户和其他用户有读取和执行权限。csybackup
:drwxr-xr-x,所有者(root用户)具有读取、写入和执行权限,组用户和其他用户有读取和执行权限。csyothers
:drwxr-xr-x,所有者(root用户)具有读取、写入和执行权限,组用户和其他用户有读取和执行权限。权限相关内容请看章节六、chmod命令!!!
1.2.4递归修改权限
使用-m
选项结合-p
选项可以递归地修改目录及其子目录的权限。 格式如下:
mkdir -m 755 -p parent_directory/child_directory
比如:
mkdir -m 755 -p csy3/file1
查看权限:
1.2.5显示帮助信息
使用--help
选项可以显示mkdir
命令的帮助信息,包括可用选项和示例。
二、touch命令
touch
命令用于创建新的空文件或更新已有文件的访问和修改时间戳。如果指定的文件不存在,touch
会创建一个新的空文件。
2.1基本语法
touch [选项] <文件名>
常用选项包括:
-
-a
:仅更新文件的访问时间。 -
-c
:仅在文件不存在时才创建新文件。 -
-m
:仅更新文件的修改时间。 -
-r <参考文件>
:使用指定文件的时间戳作为新文件的时间戳。 -
-t <时间戳>
:使用指定的时间戳作为新文件的时间戳。
2.2常用示例
以下是一些常见的用法示例:
2.2.1创建新的空文件
touch file.txt
2.2.2更新现有文件的访问和修改时间戳
touch file.txt
在这个示例中,更新
file.txt
文件的访问和修改时间戳为当前时间,并不会更改文件内容。"file.txt"的最后修改时间为12月5日02:26。
2.2.3创建多个文件
touch file1.txt file2.txt file3.txt
同时创建file1.txt
、file2.txt
和file3.txt
三个新文件。
2.2.4通过参考文件设置新文件的时间戳
touch -r reference_file.txt new_file.txt
如果
new_file.txt
不存在,该命令将创建一个空的new_file.txt
,并将其时间戳设置为与reference_file.txt
相同。如果
new_file.txt
已经存在,该命令将更新new_file.txt
的时间戳为与reference_file.txt
相同。
比如参考file1.txt设置新文件file4.txt的时间戳:
文件的时间戳包括访问时间(atime)、修改时间(mtime)和状态改变时间(ctime)。使用
-r
选项时,touch
命令将同时更新新文件的 atime 和 mtime,使其与参考文件的时间戳保持一致。
2.2.5使用指定的时间戳创建新文件
touch -t 202201011200.00 new_file.txt
注意:
时间戳的格式应为
YYYYMMDDhhmm.ss
,其中:
YYYY
表示年份
MM
表示月份
DD
表示日期
hh
表示小时
mm
表示分钟
ss
表示秒(可选)上面格式中的时间戳 “202201011200.00” 则表示 2022 年 1 月 1 日 12:00:00。
比如创建file5.txt文件并设置时间戳为2023年1月1日12:00:00,结果如下所示:
总结:
touch
命令不会更改文件的内容,只会更新文件的元数据(例如时间戳)。
三、mv命令
mv
命令用于在文件系统中移动或重命名文件或目录。它可以将一个文件/目录从一个位置移到另一个位置,也可以对文件/目录进行重命名。
3.1语法格式
要使用mv
命令,可以在终端中输入以下内容:
mv 源文件/目录 目标文件/目录或者理解为:
mv [选项] <源文件或目录> <目标文件或目录>
其中,"源文件/目录"是我们要移动或重命名的文件或目录的路径和名称,"目标文件/目录"是我们要将源文件/目录移动到的新位置或者要为其指定的新名称。
常用选项包括:
-
-i
:在移动或重命名文件之前进行确认提示。 -
-f
:强制执行移动或重命名操作,无需确认提示。 -
-u
:仅在目标文件或目录不存在时才执行移动操作。
3.2常用示例
以下是一些常见的用法示例:
3.2.1将文件移动到目标目录(将文件从一个目录移动到另一个目录):
mv file.txt /path/to/destination/
比如将目录csy1中的file1.txt文件移动到目录csy2:
3.2.2重命名文件:
mv oldname.txt newname.txt
比如目录csy2中的file1.txt文件重命名为file.txt:
3.2.3移动并重命名文件:
mv file.txt /path/to/destination/newfile.txt
比如将目录csy1中的file2.txt文件移动到目录csy2并重命名为csy2file.txt:
注意:
如果目标文件/目录已经存在,
mv
命令将会覆盖它(除非使用特殊选项)。为了避免意外覆盖,建议在执行mv
命令之前进行确认。
因此mv
命令具有潜在的风险,在使用该命令时,请务必小心。
四、cp命令
cp
命令用于复制文件和目录。它可以将一个或多个文件/目录从源位置复制到目标位置。
4.1基本语法
要使用cp
命令,请在终端中输入以下内容:
cp [选项] <源文件或目录> <目标文件或目录>
常用选项包括:
-
-i
:在复制文件之前进行确认提示。 -
-r
或-R
:递归复制目录及其内容。 -
-u
:只复制源文件或目录中比目标文件或目录更新的文件。 -
-p
:保留源文件或目录的权限、时间戳等元数据。 -
-v
:显示复制过程中的详细信息。
4.2常用示例
以下是一些常见的用法示例:
4.2.1复制文件到目标位置
cp file.txt /path/to/destination/
比如:
4.2.2复制目录及其内容到目标位置
cp -r directory/ /path/to/destination/
递归地复制source_dir
目录及其所有子目录和文件到/path/to/destination/
目录下。
比如递归地复制csy2
目录及其所有子目录和文件到~/csyothers目录下:
当使用
-r
递归复制目录时,目标目录必须是一个已存在的目录。
4.2.3复制多个文件到目标位置
cp file1.txt file2.txt /path/to/destination/
比如复制csy1目录下的file1.txt和file2.txt文件到csybackup目录下:
4.2.4仅复制源目录中更新的文件到目标目录
cp -u source_directory/* destination_directory/
用于将源目录中的所有文件复制到目标目录中,只复制那些目标目录中不存在或者比源目录中对应文件更新的文件。
比如我在csy目录新建一个文件filen.txt,然后执行命令后则会将该新建文件复制到目标目录下。
4.2.5复制并重命名文件
cp oldname.txt newname.txt
比如我将csy目录下的filem.txt文件复制到目录csy1 并重命名为filem1.txt
注意:
如果目标文件/目录已经存在,
cp
命令将会覆盖它(除非使用特殊选项)。为了避免意外覆盖,建议在执行cp
命令之前进行确认。
五、删除命令(rm/rmdir)
5.1 rm
命令
用于删除文件或目录。
5.1.1基本语法
rm [选项] <文件或目录>
常用选项包括:
-
-r
或-R
:递归删除目录及其内容。 -
-f
:强制删除,无需确认提示。
5.1.2示例用法
①删除文件:
rm file.txt
执行删除操作时会询问是否删除普通空文件,输入y则表示确认,输入n则表示否定;
②递归删除目录及其内容:
rm -r directory/
③强制删除(不会问你直接删)
rm -rf 目录名/文件名
执行过程中没有询问的请求。
5.2 rmdir
命令
用于删除空目录。
5.2.1基本语法
rmdir [选项] <目录>
常用选项包括:
-
-p
:递归删除父级目录,只有在删除后目录为空时才会生效。
5.2.2示例用法:
删除空目录:
rmdir empty_directory/
比如我删除csy3目录时会提示删除失败,原因时目录非空;
当我新建一个空目录csy时,然后再执行删除,查询发现新建的目录csy已经不存在。
注意:
在使用
rm
或rmdir
命令删除文件或目录时,请务必小心谨慎,并确保自己了解其行为和影响。删除后的文件或目录通常无法恢复,请谨慎操作。另外,请避免在不确定的情况下使用-f
选项,以免意外删除重要文件。
六、chmod命令
在章节一:mkdir命令中提及到文件/目录的权限设置,下面是关于权限修改的命令:chmod
chmod
命令用于更改文件或目录的权限。在Linux系统中,每个文件和目录都有一组权限,用于控制对其的访问。Linux chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令。
6.1数字表示基本语法
chmod [选项] <权限模式> <文件或目录>
常用选项包括:
-
-R
:递归地更改指定目录及其子目录中的文件或目录权限。 -
-v
:显示更改过程中的详细信息。
权限模式由三个数字组成,分别表示所有者、所属组和其他用户的权限。每个数字都可以是 0-7 的数字,对应不同的权限。数字与权限的对应关系如下:
数字 | 权限 |
---|---|
0 | 无权限 |
1 | 执行权限 |
2 | 写权限 |
3 | 写和执行权限 |
4 | 读权限 |
5 | 读和执行权限 |
6 | 读和写权限 |
7 | 读、写和执行权限 |
6.2数字表示用法示例
以下是一些常见的权限模式示例:
将文件设置为全局可读可写:
chmod 666 file.txt
将目录及其内容设置为所有者可读写执行、所属组和其他用户只读:
chmod -R 744 directory/
除了使用数字表示法(例如,777、755)设置权限外,还可以使用符号表示法(例如,u+rwx、go-w)设置权限。
- ①增值赋权 +
- ②减值赋权 -
- ③等值赋权 =
Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。
u 所属主:文件所有者
g 所属组:文件所有者所在组
o 其他人:所有其他用户
a 所有人:所有用户, 相当于 ugo
只有文件所有者和超级用户可以修改文件或目录的权限。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。
6.3符号表示语法格式
chmod [-cfvR] [--help] [--version] mode file...
mode : 权限设定字串,格式如下 :
[ugoa...][[+-=][rwxX]...][,...]
其中:
- u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
- + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
- r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
其他参数说明:
- -c : 若该文件权限确实已经更改,才显示其更改动作
- -f : 若该文件权限无法被更改也不要显示错误讯息
- -v : 显示权限变更的详细资料
- -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
- --help : 显示辅助说明
- --version : 显示版本
6.4符号表述用法示例
①为file.txt
的所有者(用户)添加读取、写入和执行权限
chmod u+rwx file.txt
②为file.txt
的所有者添加读取权限
chmod u+r file.txt
③删除组和其他用户的写入和执行权限
chmod go-wx file.txt
④将目录及其内容设置为所有者可读写执行,所属组和其他用户只读
chmod -R u=rwx,g=r,o=r 目录名
-R
选项用于递归地更改目录及其所有内容的权限
⑤将文件 file1.txt 设为所有人皆可读取
chmod ugo+r file1.txt
⑥将文件 file1.txt 设为所有人皆可读取
chmod a+r file1.txt
⑦将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
chmod ug+w,o-w file1.txt file2.txt
⑧为 ex1.py 文件拥有者增加可执行权限
chmod u+x ex1.py
⑨将目前目录下的所有文件与子目录皆设为任何人可读取
chmod -R a+r *
⑩更多命令说明:
命令 | 说明 |
---|---|
chmod a+r file | 给file的所有用户增加读权限 |
chmod a-x file | 删除file的所有用户的执行权限 |
chmod a+rw file | 给file的所有用户增加读写权限 |
chmod +rwx file | 给file的所有用户增加读写执行权限 |
chmod u=rw,go= file | 对file的所有者设置读写权限,清空该用户组和其他用户对file的所有权限(空格代表无权限) |
chmod -R u+r,go-r docs | 对目录docs和其子目录层次结构中的所有文件给用户增加读权限,而对用户组和其他用户删除读权限 |
chmod 664 file | 对file的所有者和用户组设置读写权限, 为其其他用户设置读权限 |
chmod 0755 file | 相当于u=rwx (4+2+1),go=rx (4+1 & 4+1)。0 没有特殊模式。 |
chmod 4755 file | 4设置了设置用户ID位,剩下的相当于 u=rwx (4+2+1),go=rx (4+1 & 4+1)。 |
find path/ -type d -exec chmod a-x {} \; | 删除可执行权限对path/以及其所有的目录(不包括文件)的所有用户,使用'-type f'匹配文件 |
find path/ -type d -exec chmod a+x {} \; | 允许所有用户浏览或通过目录path/ |
chmod命令的使用部分内容参考文章Linux chmod 命令 | 菜鸟教程 (runoob.com)
七、chown命令
Linux chown(英文全拼:change owner)命令用于设置文件所有者和文件关联组的命令,用于更改文件或目录的所有者和所属组。在Linux系统中,每个文件和目录都有一个所有者和一个所属组。
Linux/Unix 是多人多工操作系统,所有的文件皆有拥有者。利用 chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID,组可以是组名或者组 ID,文件是以空格分开的要改变权限的文件列表,支持通配符。
chown 需要超级用户 root 的权限才能执行此命令。只有超级用户和属于组的文件所有者才能变更文件关联组。非超级用户如需要设置关联组可能需要使用 chgrp 命令。
7.1基本语法
chown [-cfhvR] [--help] [--version] user[:group] file...或者
chown [选项] <所有者>:<所属组> <文件或目录>
- user : 新的文件拥有者的使用者 ID
- group : 新的文件拥有者的使用者组(group)
- -c : 显示更改的部分的信息
- -f : 忽略错误信息
- -h :修复符号链接
- -v : 显示详细的处理信息
- -R : 处理指定目录以及其子目录下的所有文件
- --help : 显示辅助说明
- --version : 显示版本
简单理解:
只修改所属主 chown 所属主 文件名
只修改所属组 chown .所属组 文件名
同时修改所属主和所属组 chown 所属主.所属组 文件名
也可以用:替换.
7.2示例用法
以下是一些常见的示例:
把 /var/run/httpd.pid 的所有者设置 root
chown root /var/run/httpd.pid
将文件 file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup
chown runoob:runoobgroup file1.txt
将当前前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup
chown -R runoob:runoobgroup *
把 /home/runoob 的关联组设置为 512 (关联组ID),不改变所有者
chown :512 /home/runoob
更改文件的所有者
chown newowner file.txt
将file.txt
的所有者更改为newowner
更改目录的所有者和所属组
chown user:group directory/
将directory/
的所有者更改为user
,所属组更改为group。
再次强调:
只有超级用户(root)才能更改其他用户的文件所有权
八、wc命令
wc
命令用于计算文件中的字节数、字数和行数。它可以用于统计文件或从标准输入读取的数据的统计信息。若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
8.1基本语法
wc [选项] <文件>
常用选项包括:
-
-l
:只显示行数。 -
-w
:只显示字数。 -
-c
:只显示字节数。 -
-m
:只显示字符数。
8.2示例用法
以下是一些常见的选项和用法:
①统计文件中的行数、字数和字节数
wc 文件名
比如查看 ~/csy1/filem1.txt 的行数、字数和字节数:
②仅统计文件中的行数
wc -l 文件名
比如查看 ~/csy1/filem1.txt 的行数
③统计文件中的字节数
wc -c 文件名
比如查看 ~/csy1/filem1.txt 的字节数
④统计文件中的单词数
wc -w 文件名
比如查看 ~/csy1/filem1.txt 的字数
九、find命令
在Linux中,find
命令用于在指定目录下查找文件和目录,并根据给定的条件进行过滤。 从指定的起始目录开始,递归地搜索各个子目录,查找出满足条件的文件。
9.1基本语法
find <路径> [选项] [参数] [动作]
注释:
①路径:不填路径,默认查找当前路径
其实就是我们要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。
- . 表示当前路径
- / 表示的是系统的根目录
②选项:
- (1)按照文件名
- (2)按照文件的类型
- (3)按照用户组的查找
- (4)按照被读取/被修改的时间来查找
- (5)按照文件的大小查找
③参数:具体查找的文件名 (可以使用通配符)
通配符
- * 0个或多个字符
- ? 任意单个字符
④动作:
- -exec 命令 {} \; 查找出文件之后执行命令
- -ok {} \; 查找出文件之后询问是否执行命令
-
-exec -ok
-exec 执行
-ok 询问
在exec和动作的后面要写 {} \; #注意括号后面有空格
9.2 示例用法
(一)按照文件名查找
- -name '文件名' 大小写敏感
- -iname 不区分大小写
①#搜索a开头的文件
find -name 'a*'|cat -n
查询结果部分截图如下所示:
提示:
cat -n
命令将会对输入进行行号标记,并将其输出。完整命令注释:
找到以字母 'a' 开头的文件,并为这些文件名添加行号进行标记,然后将标记后的结果输出。
|
符号用于将前一个命令的输出作为后一个命令的输入,该符号在后续的篇章中会详细描述。详细的cat命令请查看章节十、cat命令
②#根目录搜索第二个字母是a的文件
find -name '?a*'|cat -n
查询结果部分截图如下所示:
③#搜索系统里所有的文件(这里以家目录~路径搜索,根目录/内容数据偏大)
find -name '*'|cat -n
或
find |cat -n
查询结果部分截图如下所示:
(二)按照文件的类型查找
- -type
文件类型
- f 普通文件
- d 目录文件
- c 字符设备文件
- b 块设备文件
- s 套接字文件
- p 管道文件
- l 链接文件(小写的L)
①#查找p开头的链接文件
find -name 'p*' -type l |cat -n
查询结果部分截图如下所示:
②#搜索所有p开头f结尾的链接文件和所有包含x套接字的文件
find -name 'p*f' -type l |cat -nfind -name '*x*' -type s |cat -n
查询结果如下所示:
(三)按照用户和组查找
- -user 用户名 所属主
- -group 组名 所属组
- -uid 所属主的uid
- -gid 所属组的编号
- -nouser 没有所属主(把它的所属主这个用户删除 遗留下的文件 就是没有所属主的)
- -nogroup 没有所属组
①#搜索0号用户,root组 包含m 不区分大小写的链接文件
find / -uid 0 -group root -iname '*m*' -type l | cat -n
查询结果部分截图如下所示:
注释:
在根目录下搜索满足以下条件的符号链接文件:
-uid 0
:文件所有者的用户ID为0,即root用户。-group root
:文件所属组为root组。-iname '*m*'
:文件名忽略大小写,包含字母 'm'。-type l
:只搜索符号链接类型的文件。
②#搜索所有没有所属组的文件 把结果覆盖重定向到自己的目录p1中
find / -nogroup > /csy/p1
(四)按照被读取/被修改的时间查找
- -a 被读取
- -c 被修改
- -m 被更改
- -min 分钟
- -time 天
- -n 某个时间段内
- +n 某个时间之前
- atime 及 access time 文件最近访问的时间,当你用cat,more,vi等指令访问一个文件时,atime都会更新。
- mtime 及 modify time 文件最近改动的时间,当你对文件改动修改内容时会改变这个时间。
- ctime 及 change time 文件最近状态(status)的改变时间。这里的status指权限,用户,组,修改时间。如果这些东西改变,那么ctime会随之改变。
简名 | 全名 | 中文名 | 含义 |
atime | access time | 访问时间 | 文件中的数据库最后被访问的时间 |
mtime | modify time | 修改时间 | 文件内容被修改的最后时间 |
ctime | change time | 变化时间 | 文件的元数据发生变化。比如权限,所有者等 |
① #在1天之内被修改过的文件
find -ctime -1 |cat -n
执行结果如下:
②#在5分钟之内被读取过的文件
find -amin -5 |cat -n
执行结果如下:
③#删除~/csy目录下30天之前被修改过的文件
find csy -ctime +30 -exec rm -rf {} \;
④#长格式显示~/csy1下名字包含f的文件
find -name '*f*' -exec ls -l {} \;
查询结果如下:
注释:
-name '*f*'
:通过通配符模式匹配文件名,以查找包含字母 'f' 的文件。-exec ls -l {} \;
:对每个匹配到的文件执行ls -l
命令以显示详细信息。
{}
表示匹配到的文件名将被传递给-exec
后面的命令进行处理。\;
用于表示-exec
命令的结尾。- 使用
ls -l
命令以长格式显示这些文件的详细信息,包括文件名、权限、所有者、所属组、大小等
(五)按照文件大小查找
- -size
①#查找所有的空文件
find -size 0 |cat -n
查找结果如下:
②#查找大于指定大小的文件
find /path/to/directory -size +100M
即在 /path/to/directory
目录中查找大于100兆字节的文件。
比如:
③#查找小于指定大小的文件
find -size -10K
执行结果如下:
④或者目录中查找小于 1000 字节的文件:
⑤查找恰好指定大小的文件
find /path/to/directory -size 50G
即目录中查找恰好为50吉字节的文件
提示:
使用
c
表示字节;使用不同的单位表示文件大小,如
K
表示千字节,M
表示兆字节,G
表示吉字节等。+
和-
号用来指定大于或小于某个特定大小。
十、cat命令
在Linux中,cat
是一个用于查看文件内容的命令。它的名称是 "concatenate"(连接)的缩写,因为它最初的设计目的是将多个文件的内容连接起来并输出。
10.1基本语法
cat [选项] [文件]
常用选项包括:
-
-n
:显示行号。 -
-b
:显示行号,但不对空行进行编号。 -
-s
:压缩多个连续空行为一个空行。 -
-E:在每行结束处显示 $
10.2示例用法
①#查看单个文件的内容
cat 文件名
比如:
cat filem1.txt
结果如下:
②#查看文件的内容并显示行号
cat -n 文件名
比如:
cat -n filem1.txt
结果如下:
③#连接多个文件的内容并输出到终端
cat 文件1 文件2 文件3 ...
比如:
cat file4.txt filem1.txt
结果如下:
④#将多个文件的内容合并输出到另一个文件(会覆盖原有内容)
cat 文件1 文件2 > 新文件
比如:
cat file4.txt filem1.txt > file5.txt
结果如下:
⑤#如果重定向到不存在的文件 会自动创建一个出来
比如:
当使用cat > 文件 时进入内容编辑,完成内容输入后 按住 CTRL + D 即可保存退出。
⑥将文件的内容追加到另一个文件的末尾
cat 文件 >> 已有文件
比如:
cat file4.txt >> filem1.txt
结果如下:
十一、grep命令(三剑客之一)
小知识:
grep、sed、awk命令统称为liunx中的三剑客!!!
所谓的"三剑客"(The Three Musketeers)通常是指三个命令行工具:
grep:用于在文件中搜索匹配某个模式的文本。它可以根据正则表达式或简单的字符串模式进行搜索,并返回匹配的行。
sed:是一个流式文本编辑器,用于对文本进行转换、替换、删除等操作。它通过一系列的规则和命令来处理输入文本,并将结果输出到标准输出。
awk:是一种强大的文本处理工具,可用于从结构化文本数据中提取和处理信息。它使用一种类似于编程语言的方式来处理每一行,并根据规则执行相应的操作。
Linux grep (global regular expression) 命令用于在文件中搜索匹配某个模式的文本。它可以根据正则表达式或简单的字符串模式进行搜索,并返回匹配的行。
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。
11.1基本语法
grep [选项] <模式> [文件]--<模式>:要查找的内容
常用的选项包括:
- -i:忽略大小写进行匹配。
- -v:反向匹配,只输出不匹配的行。
- -r 或 -R:递归地在目录及其子目录中搜索。
- -l:仅显示包含匹配内容的文件名。
- -n:显示匹配内容所在行的行号。
- -c:统计匹配到的行数。
- -e:使用多个模式进行匹配。
- -A数 显示匹配内容的下面 数行
- -数 显示匹配内容的上下 数行
更多参数说明:
参数说明参考文章 Linux grep 命令 | 菜鸟教程 (runoob.com)
- -a 或 --text : 不要忽略二进制的数据。
- -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
- -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
- -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
- -c 或 --count : 计算符合样式的列数。
- -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
- -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
- -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
- -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
- -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
- -F 或 --fixed-regexp : 将样式视为固定字符串的列表。
- -G 或 --basic-regexp : 将样式视为普通的表示法来使用。
- -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
- -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
- -i 或 --ignore-case : 忽略字符大小写的差别。
- -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
- -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
- -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
- -o 或 --only-matching : 只显示匹配PATTERN 部分。
- -q 或 --quiet或--silent : 不显示任何信息。
- -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
- -s 或 --no-messages : 不显示错误信息。
- -v 或 --invert-match : 显示不包含匹配文本的所有行。
- -V 或 --version : 显示版本信息。
- -w 或 --word-regexp : 只显示全字符合的列。
- -x --line-regexp : 只显示全列符合的列。
- -y : 此参数的效果和指定"-i"参数相同。
通配符说明
^'a' 以a开头(行首)
‘a’$ 以a结尾(行尾)
11.2用法示例
以下为常用的查询格式:
①#在一个文件中查找特定字符串
grep "pattern" 文件名
②#在多个文件中查找特定字符串
grep "pattern" 文件1 文件2 文件3
③#忽略大小写匹配
grep -i "pattern" 文件名
④#在文件中搜索不区分大小写的特定模式并显示行号
grep -i -n "pattern" 文件名
⑤#递归地在目录及其子目录中搜索
grep -r "pattern" 目录名
⑥#在文件中搜索不包含特定单词的行
grep -v "pattern" 文件名
备注:
pattern
是一个占位符,用来表示在grep
、sed
或其他命令中要搜索、匹配或替换的文本模式。在实际使用时,将
pattern
替换为适合我们需求的具体文本或正则表达式,以便正确搜索、匹配或处理数据。
以下是一些实际例子:
借用p2文本演示,复制/etc/passwd到个人目录下的p2:
cp /etc/passwd csy/p2
查看p2文本:
①# 显示p2文件包含root的行
grep 'root' p2
结果如下:
② #显示p2文件包含root的行和匹配上下的2行
grep -2 'root' p2
结果如下:
③ #统计p2文件bash结尾的行数 不区分大小写
grep -ic 'bash'$ p2
结果如下:
④# 显示p2文件包含 10 的行和他的下一行,并显示行号
grep -A1 -n '10' p2
结果如下:
11.2.1通配符
通配符说明
. 任意单个字符
* 匹配0次或多次
.* 任意单个字符匹配0次或多次
比如:
‘lo.e’ love looe loae ...
'lo*e' loe looe loooe ...
[abc] 多个字符中匹配任意一个
比如‘a[ap]ple’ aaple apple
[a-z] 小写字母
[A-Z] 大写字母
[a-Z] 大小写字母
[0-9] 数字
[a-Z0-9] 字母和数字
[^] 非
[^0-9] 非数字
创建测试文件 a
cat > a
abc
acc
qwc
a.c
a&c
ac
如下:
添加数据后CTRL+D即可保存退出。
⑤#查找a文件a开头c结尾的行
grep '^a.*c$' a
结果如下:
⑥#包含非字母的行
grep '[^a-Z]' a
结果如下:
⑦#与 -v 的区别
grep -v '[^a-Z]' a
结果如下:
那么同样可以用这种方式完成下面的查询,加强训练
①#查找p2文件 第二个字符是a的行
grep '^.a' p2
结果如下:
②#查找p2文件倒数第二个字符是s的行
grep 's.$' p2
结果如下:
③#查找p2文件r开头h结尾的行
grep '^r.*h$' p2
结果如下:
④#查找p2文件用户名是7位字母的行
grep '^[a-Z][a-Z][a-Z][a-Z][a-Z][a-Z][a-Z]:x:' p2
结果如下:
对该命令可以进入优化:
grep -E '^[[:alpha:]]{7}:x:' p2
-E
:启用扩展正则表达式模式匹配。'^[[:alpha:]]{7}:x:'
:正则表达式模式,包含三个部分:^
:表示行的开始。[[:alpha:]]
:表示匹配任意字母字符(大小写不区分)。{7}
:表示匹配前面的字母字符连续出现七次。:x:
:表示以:x:
结尾。
结果如下:
⑤#查找p2文件uid是两位数字的行
grep ':x:[0-9][0-9]:' p2
结果如下:
11.2.2转义符
转义符号的使用
\ 转义 一个\只能转义一个字符
\< 词首定位符
\> 词尾定位符
比如:
‘\<love’ love lovee lovea ... love 开头
‘love\>’ aaaalove bblove .. love 结尾
‘\<love\>’ love
\{m\} 刚好匹配m次 '[a]\{m\}' a刚好匹配m次
\{m,\} 至少匹配m次
\{m,n\} 匹配m-n次
\(\) 标签
\数 第数个标签
比如:
\(a\)\1 前面把a定义成标签,后面是调用第一个标签里面的内容组合起来就是 aa
\(a\)\(b\)\1\2 abab
\(a\)\(b\)\2\1 abba
\(a\)\(b\)\1\1\1\2 abaaab
'\([ab]\)\1\1'
aaa
bbb
必须先有标签 再有对应的数字
错误情况: '\(a\)\2\(b\)\1'
\(.\)\1\1 表示3个连续相同的任意字符
#查找a文件中包含.的行
grep 'a\.c' a
结果如下:
创建一个文件b,要求包含如下内容:
cat > b
girl,
iiiiiiii
lovvvveeee
youuuuuu
如图所示:
①#查询b文件包含3个连续相同的字母的行
grep '\([a-Z]\)\1\1' b
结果如下:
②#查询b文件出现3个连续相同的字母之后又跟着出现3个连续相同的字母
grep '\([a-Z]\)\1\1\([a-Z]\)\2\2' b
结果如下:
③#查找/usr/share/dict/words 文件中包含大于40个字母的行
grep '[a-Z]\{41,\}' /usr/share/dict/words
结果如下:
④#查找/etc/inittab文件中注释的行(包含#)
grep '#' /etc/inittab
结果如下:
⑤#查找/etc/passwd中包含两个bin的行
grep 'bin.*bin' /etc/passwd
结果如下:
⑥#查找p2文件用户名是7个字母 并且 uid是两个数字的行 ,只显示用户名和uid
grep '^[a-Z]\{7\}:x:[0-9][0-9]:' p2 | cut -d: -f1,3
结果如下:
cut -d: -f1,3
:使用cut
命令提取字段。
-d:
:指定字段分隔符为冒号。-f1,3
:指定要提取的字段为第1和第3个字段。cut命令后续篇章会进行总结描述。
⑦#查找p2文件h开头 或者h结尾的行,并且显示行号
(grep '^h' p2;grep 'h$' p2) | cat -n
结果如下:
⑧#查找p2文件包含ABAB形式字符的行
grep '\(.\)\(.\)\1\2' p2
结果如下:
十二、sed命令(三剑客之一)
sed
是一个用于文本处理和转换的流编辑器。它可以对文本进行插入、删除、替换等操作,并且可以通过管道或脚本来实现复杂的文本处理任务。主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
12.1基本语法
sed 选项 ‘定址 动作’文件名
常用选项包括:
-
-n
:只打印经过编辑的行。 -
-i
:直接修改文件内容,而不是将结果输出到标准输出。 -
-e:允许多项编辑,可以多个连用
常用的动作编辑命令有:
-
s/<模式>/<替换>/
:替换匹配到的模式。 -
d
:删除匹配到的行。 -
p
:打印匹配到的行。
12.2用法示例
12.2.1动作一:p打印
①#打印a文件的1-3行
sed -n '1,3p' a
结果如下:
②#打印a文件的1和3行
sed -n '1p;3p' a
结果如下:
③#打印p2文件a开头或者b开头的行
sed -n '/^[ab]/p' p2
结果如下:
或者:
sed -n -e '/^a/p' -e '/^b/p' p2
结果如下:
④#打印p2文件a开头或者bash结尾的行
sed -n -e '/^a/p' -e '/bash$/p' p2
结果如下:
!→ 取反
p → !p
打印 不打印
①#打印a文件的前三行之外的行
sed -n '1,3!p' a
结果如下:
②#打印p2文件n开头或者不以n结尾的行
sed -n -e '/^n/p' -e '/n$/!p' p2或者sed -n -e '/^n/p' -e '/[^n]$/p' p2
结果如下:
12.2.2动作二:d删除
不显示 (相当于 !p 不用加 -n)
d → !d
不显示 显示
①#显示a文件前三行以外的行
sed '1,3d' a
结果如下:
#取反显示a文件的前三行
sed '1,3!d' a
结果如下:
注意:
加 -i 修改原文件
#显示a文件第一行 以外的行
sed -i '1d' a
结果如下:
12.2.3动作三:s替换
12.2.3.1部分数据替换
sed'[定址]s/旧/新/[g]' 文件名
不加定址表示全文替换
①#把p2文件所有的root 替换成ROOT
sed 's/root/ROOT/g' p2
结果如下:
②#把p2文件第一行的第一个root替换成空
sed '1s/root//' p2
结果如下:
③#把a文件所有的a删掉
sed 's/a//g' a
结果如下:
④#把a文件的所有c替换成C
sed 's/c/C/g' a
结果如下:
⑤#把a文件的第四行的非字母替换成0
sed '4s/[^a-Z]/0/g' a
结果如下:
注意:
在第一个
sed
命令执行后再执行第二个sed
命令时,如果直接对同一个文件进行操作而没有指定不同的输出文件,那么第二个sed
命令是会修改原始文件的内容。这是因为
sed
命令在处理文本时,默认会将修改后的结果输出到标准输出流。但如果使用重定向将其保存到同一个输入文件中,那么原始文件会被覆盖并包含第一个和第二个sed
命令的修改结果。
其实可以通过使用管道符 |
将多个 sed
命令连接起来,每个命令都会在前一个命令的输出基础上进行处理,并将结果传递给下一个命令。这样就可以实现多次修改同一个文件的效果。
12.2.3.2 标签在替换中的使用
创建测试文件d
cat > d
abcdefg
1234567
①#交换文件相邻两个字符的位置
sed 's/\(.\)\(.\)/\2\1/g' d
结果如下:
②# 把 相邻的三个字符都替换成第一个字符
sed 's/\(.\)\(.\)\(.\)/\1\1\1/g' d
结果如下:
12.2.3.3 &在替换中的使用
& 代表替换前的内容
创建测试文件e
cat > e
A.c
A.c
A&c
A&c
Ac
Ac
①#把e文件所有的字符都加上括号
sed 's/./(&)/g' e
结果如下:
②#把d文件每两个字符加一个空格
sed 's/../& /g' d
结果如下:
12.2.4动作四:c取代
在 sed
中,动作 c
用于替换(或修改)匹配的行。它用于替换整个匹配行的内容为新的文本(整行替换)。
使用 c
动作的 sed
命令的语法:
sed '/pattern/c replacement' filename
其中:
/pattern/
是一个正则表达式模式,用于匹配要替换的行。replacement
是要替换匹配行的新文本。
①#将p2文件第 2-4行的内容取代成为mn
nl p2|sed '2,4c mm'
结果如下:
②#将p2文件第 6行的内容取代成为wpppp
nl p2|sed '6c wpppp'
结果如下:
12.2.5动作五:a新增
在 sed
中,动作 a
用于在匹配的行后面添加新的文本。它用于在匹配行的下一行插入指定的文本。
使用 a
动作的 sed
命令的语法:
语法一:
sed '/pattern/a 新文本' 文件名语法二:
sed '/pattern/a\新文本' 文件名
其中:
/pattern/
是一个正则表达式模式,用于匹配要在其后插入文本的行
\
用于换行,确保插入的文本可以跨越多行。
①#向文本g的第二行后插入新文本Line new(用语法一)
sed '/Line 2/a Line new' g
结果如下:
② #向文本g的第一行后插入新文本Line new(用语法二)
sed '1a\Line new' g
或
sed '/Line 1/a\Line new' g
结果如下:
③#向文本g的第三行后添加一行新文本Line new(使用参数e)
sed -e '3 a Line new' g
结果如下:
④#向文本g的第三行后追加两行新文本Line new1和Line new2(使用参数e)
sed -e '3 a Line new1\nLine new2' g
结果如下:
⑤#向文本g的第三行后追加三行新文本Line new1和Line new2,且最后一行为空(使用参数e)
sed -e '3 a Line new1\nLine new2\n' g
结果如下:
⑥#向文本g的第三行之后追加 1 行空行(使用参数e)
sed -e '3 a \ ' g
结果如下:
实际上是插入了一个含有一个空格的行;
- 可以添加一个完全为空的空行;
- 可以添加两个完全为空的空行;
sed '2 a \\' gsed '2 a \\n' g
结果如下:
备注:
③④⑤⑥是使用参数e,向文本第几行之后插入新文本。
本篇暂时汇总文件/文本的相关命令12种,请关注下一篇文件/文本的相关命令内容,后面持续汇总整理!内容如有错误,请广大网友评论指导,感谢查看!编写不易,如有需要点赞收藏!