Linux文件管理和IO重定向

常见的文件系统目录功能:
/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader,grub)都存放于此目录
/bin:所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
/lib:启动时程序以来的基本共享文件以及内核模块文件(/lib/modules)
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc:配置文件目录
/home/USERNAME:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点
/mnt:临时文件系统挂载点
/dev:设备文件及特殊文件存储位置
b:block device,随机访问
c:character device,线性访问
/opt:第三方应用程序的安装位置
/srv:系统上运行的服务用到的数据
/tmp:临时文件存储位置
/usr:universal shared,read-only data
bin:保证系统拥有完整功能而提供的应用程序
sbin:
lib:32位使用
lib64:只存在64位系统
include:C程序的头文件
share:结构化独立的数据,例如doc,man等
local:第三方应用程序的安装位置
bin,sbin,lib,lib64,etc,shared
/var:variable data files
cache:应用程序缓存数据目录
lib:应用程序状态信息数据
local:专用于/usr/local下的应用程序存储可变数据
lock:锁文件
log:日志目录及文件
opt:专用于/opt下的应用程序存储可变数据
run:运行中的进程相关数据,通常用于存储进程pid文件
spool:应用程序数据池
tmp:保存系统两次重启之间产生的临时数据
/proc:用于输出内核与进程信息相关的虚拟文件系统
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux:security enchanted Linux,selinux相关的安全策略等信息的存储位置

文件类型:
-:普通文件
d:目录文件
b:块设备
c:字符设备
l:符号链接文件
p:管道文件
s:套接字文件

绝对路径和相对路径:
绝对路径:
以正斜杠/即根目录开始
完整的文件的位置路径
可用于任何想指定一个文件名的时候
相对路径:
不以斜线开始
一般情况下,是指相对于当前工作目录的路径,特殊场景下,是相对于某目录的位置
可以作为一个简短的形式指定一个文件名

cd:改变目录
选项:-P切换至物理路径,而非软链接目录
cd …:回到上一级目录
cd .:切换到当前路径
cd ./:切换路径为当前路径下的目录
cd -:切换到上一次的路径
cd ~:切换到家目录
cd ~USER

basename:取基名,只取文件名而不要路径
dirname:取目录名,只取路径,不要文件名

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

文件的元数据:即文件的属性:权限,大小等

stat:查看文件的元数据
stat /etc/passwd

ll == ls -l --color=auto
-l
-a
-S:按大小排序
-t:按时间排序
–time=atime
–time=ctime

file:查看文件的类型

hexdump -C FILENAME:以16进制的形式查看文件
unix2dos FILENAME:将Linux格式文件转换为windows格式文件
dos2unix FILENAME:将windows格式文件转换为Linux格式文件

文件通配符模式:
*:匹配零个或多个字符
?:匹配任何单个字符
[]:匹配指定范围内的字符
[^]:匹配指定范围外的字符

[:upper:]:任意大写字母
[:lower:]:任意小写字母
[:digit:]:任意数字
[:alnum:]:任意数字或字母
[:space:]:水平或垂直空白字符
[:punct:]:标点符号

ls -d /etc/*/:只显示目录

touch:创建空文件或刷新文件的时间
-a:仅改变atime和ctime
-m:仅改变mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss]:指定atimehemtime的时间戳
-c:如果文件不存在,则不予创建

!*:上一条命令的所有参数

cp:复制
Usage: cp [OPTION]… [-T] SOURCE DEST
or: cp [OPTION]… SOURCE… DIRECTORY
or: cp [OPTION]… -t DIRECTORY SOURCE…

-p,--preserve=mode,ownership,timestamps:保留文件的权限,属主/组,时间戳
-a,--preserve=all:归档,常用于备份
-b:覆盖前先备份,只保留最近的一个版本
--backup=NUMBERED 可以保留多个版本
-r,-R:递归复制目录及内部的所有内容
-v:显示复制的过程信息
-u:只复制源比目标更新文件或目标不存在的文件

范例: cp -a /etc /data/etcbak
cp -a /etc /data/etcbak 执行两次此命令,第二次是幂等性,即结果为/data/etcbak/etc/
第三次执行此命令,结果为覆盖

mv:实现文件或目录的移动和改名
同一分区移动数据,速度很快:数据位置没有改变
不同分区移动数据,速度相对慢,数据位置发生了变化
格式:
mv [OPTION]… [-T] SOURCE DEST
mv [OPTION]… SOURCE… DIRECTORY
mv [OPTION]… -t DIRECTORY SOURCE…

mv只能对单个文件实现改名
rename:可以实现批量改名
	touch [a-z].log
	rename 'log' 'log.bak' *
	rename '.bak' '' [a-c]*

rm:删除文件或目录
-f:删除文件,强制删除
-rf:删除目录,递归删除
–no-preserve-root 删除/

注意:此命令非常危险,慎重使用,建议使用mv代替rm
rm虽然删除了文件,但是被删除的文件仍然可能被恢复,在安全较高的场景下,可以使用shred安全删除文件

tree:显示目录树
-d:只显示目录
-L level:指定显示的层级数目

mkdir:创建目录
-p:自动创建所需的各目录
-v:显示详细信息

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

inode表结构:
每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据。元数据存放在inode表中。inode表中有很多记录组成,第一条记录对应的存放了一个文件的元数据信息
第一个inode表记录对应的保存了以下信息:
inode number节点号
文件类型
权限
UID,GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
值向磁盘上文件的数据块指针
有关文件的其他数据

目录:目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系
文件引用一个是inode号
人是通过文件名来引用一个文件
一个目录是目录下的文件名和文件inode号之间的映射

cp和inode:
分配一个空闲的inode号,在inode表中生成新条目
在目录中创建一个目录项,将名称与inode编号关联
拷贝数据生成新的文件

rm和inode:
链接数递减,从而释放的inode号可以被重用
把数据块放在空闲列表中
删除目录项
数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

mv和inode:
如果mv命令的目标和源在相同的文件系统,作为mv命令
用新的文件名创建对应新的目录项
删除旧目录条目对应的旧的文件名
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动
如果目标和源载一个不同的文件系统,mv相当于cp和rm

硬链接:
硬链接本质上就给一个文件起一个新的名称,实质是同一个文件
特性:
创建硬链接会在对应的目录中增加额外的记录项以引用文件
对应于同一文件系统上一个物理文件
每个目录引用相同的inode号
创建时链接数增加
删除文件时:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文件被删除
不能跨越驱动器或分区
不支持对目录创建硬链接
格式:
ln filename linkname

软链接(符号链接):
一个符号链接指向另一个文件,就像windows中快捷方式,软链接文件和源文件本质上不是同一个文件
特性:
一个符号链接的内容是它引用文件的名称
可以对目录创建软链接
可以跨分区的文件实现
指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
软链接如果使用相对路径,是相对于源文件的路径,而非相对于当前目录
格式:
ln -s filename linkname

#绝对路径
ln -s /data/dir /data/dirlink
#相对路径
cd /data
ln -s …/data/dir /root/dirlink
rm -rf /data/dirlink #删除软链接本身,不会删除源目录内容
rm -rf /data/dirlink/ #删除源目录的文件,不会删除链接文件
#查看链接文件指向的原文件
readlink /data/dirlink
[root@centos8 ~]#readlink /proc/$$/exe
/usr/bin/bash

硬链接和软链接区别总结

  1. 本质:
    硬链接:本质是同一个文件
    软链接:本质不是同一个文件
  2. 跨设备
    硬链接:不支持
    软链接:支持
  3. inode
    硬链接:相同
    软链接:不同
  4. 链接数
    硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少
    软链接:创建或删除,链接数不会变化
  5. 文件夹
    硬链接:不支持
    软链接:支持
  6. 相对路径
    硬链接:原始文件相对路径是相对于当前工作目录
    软链接:原始文件的相对路径是相对于链接文件的相对路径
  7. 删除源文件
    硬链接:只是链接数减一,但链接文件的访问不受影响
    软链接:链接文件将无法访问
  8. 文件类型
    硬链接:和源文件相同
    软链接:链接文件,和源文件无关
  9. 文件大小
    硬链接: 和源文件相同
    软链接: 源文件的路径的长度

$#:传给脚本的参数个数
$0:脚本本身的名字
$1,$2:传递给脚本的第一、二个参数
$@:传给脚本的所有参数的列表
$*:是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$:是脚本运行的当前进程ID号
$?:是显示最后命令的退出状态,0表示没有错误,其它表示有错误

重定向:
标准输入重定向 0 <
标准输出重定向 1 1> > >>
标准错误重定向 2 2> 2>>
&> 标准输出和标准错误重定向

set -C:禁止将内容覆盖已有文件,但可追加,利用>|仍可强制覆盖
set +C:允许覆盖,默认

tr:转换和删除字符
-d:删除所有属于第一字符集的字符
-s:把连续重复的字符以单独一个字符表示,即去重
-t:将第一个字符集对应字符转化为第二字符集对应的字符
-c,-C:取字符集的补集

多行重定向:
范例:
cat > f1.txt <line1
>line2
>EOF

管道:用来连接多个命令
格式:
命令1 | 命令2 | 命令3 | …

tee:可以重定向到多个目标,经常配合管道符一起使用
-a:追加

wget:下载
-O FILE:将下载的文档写入到文件中
-q:静默模式
wget -O - ftp://172.16.0.1 其中的 - 表示显示下载的内容,不用写入到文件中
wget -O f1.txt ftp://172.16.0.1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值