目录
- linux fhs
- 目前常见目录的功能
- 文件颜色和其类型的关系
- 文件7种类型
- 绝对路径和相对路径
- 基名与目录名
- cd - Change Directory
- ls - list 目录内容
- stat - 查看文件状态
- file - 查看文件类型
- 文件通配符(作用仅为==匹配文件==,别和正则表达式混淆了!!!)
- touch - 创建空文件或刷新时间
- cp - copy 复制文件和目录
- mv - move 移动和重命名文件
- rm - remove 删除文件
- 显示目录树
- mkdir - 创建目录
- rmdir - 删除==空目录==
- 文件元数据和节点表结构
- 删除大文件的方法
- 硬链接和软链接
- 标准输入和输出
- 标准输出和错误重定向
- tr 命令
- 标准输入重定向
- 管道
- tee命令
- tips
linux fhs
https://www.pathname.com/fhs/pub/fhs-2.3.pdf:
目前常见目录的功能
/bin #binary 所有用户使用的基本命令,/usr/bin的链接目录
/sbin #管理类的基本命令
/dev #device 设备目录,硬件、逻辑设备
/etc #etcetera “注册表”,配置文件
/boot #引导文件
/lib #library 库,基本共享库文件
/lib64 #x86_64系统的辅助共享库文件
/root #管理员的家目录
/home/USERNAME #普通用户家目录
/media #便携式移动设备挂载点,eg:光盘
/mnt #临时文件系统挂载点
/opt #optional 第三方应用程序安装位置
/proc #processes 存放在内存中,虚拟文件系统,系统内存的映射
/sys #存放在内存中,硬件设备相关信息
/var #日志存放之处
/usr #universal shared read-only data
/usr/bin #保证系统拥有完整功能而提供的应用程序(备份)
/usr/sbin
/usr/lib
/usr/lib64
/usr/include
/usr/share #结构化独立的数据,eg:man、doc等
文件颜色和其类型的关系
普通文件(-) --> 白色
目录(directory) --> 蓝色
链接文件(link) --> 浅蓝色
块设备文件(block) --> 黄色
字符设备文件(character) --> 黄色
管道文件(pipe) --> 青黄色
套接字文件(socket) --> 粉红色
图片文件 --> 粉红色
压缩文件or文件包 --> 红色
可执行文件 --> 绿色
其它文件 --> 灰色
文件7种类型
ls -l 或 ll 查看,按最前的标识符分类
- 普通文件
d 目录文件 directory
l 链接文件 link
b 块设备文件 block
c 字符设备文件 character
p 管道文件 pipe
s 套接字文件 socket
/etc/DIR_COLOR
定义了文件颜色和其类型的关系,用vim打开
绝对路径和相对路径
绝对路径:从/开头
相对路径:不以/开头,适用于项目内部的文件的相互访问
基名与目录名
生产范例:
ur1=http://nginx.org/download/nginx-1.18.0.tar.gz
wget $ur1
tar xf `basename $ur1`
cd - Change Directory
cd DIR # 常用选项:-L 默认链接路径、-P 真实目录
pwd # printing working directory,显示当前目录 -L、-P
cd .. #返回上级目录
cd | cd ~ #进入当前家目录
cd ~USERNAME #进入指定家目录
cd - #返回上一次的目录
相关环境变量
$PWD #当前目录
$OLDPWD #上一次的目录
ls - list 目录内容
-
ls [OPTION]… [FILE]…
常用参数
-a | --all #全部显示,包含隐藏文件
-d #只显示目录信息,不显示内容
-l #显示额外信息
-F | --classify #对不同类型的文件显示时附加不同的符号
-l --time=atime # 查看atime
-l --time=mtime # 查看mtime
-l --time=ctime # 查看ctime
-S #排序,从大到小
-t #排序,mtime从新到旧
-u #排序,atime从新到旧
-tu #排序,先排mtime,再atime
-U #排序,目录存放顺序
-x #排序,文件后缀排序
-1 #文件分行显示
-R | --recursive #目录递归显示
- 文件颜色修改 2.4
stat - 查看文件状态
文件信息:属性即元数据(Metadata)、具体内容(data)
stat #查看文件元数据
文件的时间戳属性
atime #access time 访问时间,延迟更新以降低IO负载。atime>1days or mtime新于atime
mtime #modify time 修改内容时间
ctime #change time 元数据变化的时间
file - 查看文件类型
linux对文件后缀要求不严,看文件类型不能盲目的看后缀
文件通配符(作用仅为匹配文件,别和正则表达式混淆了!!!)
文件名中可以有" “(空格),但建议用户用”_“(下划线)来替代。”/“既可代表目录树的根也可作为路径名中的分隔符(类似DOS下的”),因此"/“不能出现在文件名中。和DOS一样,”." 和 “…” 分别用来表示"当前目录"和"父目录", 因此它们也不能作为文件名。
文件名不能有:“\0”、“.”、“/”
若文件名有空格,则可用\0做文件的分割符
ls .* #此为正则表达式,列出当前目录和上级目录的内容,.*也匹配…
匹配符合条件的多个文件,方便批量管理文件
常见的通配符
* #匹配零个或多个字符,不匹配“.”!!!
? #匹配任意单个字符
. #当前工作目录
~ #当前家用户目录
~+ #当前工作目录
~- #前一个工作目录
[a-z] #匹配的字母范围,Rocky:aAbB...z、Ubuntu:abc...z
[A-Z] #匹配的字母范围,Rocky:AbB...zZ、Ubuntu:ABC...Z
[a-D] #匹配的字母范围,Rocky:aAbBcCdD、Ubuntu:不合法
[jay24] #匹配列表中的任意一个字符
[^jay24] #匹配列表中所有字符以外的字符
[0-9] #匹配的数字范围
[:digit:] #任意数字,等价于[0-9]
[:lower:] #任意小写字母
[:upper:] #任意大写字母
[:alpha:] #任意大小写字母
[:alnum:] #任意数字或大小写字母
touch - 创建空文件或刷新时间
touch [OPTION]… FILE…
touch FILE #若不存在FILE,则创建FILE;反之,刷新FILE的时间(默认三个时间都修改)
常用选项
-a #改变atime,ctime
-m #改变mtime,ctime
touch -r FILEA FILEB #将FILEA的时间赋给FILEB
touch -d "2024-3-17 16:08:30" FILE #指定时间赋值
-h #touch链接文件,操作该文件本身。默认是操作其指向的目标文件
-c #如果文件不存在,则不创建
cp - copy 复制文件和目录
cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE… #交换源文件和目标文件位置
cp [OPTION]… [-T] SOURCE DEST
- 常见选项
-i #覆盖前提示,建议alias cp='cp -i'
-r | -R |--recursive #递归复制,目录复制
-v #显示复制过程
-a #保留所有属性。复制特殊文件时,需要用-a
-p #保留属性mode、ownership、timestamps
--preserve[=ATTR_LIST] #选择保留的属性,默认mode、ownership、timestamps
-n
-s
-u
ATTR_LIST
mode #权限
ownership #属主属组
timestamp #时间戳
links #保留链接
xattr #保留自定义属性
context #保留selinux属性
all #保留所有属性
- 生产好习惯–覆盖前复制
-b #覆盖前备份,在被覆盖文件当前目录建一个其备份文件
--backup=numbered #覆盖前备份,在被覆盖文件当前目录建一个其备份文件,名称filename.~#~,可保留多个版本
- cp运行规则
SRC/DEST | 不存在 | 存在且为文件 | 存在且为目录 |
---|---|---|---|
一个文件 | 新建DEST,并写入SRC的内容 | 用SRC的内容覆盖DEST | 在DEST下新建与SRC同名的文件,并写入SRC的内容 |
多个文件 | 提示错误 | 提示错误 | 在DEST下新建与SRC同名的文件,并将原文件的内容写入对应新文件中 |
目录(-r) | 创建DEST同名目录,复制SRC目录中所有文件至DEST中 | 提示错误 | 在DEST下新建SRC同名目录,复制SRC中内容至新文件中 |
mv - move 移动和重命名文件
同一分区移动数据,数据位置没有变化,速度很快
不同分区移动数据,数据位置发生了变化,速度相对慢
格式与cp相似
mv [OPTION]… SOURCE… DIRECTORY
mv [OPTION]… -t DIRECTORY SOURCE…
mv [OPTION]… [-T] SOURCE DEST
- 常见选项
-i #覆盖前询问
-n #若DEST存在,则跳过此操作
-v #显示移动过程
-b #覆盖前备份
-u
- mv运行规则
SRC/DEST | 不存在(重命名) | 存在且为文件 | 存在且为目录 |
---|---|---|---|
一个文件 | SRC文件移动到DEST的同目录,并将文件名改为DEST的 | SRC覆盖DEST,文件名改为DEST的 | SRC移动到DEST目录下 |
多个文件 | 提示错误 | 提示错误 | SRCs移动到DEST目录下 |
目录 | SRC目录移动至DEST的同目录,并将目录名改为DEST的 | 提示错误 | 在DEST下新建SRC同名目录,复制SRC中内容至新文件中,与cp命令相同 |
- rename 批量修改文件名
rename .txt .txt.bak *.txt
rm - remove 删除文件
rm 删磁盘文件,内存不会删
生产中:删除操作要慎重!可以先将需要删除的东西mv到闲置资源中,过一段时间没人用再删除
rm [OPTION]… [FILE]…
- 常见选项
-i #删除前确认,建议alias
-f | --force #不需要确认,直接删除
-r | -R | --recursive #递归删除
--no-preserve-root #强删根目录,慎用!!!
-d | --dir #删除空目录
- 删除特殊字符文件(垃圾文件名字比较怪)
文件名:-f、~等
rm -rf ./filename
rm -rf * #删除当前目录!
显示目录树
现阶段了解(2.12.1)
mkdir - 创建目录
mkdir [OPTION]… DIRECTORY…
常用选项
-p | --parents #递归创建。如果要创建的目录其父级目录不存在,则一起创建
-m | --mode #设定新建目录权限,eg:mkdir -m=777 FILENAME
-v | --verbose #显示创建过程
rmdir - 删除空目录
rmdir只能删空目录
常见选项
-p #递归删除
-v #显示删除过程
文件元数据和节点表结构
文件元数据和具体内容在磁盘上分开存放
元数据存储区域:innode
内容储存区域:block
一个文件有一个inode和至少一个block
- 每个inode表记录的信息
inode number #索引节点编号,inode 编号
文件类型 #该行及以下用ll查看
权限
属主属组
链接数
文件大小
各时间戳
指向具体数据块的指针
有关文件的其它数据
- 查看inode编号
ll -i FILE
ls -i FILE
stat FILE
stat -c "%i" FILE #单独查看inode编号
… 查看硬盘使用情况
df -h #human readable
df #查看硬盘空间情况
df /boot #查看指定硬盘分区/boot的情况
df -i #查看inode情况
df -i /boot #查看指定inode分区/boot的情况
- 面试问题:no space left on device
因为文件的元数据和内容分开存放在inode和block,所以inode耗尽或者硬盘耗尽都会显示“no space left on device”并创建不了文件。出现提示时,分别使用df -i和df查看两者使用情况
inode耗尽,磁盘空间未耗尽:存在数量过多的小文件
inode正常,磁盘空间打满:存在内容过大的文件
删除大文件的方法
问题:使用rm命令删文件后,空间并未释放?
解决:因为已经rm了,所以亡羊补牢。找到进程–>kill进程
正确删大文件的方法
cat /dev/null > FILE #rm大文件前,先清空其内容
rm -f FILE
硬链接和软链接
- 硬链接文件和源文件实质是同一个文件,不同名字。硬链接文件指向源文件的inode号
ln filename linkname #linkname创建前不存在
- 软链接文件和源文件不是同一文件,相当于win的快捷方式。软链接文件指向源文件的文件名
ln -s filename linkname
#linkname相对路径:相对于当前目录
#filename相对路径:相对于linkname的路径
- 特性及区别
硬链接 | 软链接 | |
---|---|---|
本质 | 同一个文件 | 不同文件 |
跨设备 | 不支持 | 支持 |
跨分区 | 不支持 | 支持 |
对目录创建 | 不支持 | 支持 |
inode | 相同 | 不同 |
链接数 | 改变 | 不变 |
删除源文件 | 链接文件访问无影响 | 链接文件无法访问 |
文件类型 | 相同 | 链接文件的类型与源文件无关 |
- 删除软链接
rm -rf linkfile/ #错误做法。如果源文件为目录,则源文件内容被删除,软链接不变
rm -f linkfile #正确做法
标准输入和输出
Linux三个最基本的IO设备所在的文件
标准输出和错误重定向
1> #覆盖重定向STDOUT
> #1>简写
2> #覆盖重定向STDERR
&> #覆盖重定向STDOUT和STDERR(彼此不覆盖)
>& #同上
1>> #追加重定向STDOUT
>> #1>>简写
2>> #追加重定向STDERR
&>> #追加重定向STDOUT和STDERR(唯一写法!)
2>&1 #STDERR重定向到STDOUT
1>&2 #STDOUT重定向到STDERR
!!!重定向符前后不要有相同文件,不安全,不可靠,结果不可预测!!!
tr 命令
格式:tr [OPTION]… SET1 [SET2]
用途:转换字符、删除字符、压缩重复字符
从STDIN读取数据,结果输出至STDOUT
- 常用选项
-c #反选符,输入不符合才处理
tr SET1 SET2 #输入符合SET1,就转换为SET2。SET2位数不够,就用其最后一位
tr -c SET1 SET2 #输入不符合SET1,就转换为SET2。
tr -d SET1 #删除输入符合SET1的字符
tr -dc SET1 #删除输入不符合SET1的字符
tr -s SET1 #压缩输入符合SET1的重复字符
tr -s SET1 SET2 #压缩输入符合SET1的重复字符,并将其替换为SET2
tr -sc SET1 #压缩输入不符合SET1的重复字符
tr -t SET1 SET2 #将SET1用SET2替换,若SET2不够,则不处理
- 与通配符合用
标准输入重定向
-
标准输入重定向:使用文件代替STDIN(一般为键盘输入)
-
判断命令是否支持STDIN
命令不跟任何选项参数,直接回车,看是否等待标准输入,若是,则支持,反之,不支持 -
一般格式
CMD 0< FILE
CMD < FILE
- 标准输入多行重定向
使用“<<终止词”命令从键盘把多行重导向给STDIN,直到终止词前的所有文本都发送给STDIN。终止词一般为EOF
cat << EOF
bc << EOF
cat > FILE << EOF #生产中生成文件常用方法
- 高级写法
CMD <<< "string" #字符串-->STDIN-->CMD
<(CMD) #把CMD的输出写入一个临时文件
CMD1 < <(CMD2) #相当于CMD2 | CMD1
管道
CMD1 | CMD2 | CMD3 | ...
-
功能说明
- 将CMD1的STDOUT发送给CMD2的STDIN,CMD1的STDOUT发送给CMD2的STDIN,…
- STDERR默认不能通过管道转发
-
实现STDERR管道 (STDOUT和STDERR一起管道)
CMD1 2>&1 | CMD2 #从左至右执行,运行机制?
CMD1 |& CMD2
tee命令
tee filename #接受STDIN,写文件filename并STDOUT
-a #--append 追加而非覆盖
tee filename << EOF
tips
- linux 文件只有一个根目录
win 有几个磁盘,就有几个根目录
进入该目录下的命令行
-
文件根目录
linux / 正斜线
win \ 反斜线 -
xargs 实现部分命令管道输入
xargs echo
xargs touch
echo test{1..1000}.txt | args touch