Linux文件系统命名规则
文件名最长255字节
文件名+路径最长4095字节
除了斜杠和NUL,所有字符都可用
标准Linux文件系统(如ext4、xfs),文件名称大小写敏感
系统目录用途
/boot 启动文件、内核
/etc 配置文件
/dev 硬件设备
b:块设备,以块为单位(每块大小为4K),随机访问
c:字符设备,以字符为单位,线性访问
/bin 二进制文件(管理员使用)
/sbin 二进制文件(普通用户使用)
/tmp 临时文件
/usr 二层根
/var 日志
/proc 内存数据,运行中的进程信息,大小为0
/sys 内存数据,映射硬件信息,大小为0
/lib 库
/root root家目录
/mnt 临时挂载点
开机状态下刷新新加载硬件设备及定义别名
[root@localhost ~]#echo '- - -'> /sys/class/scsi_host/host0/scan ;echo '- - -'> /sys/class/scsi_host/host2/scan
[root@localhost ~]#alias scandisk="echo '- - -'> /sys/class/scsi_host/host0/scan ;echo '- - -'> /sys/class/scsi_host/host2/scan"
[root@localhost ~]#scandisk
[root@localhost ~]#lsblk
数据表示方式及inode
数据在设备储存有两种格式:元数据(matedata)和数据(data)
每个文件都有唯一的索引节点,索引节点以inode table的形式储存有关文件的信息(元数据),包括(如下图所示):
1、owner 所有者
2、time 时间戳
3、size 大小
4、mode 权限
5、指针
目录表示方式
目录数据存储该目录下文件的名称及inode,读取文件时通过文件查找索引号,再根据索引号找到该文件的inode,根据指针查看数据
一般inode占用分区的1%
rm删除文件实际是删除掉改文件的inode,并将该目录下的文件名称及节点号删掉,data实际没有删除
查看元数据相关信息
[root@localhost ~]#ll -i
#索引节点 文件类型 链接数 所有者权限 所有组权限 其他组权限 所有者 所有组 大小 数据修改时间(mtime) 文件名
201326658 -rw-------. 1 root root 2027 Apr 8 20:27 anaconda-ks.cfg
201326669 -rw-r--r--. 1 root root 2056 Apr 8 20:39 initial-setup-ks.cfg
文件类型
- 普通文件 d 目录 b 块设备 p 管道
l 链接文件 c 字符设备 s 套接字
文件权限(特殊权限后面详细介绍)
r(4) 读权限 w(2) 写权限 x(1) 执行权限
修改文件时间戳
stat 查看文件详细信息
access time:访问时间 atime 读取文件内容
modify time:数据修改时间 mtime 修改数据
change time: 修改权限改变时间 ctime 修改元数据
[root@localhost ~]#stat anaconda-ks.cfg
File: ‘anaconda-ks.cfg’
Size: 2027 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 201326658 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-04-08 20:34:49.762014449 +0800
Modify: 2020-04-08 20:27:47.930676747 +0800
Change: 2020-04-08 20:27:47.930676747 +0800
Birth: -
创建已存在文件修改时间戳
touch创建文件已存在时会修改所有时间,不改变内容
>会修改ctime atime,覆盖内容
>> 不会修改时间,不修改内容
[root@localhost /data]#stat abc
Access: 2020-04-22 21:06:31.417406073 +0800
Modify: 2020-04-22 21:06:31.417406073 +0800
Change: 2020-04-22 21:06:31.417406073 +0800
[root@localhost /data]#touch abc
[root@localhost /data]#stat abc
Access: 2020-04-22 21:07:05.399403660 +0800
Modify: 2020-04-22 21:07:05.399403660 +0800
Change: 2020-04-22 21:07:05.399403660 +0800
[root@localhost /data]#>> abc
[root@localhost /data]#stat abc
Access: 2020-04-22 21:07:05.399403660 +0800
Modify: 2020-04-22 21:07:05.399403660 +0800
Change: 2020-04-22 21:07:05.399403660 +0800
[root@localhost /data]#> abc
[root@localhost /data]#stat abc
Access: 2020-04-22 21:07:05.399403660 +0800
Modify: 2020-04-22 21:08:20.667398316 +0800
Change: 2020-04-22 21:08:20.667398316 +0800
[root@localhost /data]#
修改数据改变时间戳
修改用户改变mtime
修改数据改变ctime
读取数据修改atime
[root@localhost /data]#stat abc #查看时间
Access: 2020-04-22 21:07:05.399403660 +0800
Modify: 2020-04-22 21:08:20.667398316 +0800
Change: 2020-04-22 21:08:20.667398316 +0800
[root@localhost /data]#cat abc #读取内容
[root@localhost /data]#stat abc
Access: 2020-04-22 21:17:33.841359038 +0800 #atime改变
Modify: 2020-04-22 21:08:20.667398316 +0800
Change: 2020-04-22 21:08:20.667398316 +0800
[root@localhost /data]#echo abc >> abc #追加内容(改变数据)
[root@localhost /data]#stat abc
Access: 2020-04-22 21:17:33.841359038 +0800
Modify: 2020-04-22 21:18:15.819356057 +0800 #mtime改变
Change: 2020-04-22 21:18:15.819356057 +0800 #ctime改变
[root@localhost /data]#chown wang abc #改变用户(改变元数据)
[root@localhost /data]#stat abc
Access: 2020-04-22 21:17:33.841359038 +0800
Modify: 2020-04-22 21:18:15.819356057 +0800
Change: 2020-04-22 21:18:37.584354512 +0800 #ctime改变
mtime改变ctime会改变,atime读取时间超过一天会修改(平凡读取修改时间会增加系统负担)
软硬链接区别
软链接 | 硬链接 | |
---|---|---|
本质 | 不同文件 | 同一文件不同名称 |
命令 | ln -s | ln |
跨分区 | 支持 | 不支持 |
目录 | 支持 | 不支持 |
链接数 | 不变 | 增加 |
inode | 不一样 | 与源文件一样 |
相互关系 | 依赖 | 平等 |
相对路径 | 相对于链接文件 | 相对于当前目录 |
文件类型 | l | 与源文件一致 |
[root@localhost /data]#ll #查看链接数
total 4
drwxr-xr-x. 4 root root 57 Apr 12 04:40 backup
-rw-r--r--. 1 root root 2618 Apr 12 02:57 reset.sh
drwxr-xr-x. 2 root root 59 Apr 12 05:02 shtest
[root@localhost /data]#ln backup backup.link #目录硬链接创建报错
ln: ‘backup’: hard link not allowed for directory
[root@localhost /data]#ln reset.sh reset.sh.link #创建硬链接
[root@localhost /data]#ll
total 8
drwxr-xr-x. 4 root root 57 Apr 12 04:40 backup
-rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh #链接数增加
-rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh.link
drwxr-xr-x. 2 root root 59 Apr 12 05:02 shtest
[root@localhost /data]#ln -s backup backup.link #创建目录软链接
[root@localhost /data]#ll
total 8
drwxr-xr-x. 4 root root 57 Apr 12 04:40 backup #链接数不变,文件类型为d
lrwxrwxrwx 1 root root 6 Apr 22 21:11 backup.link -> backup #文件类型为l
-rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh
-rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh.link
drwxr-xr-x. 2 root root 59 Apr 12 05:02 shtest
[root@localhost /data]#ln -s ../data/backup /backup.link #相对于链接文件的相对路径
[root@localhost /data]#cd /
[root@localhost /]#ll backup.link/
total 0
drwxr-xr-x. 2 root root 6 Apr 12 04:37 etc2020-04-12
drwxr-xr-x. 3 root root 17 Apr 12 04:40 etc2020-04-12-04:40:20
[root@localhost /]#ll backup.link
lrwxrwxrwx 1 root root 14 Apr 22 21:13 backup.link -> ../data/backup
[root@localhost /]#rm -rf /data/backup #删除文件
#删除文件后软链接报错,依赖关系
#创建新文件,软链接不再报错,软链接只识别名称,不识别内容
#删除目录软链接时,不要带/,否则删除的是目录里面的内容,软链接本身没有删除
文件管理类命令
pwd
显示当前工作目录的绝对路径
[root@localhost /]#ll backup.link
lrwxrwxrwx 1 root root 14 Apr 22 21:13 backup.link -> ../data/backup
[root@localhost /backup.link]#pwd #显示链接路径(默认去掉-L)
/backup.link
[root@localhost /backup.link]#pwd -P #显示真实路径
/data/backup
basename
选取文件名
[root@localhost /backup.link]#basename /etc/sysconfig/network-scripts/ifcfg-ens33
ifcfg-ens33
dirname
选取文件目录
[root@localhost /backup.link]#dirname /etc/sysconfig/network-scripts/ifcfg-ens33
/etc/sysconfig/network-scripts
#当文件时变量是常用
cd
改变当前工作目录
cd - 回到前一工作目录
cd ~ 回到家目录(cd)
cd .. 切换到父目录
[root@localhost /backup.link]#cd
[root@localhost ~]#cd -
/backup.link
[root@localhost /backup.link]#cd ~
[root@localhost ~]#cd -
/backup.link
[root@localhost /backup.link]#cd ..
[root@localhost /]#
ls
列出当前目录的内容或指定目录
ls -l 显示额外信息ll
ls -a 显示隐藏文件
ls -d 显示目录
ls -i 显示节点ll -i
[root@localhost /data]#ll
total 8
drwxr-xr-x 2 root root 16 Apr 22 21:44 backup
lrwxrwxrwx 1 root root 6 Apr 22 21:11 backup.link -> backup
-rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh
-rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh.link
drwxr-xr-x. 2 root root 59 Apr 12 05:02 shtest
[root@localhost /data]#ll -d
drwxr-xr-x. 4 root root 90 Apr 22 21:21 .
[root@localhost /data]#ll -i
total 8
70 drwxr-xr-x 2 root root 16 Apr 22 21:44 backup
68 lrwxrwxrwx 1 root root 6 Apr 22 21:11 backup.link -> backup
69 -rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh
69 -rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh.link
67 drwxr-xr-x. 2 root root 59 Apr 12 05:02 shtest
[root@localhost /data]#ll -a
total 12
drwxr-xr-x. 4 root root 90 Apr 22 21:21 .
dr-xr-xr-x. 20 root root 4096 Apr 22 21:13 ..
drwxr-xr-x 2 root root 16 Apr 22 21:44 backup
lrwxrwxrwx 1 root root 6 Apr 22 21:11 backup.link -> backup
-rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh
-rw-r--r--. 2 root root 2618 Apr 12 02:57 reset.sh.link
drwxr-xr-x. 2 root root 59 Apr 12 05:02 shtest
touch
创建新文件
stat
显示文件的所有信息
cp
复制文件
目标不存在 | 目标存在是目录 | 目标存在是文件 | |
---|---|---|---|
一个文件 | 创建一个一样的新文件 | 目录中创建新文件,若已有则覆盖 | 覆盖 |
多个文件 | 报错 | 目录下创建新文件 | 报错 |
目录 | 创建目录 | 改目录下创建新目录 | 报错 |
cp -av 备份文件显示过程
cp -avb 目标存在,覆盖前先备份,形式为file~
[root@localhost /data]#cp -av /etc /data
[root@localhost /data]#ls
backup backup.link etc reset.sh reset.sh.link shtest
[root@localhost /data]#ls shtest/
backup.sh disk.sh reset.sh systeminfo.sh
[root@localhost /data]#cp -avb reset.sh shtest/
cp: overwrite ‘shtest/reset.sh’? y
‘reset.sh’ -> ‘shtest/reset.sh’ (backup: ‘shtest/reset.sh~’)
[root@localhost /data]#ls shtest/
backup.sh disk.sh reset.sh reset.sh~ systeminfo.sh
mv
移动文件及重命名(文件存在)
-b 目标存在先备份
[root@localhost /data]#ls
backup backup.link etc reset.sh reset.sh.link shtest
[root@localhost /data]#mv reset.sh.link reset.sh.l #重命名
[root@localhost /data]#ls
backup backup.link etc reset.sh reset.sh.l shtest
rename
批量改名
rm
rm -rf 删除文件或目录
#Linux系统运行中的文件也可删除,此命令慎用,可用mv代替移除到特定文件夹,之后再删
#rm -rf /* rm -rf /data /* 删库跑路
tree
显示目录树
-d 显示目录
-L 显示层级
mkdir
创建目录
-pv 创建多层目录,显示过程
rmdir
删除空目录
通配符
用于文件名,注意与正则表达式区分
符号 | 涵义 |
---|---|
* | 零个或多个字符 |
? | 一个字符 |
~ | 当前用户家目录 |
[0-9] | 匹配数字 |
[a-z] | aAbB…z字母(不包括Z) |
[A-Z] | AbB…Z字母(不包括a) |
[wang] | 列表中的任何一个字符 |
[^wang] | 列表中所有字符意外的字符 |
[:digit:] | 数字 |
[:lower:] | 小写字母 |
[:upper:] | 大写字母 |
[:alpha:] | 大小写字母 |
[:alnum:] | 大小写字母+数字 |
[:space:] | 水平或垂直空白字符 |
vim使用
搜索替换
复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符
vim支持一般正则表达式
[root@localhost /data]#cp /etc/profile .
[root@localhost /data]#cat profile
# /etc/profile
pathmunge () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
esac
[root@localhost /data]#vim profile #扩展命令下输入
:%s#^[[:space:]]\+\(.*\)$#\1#
[root@localhost /data]#cat profile
# /etc/profile
pathmunge () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
esac
}
设置tab缩进为4个字符
在/etc/vimrc中设置set tabstop=4