3-文件管理和IO重定向

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 目录内容

  1. 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 #目录递归显示
  1. 文件颜色修改 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

  1. 常见选项
-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    	  #保留所有属性
  1. 生产好习惯–覆盖前复制
-b 				  #覆盖前备份,在被覆盖文件当前目录建一个其备份文件
--backup=numbered #覆盖前备份,在被覆盖文件当前目录建一个其备份文件,名称filename.~#~,可保留多个版本
  1. 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

  1. 常见选项
-i #覆盖前询问
-n #若DEST存在,则跳过此操作
-v #显示移动过程
-b #覆盖前备份
-u
  1. mv运行规则
SRC/DEST不存在(重命名)存在且为文件存在且为目录
一个文件SRC文件移动到DEST的同目录,并将文件名改为DEST的SRC覆盖DEST,文件名改为DEST的SRC移动到DEST目录下
多个文件提示错误提示错误SRCs移动到DEST目录下
目录SRC目录移动至DEST的同目录,并将目录名改为DEST的提示错误在DEST下新建SRC同名目录,复制SRC中内容至新文件中,与cp命令相同
  1. rename 批量修改文件名
rename .txt .txt.bak *.txt

rm - remove 删除文件

rm 删磁盘文件,内存不会删

生产中:删除操作要慎重!可以先将需要删除的东西mv到闲置资源中,过一段时间没人用再删除

rm [OPTION]… [FILE]…

  1. 常见选项
-i 					  #删除前确认,建议alias
-f | --force		  #不需要确认,直接删除
-r | -R | --recursive #递归删除

--no-preserve-root 	  #强删根目录,慎用!!!
-d | --dir 			  #删除空目录
  1. 删除特殊字符文件(垃圾文件名字比较怪)
    文件名:-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

  1. 每个inode表记录的信息
inode number #索引节点编号,inode 编号
文件类型 	 #该行及以下用ll查看
权限
属主属组
链接数
文件大小
各时间戳
指向具体数据块的指针
有关文件的其它数据
  1. 查看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的情况
  1. 面试问题: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

硬链接和软链接

  1. 硬链接文件和源文件实质是同一个文件,不同名字。硬链接文件指向源文件的inode号
ln filename linkname #linkname创建前不存在
  1. 软链接文件和源文件不是同一文件,相当于win的快捷方式。软链接文件指向源文件的文件名
ln -s filename linkname
#linkname相对路径:相对于当前目录
#filename相对路径:相对于linkname的路径
  1. 特性及区别
硬链接软链接
本质同一个文件不同文件
跨设备不支持支持
跨分区不支持支持
对目录创建不支持支持
inode相同不同
链接数改变不变
删除源文件链接文件访问无影响链接文件无法访问
文件类型相同链接文件的类型与源文件无关
  1. 删除软链接
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

  1. 常用选项
-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不够,则不处理
  1. 与通配符合用

标准输入重定向

  1. 标准输入重定向:使用文件代替STDIN(一般为键盘输入)

  2. 判断命令是否支持STDIN
    命令不跟任何选项参数,直接回车,看是否等待标准输入,若是,则支持,反之,不支持

  3. 一般格式

CMD 0< FILE
CMD < FILE
  1. 标准输入多行重定向
    使用“<<终止词”命令从键盘把多行重导向给STDIN,直到终止词前的所有文本都发送给STDIN。终止词一般为EOF
cat << EOF
bc << EOF
cat > FILE << EOF #生产中生成文件常用方法
  1. 高级写法
CMD <<< "string" #字符串-->STDIN-->CMD

<(CMD) 		 	 #把CMD的输出写入一个临时文件
CMD1 < <(CMD2)   #相当于CMD2 | CMD1

管道

CMD1 | CMD2 | CMD3 | ...
  1. 功能说明

    • 将CMD1的STDOUT发送给CMD2的STDIN,CMD1的STDOUT发送给CMD2的STDIN,…
    • STDERR默认不能通过管道转发
  2. 实现STDERR管道 (STDOUT和STDERR一起管道)

CMD1 2>&1 | CMD2 #从左至右执行,运行机制?
CMD1 |& CMD2

tee命令

tee filename #接受STDIN,写文件filename并STDOUT
-a 			 #--append 追加而非覆盖

tee filename << EOF

tips

  1. linux 文件只有一个根目录
    win 有几个磁盘,就有几个根目录
    在这里插入图片描述

进入该目录下的命令行

  1. 文件根目录
    linux / 正斜线
    win \ 反斜线

  2. xargs 实现部分命令管道输入

xargs echo 
xargs touch
echo test{1..1000}.txt | args touch
  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值