您的位置:首页 > 其它

常用命令-文件系统相关

2020-07-29 22:28 103 查看

常用命令-文件系统相关

tree 显示目录树

以树状图列出目录的内容(目录下的所有文件,包括子目录里的文件的文件)
命令格式 tree [OPTIONS] [pattern] [directory]

常用选项参数说明
-a	显示所有目录和文件(默认不显示隐藏文件)
-A	使用ASNI 绘图字符显示树状图而非以ASCII字符组合
-C	带色彩显示文件和目录清单,便于区分各种类型
-d	显示目录名称而非内容
-dirsfirst	目录显示在前,文件显示在后
-D	列出文件或目录的更改时间
-f	在每个文件或目录之前,显示完整的相对路径名称
-F	在执行文件,目录,Socket,符号链接,管道名称前各自加上*、/、=、@、| 以示区分
-i	不以阶梯状列出文件或目录名称
-L level	level表示目录层级(数字),限制目录显示层级
-l 	如遇到性质为符号连接的目录,直接列出该连接指向的原始目录
-n	不在文件和目录清单加上色彩
-p	列出权限标示
-P	<pattern 范式样本>只显示符合范本样式的文件或目录名称
-q	用 ? 取代控制字符,列出文件和目录名称
-r	以相反次序显示
-s	列出文件或目录大小
-t	用文件和目录的更改时间排序
-u	列出文件或目录的拥有者名称,没有对应名称,则显示用户识别码

范例

#查看指定目录树的层级
[root@CentOS8 ~]#tree -L 1 /

#查看指定目录树中的子目录,不包含文件
[root@CentOS8 ~]#tree -L 1 -d /etc

#查看目录下最大深度为2级的文件列表,显示全路径及权限
[root@CentOS8 ~]#tree -f -p -L 2 /etc/

#查看目录下的文件列表,并加上符号以示区分目录和文件
[root@CentOS8 ~]#tree -F

cd 切换目录和pwd 显示当前工作目录

cd 切换目录

选项参数说明
-P	切换至物理路径,而非软链接目录

目录可用绝对路径或相对路径
cd		默认切换至家目录
cd .	切换到当前目录(没啥意义)
cd ..	切换到上一级目录,即父目录
cd -	切换至上一次所在的工作目录
cd ~	等同于cd
cd ~USERNAME	切换至指定用户USERNAME 的家目录

ps:
cd - 可切换至上一次所在的工作目录的原理,在每次切换目录前,将当前目录的路径存放在环境变量OLDPWD中
环境变量PWD 存储的是当前目录路径

pwd 显示当前所在的路径

[root@CentOS8 ~]#cd /etc/sysconfig/
[root@CentOS8 sysconfig]#pwd
/etc/sysconfig

ls 列出目录内容

列出当前目录或指定目录的内容(包括文件的类型、时间、属主、属组、大小以及最近的修改时间等)。

命令格式:ls [OPTIONS][files_or_dirs]

常用选项参数说明
-a	列出内容中包含隐藏文件
-l	显示额外的信息
-R	目录递归
-ld	目录和符号链接信息
-l	文件分行显示
-S	按从大到小排序
-t	按mtime 排序
-u	配合-t 选项,显示并按atime 从新到旧排序
-U	按目录存放顺序显示
-X	按文件后缀排序
-F	对不同类型文件显示时附加不同的符号:*/=>@|
-C	文件多时,以多列的方式显示文件,默认是一列(标准输出)

ps:
ls 查看不同后缀文件时的颜色由/etc/DIR_COLORS 和@LS_COLORS 变量定义

范例:别名ll

[root@CentOS8 sysconfig]#alias ll
alias ll='ls -l --color=auto'

stat 和 file 查看文件状态或文件类型

文件的扩展属性通过

stat
file
查看。stat 显示文件的详细属性(查看文件状态),file 查看文件类型
命令格式
stat [FILE or DIR]
file [OPTION][FILE]

file 常用参数选项说明
-b	列出文件辨识结果时,不显示文件名称
-f filelist 列出文件filelist 中文件名的文件类型
-F	使用指定分隔符号替换输出文件名后默认的 : 分隔符
-L	查看对应软链接对应文件的文件类型

范例
stat 和file 的用法

[root@CentOS8 ~]#stat /etc/passwd
File: /etc/passwd
Size: 2424      	Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d	Inode: 135060587   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2020-07-29 10:16:56.118167356 +0800
Modify: 2020-07-27 10:05:05.893097849 +0800
Change: 2020-07-27 10:05:05.895097839 +0800
Birth: -

#查看Linux和wins 文本格式的区别
[root@CentOS8 ~]#cat linux.txt wins.txt
a
b
c
a
b
c[root@CentOS8 ~]#file wins.txt linux.txt
wins.txt:  ASCII text, with CRLF line terminators
linux.txt: ASCII text

#hexdump -C 将文本内容转换为16进制和相应的ASCII字符查看
[root@CentOS8 ~]#hexdump -C linux.txt
00000000  61 0a 62 0a 63 0a                                 |a.b.c.|
00000006
[root@CentOS8 ~]#hexdump -C wins.txt
00000000  61 0d 0a 62 0d 0a 63                              |a..b..c|
00000007

#编辑内容为多个目录的文件
[root@CentOS8 ~]#vim list.txt
/etc/
/bin
/etc/issue
#显示文件中的内容
[root@CentOS8 ~]#cat list.txt
/etc/
/bin
/etc/issue
#查看这些目录的文件类型
[root@CentOS8 ~]#file -f list.txt
/etc/:      directory
/bin:       symbolic link to usr/bin
/etc/issue: ASCII text

文本格式转换

#安装格式转换工具
[root@CentOS8 ~]#yum -y install dos2unix
#或者dnf 安装
[root@CentOS8 ~]#dnf -y install dos2unix

#将windows 的文本格式转换成Linux 文本格式
[root@CentOS8 ~]#dos2unix wins.txt
dos2unix: converting file wins.txt to Unix format...
[root@CentOS8 ~]#file wins.txt
wins.txt: ASCII text

#将Linux 的文本格式转换成windows 文本格式
[root@CentOS8 ~]#unix2dos linux.txt
unix2dos: converting file linux.txt to DOS format...
[root@CentOS8 ~]#file linux.txt
linux.txt: ASCII text, with CRLF line terminators

文件字符集编码转换

#查看当前支持的字符集编码列表
[root@CentOS8 ~]#iconv -l

#windows7 上文本默认的编码ANSI(GB2312)
[root@CentOS8 ~]#file windows.txt
windows.txt: ISO-8859 text, with no line terminators

touch 创建空文件

创建空的新文件或刷新已有文件的时间戳

命令格式 touch [OPTION] FILE

常用参数格式说明
-a	仅改变atime 和ctime
-m	仅改变mtime 和ctime
-t	[CC[YY]]MMDDhhmm[.ss] 指定atime 和mtime 的时间戳
-c	文件不存在,不予创建

范例

#创建空的新文件
[root@CentOS8 data]#touch f1.txt
[root@CentOS8 data]#ll
total 0
-rw-r--r--. 1 root root 0 Jul 29 20:36 f1.txt

#刷新已有文件的时间戳
[root@CentOS8 ~]#stat anaconda-ks.cfg
File: anaconda-ks.cfg
Size: 1577      	Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d	Inode: 202373341   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-07-28 16:12:10.434978076 +0800
Modify: 2020-07-27 10:06:35.345639027 +0800
Change: 2020-07-27 10:06:35.345639027 +0800
Birth: -
[root@CentOS8 ~]#touch anaconda-ks.cfg
[root@CentOS8 ~]#stat anaconda-ks.cfg
File: anaconda-ks.cfg
Size: 1577      	Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d	Inode: 202373341   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-07-29 20:37:14.297230665 +0800
Modify: 2020-07-29 20:37:14.297230665 +0800
Change: 2020-07-29 20:37:14.297230665 +0800
Birth: -

#创建空的新文件,带日期格式文件名
[root@CentOS8 data]#touch $touch `date -d "-1 day" +%F_%T`.log
[root@CentOS8 data]#ls
2020-07-28_20:41:35.log  f1.txt
[root@CentOS8 data]#touch `touch $(date -d "-1 year" +%F_%T).log
[root@CentOS8 data]#ls
2019-07-29_20:41:48.log  2020-07-28_20:41:35.log  f1.txt

mkdir 创建目录

创建目录,常见选项:

-p	确保目录名称存在,不存在则新建
-v	显示详细信息
-m MODE	创建目录时直接指定权限

范例

alias rm='DIR=/data/backup`date +%F%T`;mkdir $DIR;mv -t $DIR'

rmdir 删除目录

删除目录,常见选项:

-p	递归删除父级空目录
-v	显示详细信息

ps:rmdir 只能删除空目录,如果想删除非空目录,可使用rm -r 命令,递归删除目录树

cp 复制目录或文件

实现文件或目录的复制

命令格式

cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
常用参数选项
-i	如果目标已存在,覆盖前提示是否覆盖
-r,-R	--recursive 递归处理,将指定目录下的文件与子目录一并处理
-a	归档,相当于-dR --preserve=all,常用于备份功能
-d --no-dereference--preserve=links	不复制源文件,只复制链接名
--preserve[=ATTR_LIST]
mode:权限
ownership:属主属组
timestamp:时间
links:链接
context:上下文
all:全部
-p	等同于--preserve=mode,ownership,timestamp
-v,--verbose	显示执行过程
-f,--force	强制拷贝覆盖
-u,--update	只复制源比目标更新文件或目标不存在的文件
-b	目标存在,覆盖前先备份,默认形式为filename~,只保留最近的一个备份
--backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为filename.~#~,可保留多个版本

复制会出现的情况及不同情况下文件复制会出现的问题,什么操作能实现,哪些操作不能实现

源目标 目标不存在 目标存在且为文件 目标存在且为目录
一个文件 新建DEST 文件,并将SRC 中内容复制到DEST 中 将SRC 中的内容覆盖至DEST 中,目标文件中的原始数据将会丢失。建议复制使用 -i 选项 在该目录下新建与原文件同名的文件,并将SRC 文件中的内容复制到DEST 中
多个文件 提示错误 提示错误 在该目录下分别新建与原文件同名的文件,并将SRC 文件中的内容一一复制到对应的DEST 中
目录文件 新建指定DEST 同名目录,复制SRC 目录中所有文件至DEST 下 提示错误 在DEST 下新建与原目录同名的目录,并将SRC 中内容复制至新目录中

范例

[root@CentOS8 ~]#cp /etc/issue /data/issue_dawn.bak
[root@CentOS8 ~]#ll /etc/issue /data/issue_dawn.bak
-rw-r--r--. 1 root root 23 Jul 29 21:58 /data/issue_dawn.bak
-rw-r--r--. 1 root root 23 Jan  2  2020 /etc/issue

[root@CentOS8 ~]#cp -p /etc/issue /data/issue_dawn2.bak
[root@CentOS8 ~]#ll !*
ll -p /etc/issue /data/issue_dawn2.bak
-rw-r--r--. 1 root root 23 Jan  2  2020 /data/issue_dawn2.bak
-rw-r--r--. 1 root root 23 Jan  2  2020 /etc/issue

#将目录复制到目录中,报错
[root@CentOS8 ~]#cp /etc/sysconfig/ /data/
cp: -r not specified; omitting directory '/etc/sysconfig/'

#将目录复制到目录中,使用选项-r
[root@CentOS8 data]#cp -r /etc/sysconfig/ /data/
[root@CentOS8 data]#tree /data/dir2
/data/dir2
└── dir1
├── f1.txt
├── f2.txt
├── f3.txt
├── f4.txt
└── f5.txt

#覆盖已存在的目标文件并做备份
[root@CentOS8 data]#cp -b /etc/motd /data/issue
cp: overwrite '/data/issue'? y
[root@CentOS8 data]#ll /data
-rw-r--r--. 1 root root  0 Jul 29 22:16 /data/issue
-rw-r--r--. 1 root root  0 Jul 29 22:15 /data/issue~

#覆盖已存在的目标文件并保存多个版本,文件名按数字递增
[root@CentOS8 data]#cp --backup=numbered /etc/motd /data/issue
cp: overwrite '/data/issue'? y
[root@CentOS8 data]#cp --backup=numbered /etc/motd /data/issue
cp: overwrite '/data/issue'? y
[root@CentOS8 data]#cp --backup=numbered /etc/motd /data/issue
cp: overwrite '/data/issue'? y
[root@CentOS8 data]#ll /data
-rw-r--r--. 1 root root  0 Jul 29 22:19 issue
-rw-r--r--. 1 root root  0 Jul 29 22:15 issue~
-rw-r--r--. 1 root root  0 Jul 29 22:16 issue.~1~
-rw-r--r--. 1 root root  0 Jul 29 22:19 issue.~2~
-rw-r--r--. 1 root root  0 Jul 29 22:19 issue.~3~

常用的
cp -r 是拷贝目录
cp -avr 拷贝目录,属性不变,显示拷贝过程
\cp  拷贝,不管目标有没有相同名字文件

mv 移动和重命名文件

实现文件或目录的移动和改名.

命令格式

mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
常用参数选项:
-i	交互式
-f	强制执行
-b	目标存在,覆盖前先备份

ps:
同一分区移动数据,速度很快:数据位置没有变化
不同分区移动数据,速度相对慢:数据位置发生了变化

rename 可实现批量修改文件名
命令格式:rename [OPTIONS] <expression> <replacement> <file>…

#为所有的log 文件加上.bak 后缀
[root@centos8 data]#ls
f1.log  f2.log  f3.log  f4.log  f5.log
[root@centos8 data]#rename ".log" ".log.bak" f{1..5}.log
[root@centos8 data]#ls
f1.log.bak  f2.log.bak  f3.log.bak  f4.log.bak  f5.log.bak

#去掉所有的bak 后缀
[root@centos8 data]#rename ".bak" "" f{1..3}.*
[root@centos8 data]#ls
f1.log  f2.log  f3.log  f4.log  f5.log

rm 删除文件

可实现文件目录的删除,ps:**此命令非常危险,慎重使用,建议使用mv 代替rm **

命令格式
rm [OPTION]… FILE…

-i	交互式
-f	强制删除
-r	递归
--no-preseve-root	删除/

范例

#使用mv 代替rm
[root@centos8 data]#alias rm='DIR=/data/backup`date +%F%T`;mkdir $DIR;mv -t $DIR'
#安全机制,删除/ 时,要求设置--no-preserve-root 选项
[root@centos8 data]#rm -rf /
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe

#该操作,请做好快照备份,删除/ 文件
[root@centos8 ~]#rm -rf /*
[root@centos8 ~]#/2Tab	#查看删除过程中/ 下的文件
[root@centos8 ~]#echo *	#输出当前目录下的所有文件(不包含隐藏文件)

删除特殊文件

#将名为 /data/-f 的文件删除
[root@centos8 data]#rm -f -f 	#此方法错误,无法删除
[root@centos8 data]#ll
total 0
-rw-r--r--. 1 root root 0 Jul 30 13:59 -f

#可删除的方式
[root@centos8 data]#rm -- -f
[root@centos8 data]#rm ./-f
[root@centos8 data]#rm /data/-f

#将名为 ~ 的
[root@centos8 data]#touch "~"
[root@centos8 data]#ll
total 0
-rw-r--r--. 1 root root 0 Jul 30 14:05 '~'
[root@centos8 data]#rm -f ~
rm: cannot remove '/root': Is a directory
[root@centos8 data]#rm -- ~
rm: cannot remove '/root': Is a directory
[root@centos8 data]#rm -f ./~
[root@centos8 data]#ll
total 0

shred

rm虽然删除了文件,但被删除的文件还是有可能恢复,对于安全要求较高的场景,可使用shred安全删除文件

命令格式

shred [OPTION]… FILE…

常见参数选项
-z	最后一次覆盖添加0,以隐藏覆盖操作
-v	显示操作进度
-u	覆盖后截断并删除文件
-n #	#表示数字,指定覆盖文件内容的次数,默认是3次

范例

[root@centos8 data]#shred -zvun 5 passwords.txt
shred: passwords.txt: pass 1/6 (random)...
shred: passwords.txt: pass 2/6 (000000)...
shred: passwords.txt: pass 3/6 (random)...
shred: passwords.txt: pass 4/6 (ffffff)...
shred: passwords.txt: pass 5/6 (random)...
shred: passwords.txt: pass 6/6 (000000)...
shred: passwords.txt: removing
shred: passwords.txt: renamed to 0000000000000
shred: 0000000000000: renamed to 000000000000
shred: 000000000000: renamed to 00000000000
shred: 00000000000: renamed to 0000000000
shred: 0000000000: renamed to 000000000
shred: 000000000: renamed to 00000000
shred: 00000000: renamed to 0000000
shred: 0000000: renamed to 000000
shred: 000000: renamed to 00000
shred: 00000: renamed to 0000
shred: 0000: renamed to 000
shred: 000: renamed to 00
shred: 00: renamed to 0
shred: passwords.txt: removed
[root@centos8 data]#ls passwords.txt
ls: cannot access 'passwords.txt': No such file or directory
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: