一文读懂Linux运维常用命令之文件管理(上)

其他相关博文:

一文读懂Linux运维常用命令之文件管理(下)

一文读懂Linux运维常用命令之用户管理

目录

一、文件管理

1、ls

2、touch

(1)、创建空文件

(2)、更新文件的访问和修改时间

(3)、指定时间字符串更新文件的时间戳

(4)、指定时间字符串改变文件的修改时间(mtime)

3、rm

(1)、删除文件

(2)、删除目录

4、mv

(1)、修改文件名称

(2)、修改目录名称

(3)、移动文件

(4)、移动目录

5、cp

(1)、复制文件

1)复制文件

2)复制文件并重命名

(2)、复制目录

1)复制目录

2)复制目录并重命名

6、scp

(1)、复制文件至远程主机

(2)、复制目录至远程主机

(3)、复制远程主机的文件至本地

(4)、复制远程主机的目录至本地

7、find

(1)、精确查找文件

(2)、模糊查找文件

(3)、根据文件大小查找文件

(4)、根据时间查找文件

1)查找N天内修改过的文件

2)查找N天前修改过的文件

3)查找指定时间范围内的文件

(5)、查找文件后执行命令操作

8、du

(1)、显示指定文件的大小

(2)、显示指定目录的大小

(3)、显示指定目录下子目录及文件的大小

(4)、显示指定目录下所有子目录的大小

(5)、显示指定目录下的所有子目录及所有文件的大小

二、文件读取

1、cat

(1)、读取文件

(2)、读取文件并显示行号

(3)、合并文件

(4)、查看文件最后n行

2、tac

(1)、读取文件

(2)、查看文件前面n行

3、more

4、less

5、head

(1)、读取文件

(2)、读取文件前n行

6、tail

(1)、实时输出文件新增内容

(2)、输出文件最后n行

7、grep

(1)、单个字符串匹配

(2)、单个字符串匹配(忽略大小写)

(3)、单个字符串反向匹配

(4)、单个字符串匹配并打印行号

(5)、单个字符串匹配仅打印匹配行数

(6)、多个字符串匹配

(7)、递归查找目录

(8)、递归查找目录仅输出匹配的文件名称

(9)、标准输入获取内容并过滤输出指定行

三、文件夹管理

1、pwd

(1)、普通目录

(2)、链接目录

2、cd

(1)、切换到目录/data/Elasticsearch

(2)、切换到上级目录

(3)、切换到当前用户的主目录(home)

(4)、切换到上次访问的目录

3、mkdir

(1)、创建单个路径

(2)、同时创建多个路径

4、rmdir

(1)、删除一个空目录test

(2)、级联删除父目录


 更多精彩博文详见:

《Linux系统应用运维》专栏总目录(持续更新)

一、文件管理

1、ls

ls命令用来列出指定目录下的文件及子目录,如果不指定目录则列出当前目录下的文件及子目录。语法格式如下:

ls [选项] [路径或文件]

  • -a:列出指定目录下的所有文件及子目录,包含隐藏文件。Linux系统将“.”开头的文件或目录视为隐藏文件。

  • -A:显示除隐藏文件“.”和“..”以外的所有文件列表;

  • -l:列出指定目录下的文件及子目录的权限等详细信息,不包含隐藏文件。

  • -F:在每个输出项后追加特殊文件的类型标识符。具体含义为:“*”表示具有可执行权限的文件;“/”表示目录;“@”表示符号链接;“|”表示命令管道FIFO;“=”表示sockets套接字。当文件为普通文件时,不输出任何标识符。

  • -c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时,则排序的依据是文件的状态改变时间;

  • -i:显示文件索引节点号(inode),一个索引节点代表一个文件。

  • -m:用“,”号区隔每个文件和目录的名称;

  • -n:以用户识别码和群组识别码替代其名称;

  • -r:以文件名反序排列并输出目录内容列表;

  • -s:显示文件和目录的大小,以区块为单位;

  • -t:根据文件和目录的更改时间排序;

以上选项可以根据实际情况组合使用。

2、touch

touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,则会新建一个新的文件。语法格式如下:

touch [选项] [文件名称或目录名称]

  • -a:改变文件的访问时间(atime)。
  • -m:改变文件的修改时间(mtime)。
  • -d:使用指定的时间字符串来设置时间戳。例如:touch -d "2021-12-31 23:59:59" test.txt
  • -t:使用指定的时间格式(如[[CC]YY]MMDDhhmm[.ss])来设置时间戳。例如touch -t 202310011200.00 file.txt会将文件的时间戳设置为2023年10月1日12时0分。
  • -r:使用指定文件的时间戳来设置目标文件的时间戳。例如,touch -r test01.txt test02.txt会将test02.txt的时间戳设置为test02.txt的时间戳。
  • -c:如果文件不存在,不要创建新文件。

(1)、创建空文件

创建一个空文件test.txt

[elasticsearch@node01 data]$ touch test.txt
[elasticsearch@node01 data]$ ls -l

(2)、更新文件的访问和修改时间

更新test.txt的访问和修改时间为当前时间。

[elasticsearch@node01 data]$ touch test.txt

[elasticsearch@node01 data]$ ls -l

(3)、指定时间字符串更新文件的时间戳

更新文件test.txt的时间戳为2025-03-18 12:00:00

[elasticsearch@node01 data]$ touch -d "2025-03-18 12:00:00" test.txt

(4)、指定时间字符串改变文件的修改时间(mtime)

更新文件test.txt的修改时间为2025-03-18 14:30:00

[elasticsearch@node01 data]$ touch -md "2025-03-15 14:30:00" test.txt 
[elasticsearch@node01 data]$ ls -l

3、rm

rm命令用于删除一个文件或者目录,语法格式如下:

rm [选项] [文件或者目录命令]

  • -i:删除文件前逐一询问确认。
  • -f:强制删除文件。
  • -r:递归删除目录及目录中的文件。 

(1)、删除文件

删除文件test02.txt

  • 直接删除

[elasticsearch@node01 ~]$ rm test02.txt

  • 删除前确认

[elasticsearch@node01 ~]$ rm -i test02.txt

(2)、删除目录

删除目录必须加参数-r,否则无法删除。

删除目录data

[elasticsearch@node01 ~]$ rm -r data

4、mv

mv命令用于文件、目录更改名称,或者用于文件、目录移动位置,语法格式如下:

mv [选项] [源文件名称 | 源目录名称] [目标文件名称 | 目标目录名称]

  • -b:若目标文件或目标目录存在,则先备份再执行覆盖操作。
  • -i:若移动的源文件或源目录与目标文件或目标目录同名,则先询问是否覆盖。输入 y 表示覆盖,输入 n 表示取消操作。
  • -f:若移动的源文件或源目录与目标文件或目标目录同名,强制覆盖。
  • -n:不要覆盖任何已存在的文件或目录。

(1)、修改文件名称

修改文件test01.txt 为 test.txt

[root@node01 data]# mv test01.txt test.txt

(2)、修改目录名称

修改目录/root/data/data 为 /root/data/data_test

[root@node01 data]# mv /root/data/data /root/data/data_test

(3)、移动文件

移动文件/root/data/test.txt 至 目录/root/data/data_test/下

[root@node01 data_test]# mv /root/data/test.txt /root/data/data_test/

(4)、移动目录

移动目录/root/data/data_test/ 至 目录/root/下

[root@node01 ~]# mv /root/data/data_test/ /root/

5、cp

cp命令用于本地将文件或者目录复制到另一个目录下,语法格式如下:

cp [选项] [源文件名称 | 源目录名称] [目标文件名称 | 目标目录名称]

  • -r或-R:递归复制目录及其子内容(用于复制目录)。
  • -i:文件或目录覆盖前提示用户确认。
  • -f:强制覆盖目标文件或者目标目录。
  • -p:保留文件或者目录的原始属性(如权限、时间戳等)。

(1)、复制文件

1)复制文件

复制文件/root/data_test/test.txt 至 目录/root/下

[root@node01 ~]# cp /root/data_test/test.txt /root/

2)复制文件并重命名

复制文件/root/data_test/test.txt 为 /root/data_test/test01.txt

[root@node01 data_test]# cp /root/data_test/test.txt /root/data_test/test01.txt

(2)、复制目录

1)复制目录

复制目录/root/data_test/ 至 目录/root/data下

[root@node01 data]# cp -R /root/data_test/ /root/data

2)复制目录并重命名

复制目录/root/data_test/ 为 目录/root/data/data_bak

[root@node01 data]# cp -R /root/data_test/ /root/data/data_bak

6、scp

scp命令用于主机之间复制文件或者目录,语法格式如下:

scp [选项] [源文件名称 | 源目录名称] [username@remote_host:directory | username@remote_host:directory/filename]

  • -r:递归复制整个目录。
  • -P:指定远程主机的 SSH 端口号。
  • -p:保留文件或者目录的修改时间、访问时间和权限等属性。
  • -C:启用压缩,可以加快传输速度
  • -v:显示详细的调试信息,有助于排查问题。

username是指remote_host主机上的用户。

(1)、复制文件至远程主机

复制本地文件/root/data/data_bak/test.txt 至 远程主机192.168.110.150的目录/root下。

[root@node01 ~]# scp -P 22 /root/data/data_bak/test.txt root@192.168.110.150:/root

192.168.110.150主机上查看:

(2)、复制目录至远程主机

复制本地目录/root/data/data_bak 至 远程主机192.168.110.150的目录/root下。

[root@node01 ~]# scp -r -P 22 /root/data/data_bak root@192.168.110.150:/root

192.168.110.150主机上查看:

(3)、复制远程主机的文件至本地

复制远程主机192.168.110.150上的文件/root/remoteFile.txt 至 本地主机的目录/root/下。

[root@node01 ~]# scp -P 22 root@192.168.110.150:/root/remoteFile.txt /root/

(4)、复制远程主机的目录至本地

复制远程主机192.168.110.150上的目录/root/remoteDir 至 本地主机的目录/root/下。

[root@node01 ~]# scp -r -P 22 root@192.168.110.150:/root/remoteDir /root/

7、find

find命令用于在指定目录下查找文件或者目录,可以使用不同的选项来限制、过滤查找结果。对于查询出来的文件或者目录,还支持执行操作,比如删除、复制等。

语法格式如下:

find [目录] [选项] [-exec [执行命令] {} \;]

-exec说明查询结果后需要执行一个命令," {} "将会被匹配到的文件名或者目录名替代," \; " 表示命令结束。

一般选项:

  • -name:按文件名进行匹配查找,支持使用通配符 * 和 ?。
  • -type:按文件类型进行匹配查找,如 f(普通文件)、d(目录)、l(符号链接)等。
  • -size:按文件大小进行匹配查找,+ 代表大于、- 表示小于指定的文件大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或G(GB)。
  • -user:按文件的所有者进行匹配查找。
  • -group:按文件的所属组进行匹配查找。


时间选项:

  • -amin +/-N:查找在N分钟前(+N)或N分钟内(-N)被访问过的文件。
  • -atime +/-N:查找在N天前(+N)或N天内(-N)内被访问过的文件。
  • -cmin +/-N:查找在N分钟前(+N)或N分钟内(-N)状态发生变化的文件(例如权限)。
  • -ctime +/-N:查找在N天前(+N)或N天内(-N)状态发生变化的文件(例如权限)。
  • -mmin +/-N:查找在N分钟前(+N)或N分钟内(-N)被修改过的文件。
  • -mtime +/-N:查找在N天前(+N)或N天内(-N)被修改过的文件。

(1)、精确查找文件

查找目录/root/下文件名称为"test.txt"的文件

[root@node01 ~]# find /root -name test.txt

(2)、模糊查找文件

查找目录/root/data_test/下以"t"开头、".txt"结尾的文件

[root@node01 ~]# find /root/data_test/ -name "t*.txt"

(3)、根据文件大小查找文件

查找目录/data/下大于200M的文件。

[root@node01 ~]# find /data/ -size +200M

(4)、根据时间查找文件

1)查找N天内修改过的文件

查找目录/data/下5天内修改过的文件。

[root@node01 ~]# find /data/ -mtime -5

2)查找N天前修改过的文件

查找目录/root下7天前修改过的文件。

[root@node01 ~]# find /root -mtime +7

3)查找指定时间范围内的文件

查找目录/data/下在2025-03-01 至 2025-03-21期间修改过的文件及目录。

[root@node01 ~]# find /data/ -newermt '2025-03-01' ! -newermt '2025-03-21'

(5)、查找文件后执行命令操作

查找/root/data_test/目录下以"t"开头、".txt"结尾且在2025-03-01 至 2025-03-21期间修改过的文件,然后执行删除文件的操作。

[root@node01 ~]# find /root/data_test/ -name "t*.txt" -newermt '2025-03-01' ! -newermt '2025-03-21'  -exec rm {} \;
[root@node01 ~]# ll /root/data_test/

特别提醒:

find /root/data_test/ -name "t*.txt" -newermt '2025-03-01' ! -newermt '2025-03-21'  -exec rm {} \;

亦可以用

find /root/data_test/ -name "t*.txt" -newermt '2025-03-01' ! -newermt '2025-03-21' | xargs rm -f

代替。

| xargs rm -rf 和 -exec rm -rf {} \; 作用相似。xargs rm -rf 是查出一条结果就删除一条;-exec rm -rf {} \; 是查出所有结果之后作为整体放到{}内进行删除,这样当文件数量较多时,有可能会出现“参数太多”之类的错误。建议选择xargs rm -rf进行删除。

8、du

du命令用于显示目录或者文件占用磁盘空间的大小,语法格式如下:

du [选项] [目录名称 | 文件名称]

-a:显示指定目录下所有的子目录及文件。

-h:文件或者目录的大小以K、M、G为单位显示,提高可读性。

-s:仅显示指定目录或者文件的总大小,而不显示其子目录的大小。

(1)、显示指定文件的大小

显示文件/data/mongodb/mongodb-linux-x86_64-rhel70-4.0.28.tgz的大小。

[root@node01 ~]# du -h /data/mongodb/mongodb-linux-x86_64-rhel70-4.0.28.tgz

(2)、显示指定目录的大小

显示目录/data/mongodb/的大小。

[root@node01 ~]# du -sh /data/mongodb/

(3)、显示指定目录下子目录及文件的大小

显示/data/mongodb/目录下子目录及文件的大小。

[root@node01 ~]# du -sh /data/mongodb/*

(4)、显示指定目录下所有子目录的大小

显示/data/mongodb/目录下所有子目录的大小,不显示文件大小。

[root@node01 ~]# du -h /data/mongodb/

(5)、显示指定目录下的所有子目录及所有文件的大小

显示/data/mongodb/mongodb_27017/目录下所有子目录及所有文件的大小。

[root@node01 ~]# du -ah /data/mongodb/mongodb_27017/


二、文件读取

1、cat

cat命令用来读取文件全部内容并打印输出在终端上,语法格式如下:

cat [选项] [文件]
参数说明:

  • -n:显示行号,会在输出的每一行前加上行号。
  • -b:显示行号,但只对非空行进行编号。
  • -s:压缩连续的空行,只显示一个空行。
  • -E:在每一行的末尾显示 $ 符号。

(1)、读取文件

读取文件mongodb.conf

[root@node01 mongodb_27017]# cat mongodb.conf

(2)、读取文件并显示行号

读取文件mongodb.conf

[root@node01 mongodb_27017]# cat -n mongodb.conf 

(3)、合并文件

将test02.txt、test03.txt的内容合并到test04.txt。

[elasticsearch@node01 ~]$ cat test02.txt test03.txt > test04.txt

(4)、查看文件最后n行

此处配合管道符“|”与tail命令查看mongodb.conf文件的最后5行

[root@node01 mongodb_27017]# cat mongodb.conf | tail -n 5

2、tac

tac命令用来读取文件全部内容并从最后一行开始打印输出在终端上。

(1)、读取文件

读取文件mongodb.conf 

[root@node01 mongodb_27017]# tac mongodb.conf 

(2)、查看文件前面n行

此处配合管道符“|”与tail命令查看mongodb.conf文件的前面6行。

可见与cat命令配合,可以查看文件内容的前n行或者后n行。

[root@node01 mongodb_27017]# tac mongodb.conf | tail -n 6

3、more

more命令用于分屏读取输出文件内容,语法格式如下:

more [文件名称]

  • 按Enter键:向下滚动一行。
  • 按空格键或者Ctrl+F:向下滚动一屏。
  • 按Ctrl+B:返回上一屏。
  • 按Q键:退出读取文件内容。

例如读取文件elasticsearch.yml

[elasticsearch@node01 config]$ more elasticsearch.yml

4、less

less命令与more类似,也是用于分屏读取文件内容,但less的使用方式更加简便。语法格式如下:

less [文件名称]

  • 按向上键:向上滚动一行。
  • 按向下键:向下滚动一行。
  • 按Q键:退出读取文件内容。

例如读取文件elasticsearch.yml

[elasticsearch@node01 config]$ less elasticsearch.yml

5、head

head命令用于读取文件的前n行内容,默认为输出前10行。语法格式如下:

head [选项] [文件名称]

  • -n:指定输出的前n行。

(1)、读取文件

读取文件mongodb.conf,默认输出前10行。

[root@node01 mongodb_27017]# head mongodb.conf

(2)、读取文件前n行

读取文件mongodb.conf,此处输出前15行。

[root@node01 mongodb_27017]# head -n 15 mongodb.conf 

6、tail

tail命令可以用于实时查看文件内容的变更,常用在查看实时日志文件内容输出。也可以用于输出文件内容的最后n行内容。语法格式如下:

tail [选项] [文件名称]

-f:实时输出文件的新增内容

-n:输出文件内容的最后n行内容,不加参数默认输出最后十行。

(1)、实时输出文件新增内容

实时输出日志文件mycluster.log的新增内容,当有新的日志内容写入时,会打印输出在终端。

[elasticsearch@node01 eslog]$ tail -f mycluster.log

按Ctrl+C可以退出。

(2)、输出文件最后n行

输出mongodb.conf文件的最后5行内容。

[root@node01 mongodb_27017]# tail -n 5 mongodb.conf

7、grep

grep命令用于查找文件里匹配指定字符串的行,通常用于搜索日志内容等场景。

语法格式如下:

grep [选项] [文件名称 | 目录名称]

  • -i:忽略字母大小写进行匹配。
  • -v:反向匹配,只输出不匹配的行。
  • -n:显示匹配行的行号。
  • -r:递归查找当前目录下的文件及子目录中的文件。
  • -l:只打印匹配的文件的文件名而不打印匹配行的内容。
  • -c:只打印匹配的行数。
  • -E:匹配多个字符串,使用字符串间使用"|"分隔。
  • --help:显示更多选项。

(1)、单个字符串匹配

查找test01.txt文件中是否有匹配字符串“M18269051009”的行。

[root@node01 data_test]# grep "M18269051009" test01.txt

(2)、单个字符串匹配(忽略大小写)

查找test01.txt文件中是否有匹配字符串“M18269051009”的行,忽略字母大小写。

[root@node01 data_test]# grep -i "M18269051009" test01.txt

(3)、单个字符串反向匹配

查找test01.txt文件中是否有匹配字符串“M18269051009”的行,仅打印不匹配的行内容。

[root@node01 data_test]# grep -v "M18269051009" test01.txt

(4)、单个字符串匹配并打印行号

查找test01.txt文件中是否有匹配字符串“M18269051009”的行,并打印匹配的所在行的行号。

[root@node01 data_test]# grep -n "M18269051009" test01.txt

(5)、单个字符串匹配仅打印匹配行数

查找test01.txt文件中是否有匹配字符串“M18269051009”的行,仅打印匹配的行数。

[root@node01 data_test]# grep -c "M18269051009" test01.txt

(6)、多个字符串匹配

查找test01.txt文件中是否有匹配字符串“M18269051001”与“M18269051009”的行。

[root@node01 data_test]# grep -E "M18269051001|M18269051009" test01.txt

(7)、递归查找目录

递归查找/root/data_test/目录下匹配字符串“M18269051009”的行。

[root@node01 ~]# grep -r "M18269051009" /root/data_test/

(8)、递归查找目录仅输出匹配的文件名称

递归查找/root/data_test/目录下匹配字符串“M18269051009”的行,仅打印出匹配的文件名称。

[root@node01 ~]# grep -rl "M18269051009" /root/data_test/

(9)、标准输入获取内容并过滤输出指定行

从管道符“|”获取输入内容,进行查找匹配字符串。

此处是从管道符“|”获取命令“ps -ef”的输入内容,进行匹配过滤后打印输出结果行,获取dmserver服务进程的详细信息。

[root@node01 ~]# ps -ef | grep -v "grep" | grep dmserver


三、文件夹管理

1、pwd

pwd命令用于显示当前完整目录,语法格式如下:

pwd [选项]

  • -L:当前目录为链接目录时,输出链接目录。
  • -P:当前目录为链接目录时,输出实际目录(物理路径)

(1)、普通目录

[root@node01 cluster]# pwd

(2)、链接目录

输出当前链接目录

[root@node01 tmp]# pwd -L

输出当前实际目录(物理路径)

[root@node01 tmp]# pwd -P

2、cd

cd命令用于切换目录,语法格式如下:

cd [路径]

(1)、切换到目录/data/Elasticsearch

[root@node01 ~]# cd /data/Elasticsearch

(2)、切换到上级目录

[root@node01 bin]# cd ../
[root@node01 elasticsearch-7.12.1]# cd ../../

使用 ../ 表示上级目录,可以通过多次使用 ../ 来切换到更上一级的目录。

(3)、切换到当前用户的主目录(home)

[elasticsearch@node01 bin]$ cd ~

使用 ~ 表示当前用户的主目录(home)

(4)、切换到上次访问的目录

[root@node01 bin]# cd -

3、mkdir

mkdir命令用于创建目录,语法格式如下:

mkdir [参数] [目录名称]

  • -p:若父目录不存在,则先创建父目录
  • -v:显示目录创建过程

(1)、创建单个路径

此处创建路径 /testDir/data

[root@node01 ~]# mkdir -pv /testDir/data

(2)、同时创建多个路径

此处同时创建路径 /testDir/data、/testDir/log、/testDir/config

[root@node01 ~]# mkdir -pv /testDir/{data,log,config}

4、rmdir

rmdir命令用于删除一个空目录,语法格式如下:

rmdir [参数] [目录名称]

  • -p:若目录被删除后,它的父目录也成为空目录,则一并删除父目录,依次递归。
  • -v:显示删除的过程。

(1)、删除一个空目录test

[root@node01 data]# rmdir test/

(2)、级联删除父目录

[root@node01 /]# rmdir -pv testDir/data/test/

注意:使用-p参数时,应该使用相对路径名称,否则会报根路径无法删除的错误。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野熊佩骑

您的鼓励是我持续创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值