震惊君的Linux之旅 ------ Linux基础(下)

本文深入讲解Linux文件系统,包括系统目录命名规则、文件元数据、软链接与硬链接区别、常用文件管理命令,以及时间戳修改等实践案例。

开场白~

Linux 学习的第二周,一个拖延症晚期患者的自我鞭策:完成比完美更重要,在互联网领域十年磨一剑往往会把剑磨残。。。

一、Linux 发行版的系统目录命名规则及其用途

通过 tree 命令我们可以看到根下各个系统目录名称的树形结构

[root@Centos7 ~] # tree -L 1 /
/
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var

/bin:普通用户可用命令,即使文件系统未被挂载也可使用的

/boot:开机设置文件;内核文件也在其中

/dev:设备文件

/etc:系统配置文件

/home:普通用户家目录

/lib:库文件和模块

/lib64:x86_64库文件

/media:用于挂载本地磁盘和其他存储设备

/mnt:用于挂载其他临时文件

/opt:发行版附加的第三方软件安装包

/proc:cpu映射的虚拟文件系统

/root:root用户家目录

/run:系统启动的守护进程

/sbin:只有root用户可用的命令

/srv:服务进程所需的数据文件

/sys:硬件设备映射的虚拟文件系统

/tmp:临时文件

/usr:大部分用户工具和应用程序

/var:存放可变化文件,日志、脱机文件,临时电子邮件文件

二、文件的元数据信息及含义

我们先随便创建一个文件 f1,并添加文本内容

[root@Centos7 ~] # vim /data/f1
[root@Centos7 ~] # cat /data/f1
hello world!

stat 命令查看改文件的元数据信息

[root@Centos7 ~] # stat /data/f1
File: ‘/data/f1’
Size: 13 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 69 Links: 1
Access: (0644/-rw-r–r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-04-21 21:51:14.045736588 +0800
Modify: 2020-04-21 21:50:37.032738700 +0800
Change: 2020-04-21 21:50:37.032738700 +0800
Birth: -

File:文件名

Size:文件大小

Blocks:占用块数量

IO Block:块大小

regular file:文件类型,此处为普通文件

Device:设备

Inode:节点号

Links:链接数

Access:所有者权限

Uid:用户id

Gid:用户组id

Access:文件读时间,即访问时间

Modify:文件修改时间

Change:文件属性修改时间

通过 stat -f 查看文件所在文件系统的信息

[root@Centos7 ~] # stat -f /data/f1
File: “/data/f1”
ID: 80300000000 Namelen: 255 Type: xfs
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 13100800 Free: 13092533 Available: 13092533
Inodes: Total: 26214400 Free: 26214393

三、软链接和硬链接的区别

硬链接软链接
本质同一文件不同名字不同文件
Inode相同不同
跨设备x
跨分区x
创建目录x
相互关系没关系 只加减链接数依赖关系
链接数会增加不会增长
路径相对于当前工作目录相对于软链接目录
文件类型与原文件一致“l” 软链接文件

-硬链接 -
我们在 /data下创建一个 f1文件ff文件夹

[root@Centos7 ~] # touch /data/f1
[root@Centos7 ~] # mkdir /data/ff

创建一个硬链接,发现报错,原因是硬链接无法跨设备

[root@Centos7 ~] # ln /data/f1 f1.link
ln: failed to create hard link ‘f1.link’ => ‘/data/f1’: Invalid cross-device link

ff文件夹创建一个硬链接也报错,原因是文件夹不适用

[root@Centos7 data] #l n ff ff.link
ln: ‘ff’: hard link not allowed for directory

这次可以了,硬链接需要同一分区同一设备

[root@Centos7 ~] # ln /data/f1 /data/f1.link
[root@Centos7 ~] # ls -l /data
total 0
我们可以看到此时链接数为2
-rw-r–r-- 2 root root 0 Apr 26 12:47 f1
-rw-r–r-- 2 root root 0 Apr 26 12:47 f1.link

-软连接 -
在 /data 目录下创建 f2文件d1/d2文件夹

[root@Centos7 data] # touch f2
[root@Centos7 data] # mkdir -p d1/d2

在文件夹 d2下创建 f2的软连接,出现错误找不到原文件 f2

[root@Centos7 data] # ln -s f2 d1/d2/f2.link
[root@Centos7 data] # ll d1/d2/
total 0
lrwxrwxrwx 1 root root 2 Apr 26 13:30 f2.link -> f2 显示为红色高亮闪烁

原因为 f2的路径不应相对于原始路径,而应该相对于软链接的路径

[root@Centos7 data] # ln -s …/…/f2 d1/d2/f2.link
[root@Centos7 data] # ll d1/d2
total 0
lrwxrwxrwx 1 root root 8 Apr 26 13:35 f2.link -> …/…/f2

四、Linux 上常用的文件管理类命令

常见的文件管理命令 ls, cd 可见上一篇博客
touch 命令下文可见


basename 路径下的文件名
dirname 文件的路径

[root@Centos7 ~] # basename /data/d1/d2/ff1
ff1
[root@Centos7 ~] # dirname /data/d1/d2/ff1
/data/d1/d2

cp 复制文件和目录,一般无法保留所有信息(所有者,组,修改时间等)

1)复制 单个文件
[root@Centos7 ~] # cp /data/f1 /data/d1/f1.bak
[root@Centos7 ~] # ls /data/d1
f1.bak
2)复制 多个文件 至文件夹
[root@Centos7 ~] # cp /data/f1 /data/f3 /data/d1/d2/
[root@Centos7 ~] # ls /data/d1/d2
f1 f3
3)复制 文件夹
[root@Centos7 ~] # cp -r /data/dd /data/d1/d2
[root@Centos7 ~] # ls /data/d1/d2
dd f1 f3

-a 保留所有权限,一般用于备份(可见时间点保留)

[root@Centos7 data] # ll f2
-rw-r–r-- 1 root root 0 Apr 26 15:21 f2
[root@Centos7 data] # cp -a f2 /data1
[root@Centos7 data] # ll /data1
total 0
-rw-r–r-- 1 root root 0 Apr 26 15:21 f2
-rw-r–r-- 1 root root 0 Apr 26 15:52 f3

-v 显示拷贝过程
-f 强制拷贝
-backup=numbered 目标存在的情况下,覆盖前会先备份并加数字后缀


mv 移动或重命名(工作中一般用于代替 rm)
-f 强制
-v 显示过程
常用语单个文件重命名,多个文件用 rename

[root@Centos7 data] # ll /data
total 0
-rw-r–r-- 1 root root 0 Apr 26 15:39 w1
-rw-r–r-- 1 root root 0 Apr 26 15:21 w2
-rw-r–r-- 1 root root 0 Apr 26 15:42 w3
[root@Centos7 data] # rename w log w*
total 0
-rw-r–r-- 1 root root 0 Apr 26 16:30 log1
-rw-r–r-- 1 root root 0 Apr 26 16:30 log2
-rw-r–r-- 1 root root 0 Apr 26 16:30 log3


rm 删除
-r 递归
-f 强制
rm -rf /* 删库跑路 XD
rm -rf / 会提示错误,无法执行,加–no-persece-root 强制删除


mkdir 创建文件夹
-p 递归
-v 显示过程

[root@Centos7 data] # mkdir -p /data/d1/d2
[root@Centos7 data] # ll -R /data
/data
drwxr-xr-x 3 root root 16 Apr 26 16:38 d1
/data/d1
drwxr-xr-x 2 root root 6 Apr 26 16:38 d2

五、实验操作

1. 案例:修改文件的时间戳信息

默认情况下,通过 ll 查看的是文件的修改时间,即 stat 中显示的 Modify时间

[root@Centos7 data]# ll
total 0
-rw-r–r-- 1 root root 0 Apr 26 13:26 f2

Access:读时间
Modify:修改时间
change:属性修改时间

[root@Centos7 data]#stat f2
File: ‘f2’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 67 Links: 1
Access: (0644/-rw-r–r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-04-26 13:26:25.613823685 +0800
Modify: 2020-04-26 13:26:25.613823685 +0800
Change: 2020-04-26 13:26:25.613823685 +0800
Birth: -

我们通过 touch f2来修改时间戳,发现3个时间都被刷新了

[root@Centos7 data] # ll f2
-rw-r–r-- 1 root root 14 Apr 26 14:49 f2
[root@Centos7 data] # touch f2
注意,文件内容并不清空
[root@Centos7 data] # ll f2
-rw-r–r-- 1 root root 14 Apr 26 15:00 f2
[root@Centos7 data] # stat f2
File: ‘f2’
Size: 14 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 69 Links: 1
Access: (0644/-rw-r–r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-04-26 15:00:59.740504884 +0800
Modify: 2020-04-26 15:00:59.740504884 +0800
Change: 2020-04-26 15:00:59.740504884 +0800

只改读时间Access(属性会一起变动)

[root@Centos7 data] # touch --time=atime f2
[root@Centos7 data] # ll f2
-rw-r–r-- 1 root root 14 Apr 26 15:02 f2
[root@Centos7 data] # stat f2
File: ‘f2’
Size: 14 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 69 Links: 1
Access: (0644/-rw-r–r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-04-26 15:08:06.235480921 +0800
Modify: 2020-04-26 15:02:28.998499869 +0800
Change: 2020-04-26 15:08:06.235480921 +0800
Birth: -

只改修改时间Modify(属性会一起变动)

[root@Centos7 data] # touch --time=mtime f2
[root@Centos7 data] # ll f2
-rw-r–r-- 1 root root 14 Apr 26 15:12 f2
[root@Centos7 data] # stat f2
File: ‘f2’
Size: 14 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 69 Links: 1
Access: (0644/-rw-r–r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-04-26 15:08:06.235480921 +0800
Modify: 2020-04-26 15:12:53.969464755 +0800
Change: 2020-04-26 15:12:53.969464755 +0800

Birth: -

2. 案例:复制 /etc/profile至 /tmp/目录,用查找替代命令删除 /tmp/profile文件夹中的 行首的空白字符

  1. 通过 vim /tmp/profile.1 创建一个新的空白文件
  2. 在 ex模式下,r /etc/profile 读取 /etc下profile 的内容
  3. ex 模式下 %s/^\s+//g,将空白行首的空格去除
  4. :wq 保存退出

3. 案例:在 vim中设置 tab缩进为4个字符

  1. 在家目录下 vim .vimrc 打开 vim配置文件
  2. 添加 set tabstop=4
  3. :wq 保存退出
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值