目录结构
Linux为单根系统
/
#根
bin
# 存放系统命令的目录
boot
# 系统启动目录,保存于系统启动相关的文件
dev
# 设备文件保存位置
etc
# 配置文件保存位置
home
# 普通用户家目录
root
# 超级用户家目录
run
sbin
# 存放系统命令的目录,超级用户执行
tmp
# 临时目录
usr
# 系统软件资源目录
var
# 动态数据保存位置
文件类型
- #普通文件
d #目录
b #块设备
c #字符设备
s #套接字:表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。
p #管道:是指用于连接一个读进程和一个写进程,以实现它们之间通信的共享文件,又称 pipe 文件。
l #软连接
路径
绝对路径
以/(根)目录开始 ,描述完整的文件的位置路径
相对路径
不以/(根)目录开始,而是以当前所在的位置开始
命令(文件操作)
pwd
# 显示当前工作目录
-P #显示真实物理路径
cd
# 更改目录
#常用选项
-L #切换至链接目录,默认选项
-P #切换至真实目录,而非链接目录
ls
# 列出目录内容
#常用选项
-a|--all #包含隐藏文件
-l #显示额外的信息
-R|--recursive #目录递归
-d|--directory #仅显示当前目录
-1 #数字1,文件分行显示
-S #按从大到小排序
-t #按mtime排序,时间新的靠前
-u #配合-t选项,显示并按atime从新到旧排序
-U #按目录存放顺序显示
-X #按文件后缀排序
stat
# 查看文件元数据
三个时间戳属性
atime:访问时间 mtime:修改时间 ctime:元数据发生变化时间
-t|--terse #使用简洁格式显示
-f|--file-system #显示相关的文件系统信息,所谓文件系统,对应的就是windows下面的硬盘分区
-c|--format #使用特定格式输出
file
# 确认文件内容
#常用选项
-b|--brief #只显示结果,不显示文件名
-f|--files-from FILE #从指定文件中获取要处理的文件名
-F|--separator STRING #指定分割符
-L|--dereference #跟随软链接
dos2unix
#安装转换工具
[root@rocky86 ~]# dnf -y install dos2unix
#将Windows的文本格式转换成的Linux文本格式
[root@rocky86 ~]# dos2unix win.txt
dos2unix: converting file win.txt to Unix format...
[root@rocky86 ~]# file win.txt
win.txt: ASCII text
#将Linux的文本格式转换成Windows的文本格式
[root@rocky86 ~]# unix2dos win.txt
unix2dos: converting file win.txt to DOS format...
通配符
用于匹配文件名,完全匹配
? #匹配任何单个字符,一个汉字也算一个字符
* #匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件
[] #匹配括号中任意一个字符。如[abc]代表一定匹配一个字符,或是a,或是b,或是c
[-] #匹配括号中任意一个字符,-代表一个范围。如[a-z]代表匹配一个小写字母。如[A-Za-z]是任意字母
[^] #逻辑非,表示匹配不是中括号内的一个字符。如[^0-9]代表匹配一个不是数字的字符
~ #当前用户家目录
. #当前工作目录
~+ #当前工作目录
~- #前一个工作目录
~mage #用户mage家目录
touch
# 创建空文件或刷新文件的时间
#常用选项
-a #改变atime,ctime
-m #改变mtime,ctime
-h|--no-dereference #touch链接文件时,默认是操作其指向的目标文件,此选项表示操作链 接文件本身
-r|--reference #使用某个文件的更新时间和修改时间作为当前文件的更新时间和修改时 间
-d|--date #指定修改时间和访问时间,而不是采用当前系统时间
-t [[CC]YY]MMDDhhmm[.ss] # --time=WORD --time=STRING #指定修改项 access|atime 等同于 -a, modify|mtime 等同于 -m
-c|--no-create #如果文件不存在,不创建
cp
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
#常用选项
-i|--interactive #如果目标文件己存在,则提示是否覆盖
-n|--no-clobber #如果目标文件己存在,则跳过此文件复制
-R|-r|--recursive #递归复制,可用于目录的复制
-a|--archive #保留所有属性 相当于 dpR 选项组合
-s|--symbolic-link #不复制文件,而是创建链接
-p #同时复制访问时间,修改时间,权限等属性,同 -- preserve=mode,ownership,timestamps
--preserve[=ATTR_LIST] #选择属性,默认为 mode,ownership,timestamps
-u|--update #当源文件比目标文件新时,才执行复制操作
-v|--verbose #显示复制过程 -b #先备份再覆盖
--backup=numbered #目标存在,覆盖前先备份加数字后缀,形式为 filename.~#~ ,可以保留 多个版本
mode #权限
ownership #属主属组
timestamp #时间戳
links #保留链接
xattr #保留自定义属性
context #保留selinux属性
all #所有属性
mv
# 移动和重命名文件
#常用选项
-b #如果目标存在,则先备份
-n|--no-clobber #如果目标文件己存在,则跳过此文件移动
-i|--interactive #如果目标文件己存在,则提示是否覆盖
-u|--update #当源文件比目标文件新时,才执行移动操作
-v|--verbose #显示移动过程
rename
# 改名 可进行批量改名
rename [options] <expression> <replacement> <file>...
#常用选项
-v|--verbose #显示过程
-s|--symlink #如果目标是链接文件,则是重命名其指向
-n|--no-act #不做任何改变
-o|--no-overwrite #不覆盖己存在文件
#为所有的f开头包含conf的文件加上.bak后缀
[root@rocky86 ~]# rename 'conf' 'conf.bak' f*
#去掉所有的bak后缀
[root@rocky86 ~]# rename '.bak' '' *.bak
#将当前目录下 以.txt结尾的文件,批量改名成 .log结尾
[root@rocky86 ~]# rename -v txt log *.txt
rm
# 删除文件 # -rf 慎用,可以使用mv命令将要删除的文件移动到/tmp/下,起到一个回收站的作用
#常用选项
-i #删除前确认
-f|--force #不确认直接删除
-r|-R|--recursive #递归删除
-d|--dir #删除空目录
--no-preserve-root #强删根目录
tree
# 显示目录数
tree [-acdfghilnpqrstuvxACDFJQNSUX] [-H baseHREF] [-T title ]
#常用选项
-a #显示所有,包括隐藏目录和文件
-d #只显示目录
-f #显示所有内容的完整路径
-F #在执行文件,目录,Socket,符号链接,管道文件,各自加 上"*","/","=","@","|"号
-g #显示文件属组,没找到组名,以gid代替
-u #显示文件属主,没找到用户名,以uid代替
-p #显示内容权限
-s #显示内容大小
-i #不以层级结构显示
-n #不显示颜色
-t #显示时用修改时间排序
-r #以默认显示顺序的反向规则显示,默认以数字,首字母的顺序规则来显示
-o filename #将显示的内容输出到指定文件中
-L n #只显示n层目录
-D #显示内容修改时间
-C #显示色彩
#仅显示两层目录
tree -d -L 2 /
mkdir
#常用选项
-m|--mode #目录权限属性
-p|--parents #如果要创建的目录父级目录不存在,则一起创建,是递归的意思
-v|--verbose #显示创建过程
rmdir
# 删除空目录(不常用、更多使用rm命令)
#常用选项
--ignore-fail-on-non-empty #忽略非空错误提示
-p|--parents #连着父目录一起删除
-v|--verbose #显示删除过程
ln
ln
# 硬链接
硬链接特征:
- 源文件和硬链接文件拥有相同的Inode和Block
- 修改任意一个文件,另一个都改变
- 删除任意一个文件,另一个都能使用
- 硬链接表记不清,很难确认硬链接文件位置,不建议使用
- 硬链接不能链接目录
- 硬链接不能跨分区
ln -s
# 软连接(复符号链接)
软链接特征:
- 软连接和源文件拥有不同的Inode和Block
- 两个文件修改任意一个,另一个都改变
- 删除软链接,源文件不受影响:删除源文件,软连链接不能使用
- 软链接没有实际数据,只保存源文件的Inode,不论源文件多大,软连接大小不变
- 软连接的权限是最大权限lrwxrwxrwx.,但是由于没有实际数据,最终访问时需要参考源文件权限
- 软连接可以链接目录
- 软链接可以跨分区
- 软链接特征明显,建议使用软链接
tr
tr [OPTION]... SET1 [SET2]
#常用选项
-c|-C|--complement #用SET2替换SET1中没有包含的字符
-d|--delete #删除SET1中所有的字符,不转换
-s|--squeeze-repeats #压缩SET1中重复的字符,即删除重复的字符
-t|--truncate-set1 #将SET1用SET2替换,SET2中不够的,就
inode block
# 内存占满也有可是是inode号满了
ln
# 硬链接
ln -s
# 软连接(复符号链接)
IO重定向
标准输出和错误重新定向
#覆盖操作符,如果文件存在,会被覆盖
> #把STDOUT重定向到文件
1> #同上
2> #把STDERR重定向到文件
&> #把标准输出和错误都重定向
>& #和上面功能一样,建议使用上面方式
#追加操作符,在原有文件的基础上追加内容
>> #追加标准输出重定向至文件
1>> #同上
2>> #追加标准错误重定向至文件
标准输出和错误输出各自定向至不同位置
COMMAND > sucess.out 2> /path/to/error.out
合并标准输出和错误输出为同一个数据流进行重定向
&> #覆盖重定向
&>> #追加重定向
COMMAND > /path/to/file.out 2>&1
COMMAND >> /path/to/file.out 2>&1
标准输入重定向
格式
COMMAND 0< FILE
COMMAND < FILE
[root@rocky86 ~]# cat a.txt
1+2+3+4+5+6+7+8+9+10
#标准输入重定向
[root@rocky86 ~]# bc < a.txt
55
标准输入多行重定向
以<<EOF ,<EOF结束
# 多用于发文件
高级重定向
CMD <<< "str"
#传给给cmd的stdin的内容从这里开始是一个字符串
CMD< <(CMD2)
<(cmd2) 表示把cmd2的输出写入一个临时文件. cmd1 < 这是一个标准的stdin重定向 把两个合起来,就是把cmd2的输出stdout传递给cmd1作为输入stdin, 中间通过临时文件做传递
管道
|
# 将前面命令的stdout发送给后面的命令
格式
COMMAND1|COMMAND2|COMMAND3|...
# 命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
tee
# 将标准输入复制到每个指定文件,并显示到标准输出
# 既要有要
格式
tee [OPTION]... [FILE]...
#常用选项
-a|--append #内容追加到给定的文件而非覆盖
-i|--ignore-interrupts #忽略中断信号
-p #对写入非管道的行为排查错误,其使用的是 warn-nopipe
--output-error[=模式] #设置写入出错时的行为 (warn|warn-nopipe|exit|exit- nopipe)
cmd1 | tee [-a ] filename | cmd2