运维开发网

Linux 文件管理(完成优先于完美)

运维开发网 https://www.qedev.com 2020-10-18 12:24 出处:51CTO 作者:N49038
Linux 文件管理

1、描述 Linux 发行版的系统目录名称命名规则以及用途。

文件和目录被组织成一个单根倒置树结构

文件系统从根目录下开始,用“/”表示

路径分隔的 /

文件名最长 255 个字节

包括路径在内文件名称最长 4095 个字节

除了斜杠和 NUL,所有字符都有效。但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用

/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 程序的头文件(header files)

share:结构化独立的数据,例如 doc、man 等

local:第三方应选用程序的安装位置

bin,sbin,lib,lib64,etc,share

/var:variable data files

cache:应用程序缓存数据目录

lib:应用程序状态信息数据

local:专用于为 /usr/loacl 下的应用程序存储可变数据

lock:锁文件

log:日志目录及文件

opt:专用于为 /opt 下的应用程序存储可变数据

run:运行中的进程相关数据,通常用于存储进程 pid 文件

spool:应用程序数据池

tmp:保存系统两次重启之间产生的临时数据

/proc:用于输出内核与进程信息相关的虚拟文件系统

/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统

/seLinux:security enhanced Linux,seLinux 相关的安全策略等信息的存放位置

2、描述文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息?

inode number 节点号、文件类型、权限、UID、GID、链接数(指向这个文件名路径名称个数)、改文件的大小和不同的时间戳、指向磁盘上文件的数据块指针、有关文件的其他数据

[[email protected] ~]# stat /tmp/test.txt

File: /tmp/test.txt

Size: 0 Blocks: 0 IO Block: 4096 regular empty file

Device: 802h/2050d Inode: 1403409 Links: 1

Access: (0644/-rw-r--r--) Uid: ( 1000/ wang) Gid: ( 0/ root)

Context: unconfined_u:object_r:user_tmp_t:s0

Access: 2020-10-06 18:51:36.000631508 +0800

Modify: 2020-10-06 18:48:36.833631914 +0800

Change: 2020-10-06 18:48:36.833631914 +0800

Birth: -

touch [OPTION]... FILE...

-a 仅改变 atime 和 ctime

-m 仅改变 mtime 和 ctime

-t [[CC]YY]MMDDhhmm[.ss] 指定 atime 和 mtime 的时间戳

-c 如果文件不存在,则不予创建

3、总结软链接和硬链接区别,并用实例操作说明。

硬链接本质是同一个文件

软链接本质是不同一个文件

硬链接不支持文件夹

软链接:原始文件的相对路径是相对于链接文件的相对路径

[[email protected] data]# ll

total 0

-rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt

drwxr-xr-x. 2 root root 6 Oct 7 19:44 zhl

[[email protected] data]# ln file.txt zhl/file.txt

[[email protected] data]# ll file.txt zhl/file.txt

-rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt(链接数变为 2)

-rw-r--r--. 2 root root 0 Oct 7 15:34 zhl/file.txt

[[email protected] data]# ll -i file.txt zhl/file.txt

132 -rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt

132 -rw-r--r--. 2 root root 0 Oct 7 15:34 zhl/file.txt

[[email protected] data]# rm file.txt

rm: remove regular empty file 'file.txt'? y

[[email protected] data]# ll -i file.txt zhl/file.txt

ls: cannot access 'file.txt': No such file or directory

132 -rw-r--r--. 1 root root 0 Oct 7 15:34 zhl/file.txt(文件还可以访问,链接数减1,不依赖于原文件。删文件,是指删名)

硬链接不能跨文件系统(分区),本质是给一个文件起多个名。跨了分区,节点号有可能冲突

不允许给文件夹创建硬链接,避免存在嵌套的问题(文件夹套子文件,子文件又套自身,形成死循环)

[[email protected] zhl]# ln -s file.txt f1.txt

[[email protected] zhl]# ll -i

total 0

134 lrwxrwxrwx. 1 root root 8 Oct 8 17:50 f1.txt -> file.txt

132 -rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt

[[email protected] zhl]# ln -s file.txt f2.txt

[[email protected] zhl]# ll -i

total 0

134 lrwxrwxrwx. 1 root root 8 Oct 8 17:50 f1.txt -> file.txt(大小是链接的信息内容,8 个字符数)

135 lrwxrwxrwx. 1 root root 8 Oct 8 17:52 f2.txt -> file.txt

132 -rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt(文件链接数没变,节点号不一样,是不同的文件。删除文件,链接作废)

[email protected] data]# ln -s f1.txt dir1/f1.txt.link(此处绕,它认为 f1.txt.link 和 f1.txt 在同一个目录里,现实却不是。此时 f1.txt 的相对路径应该是相对于软链接 dir1/f1.txt.link 的相对路径,而不是相对于 data 的。正确的应该是ln -s ../f1.txt dir1/f1.txt.link 。看这个“/data/dir1/f1.txt.link -> /data/f1.txt”,它是从前往后去找到你,所以你不能是相对的)

[[email protected] data]# ll -i !*

ll -i -s f1.txt dir1/f1.txt.link

33555841 0 lrwxrwxrwx. 1 root root 6 Oct 8 18:07 dir1/f1.txt.link -> f1.txt(此时系统提示 f1.txt 不存在,闪亮。)

132 0 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt

[[email protected] data]# mkdir mysql5.6.10

[[email protected] data]# ln -s mysql5.6.10/ mysql

[[email protected] data]# ll -i

total 0

33555840 drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1

132 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt

133 lrwxrwxrwx. 1 root root 12 Oct 8 18:22 mysql -> mysql5.6.10/

67161792 drwxr-xr-x. 2 root root 6 Oct 8 18:21 mysql5.6.10

[[email protected] data]# rm -f mysql

[[email protected] data]# mkdir mysql5.6.11

[[email protected] data]# ln -s mysql5.6.11/ mysql

[[email protected] data]# ll -i

total 0

33555840 drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1

132 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt

133 lrwxrwxrwx. 1 root root 12 Oct 8 18:23 mysql -> mysql5.6.11/(软件升级的方式)

67161792 drwxr-xr-x. 2 root root 6 Oct 8 18:21 mysql5.6.10

100664640 drwxr-xr-x. 2 root root 6 Oct 8 18:22 mysql5.6.11

[[email protected] data]# rm -rf mysql/(多 / 会删文件,没有 / 只是删软链接。多 / 代表进入了,场景变了)(基础不牢,地动山摇。弄清楚区别)

[[email protected] data]# ll

total 0

drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1(天生就是 2,. 用的与其相同的节点编号。能不能变成 3 呢?可以,建个子目录,子目录的..就是它了,所以可以是 3。以此类推)

4、Linux 上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。

pwd

cd

-P:切换至物理路径

echo $PWD

echo $OLDPWD

ls

-a

-l

-R:目录递归

-ld:目录、符号链接

-1

-S:大到小

-t:mtime

-u:配合 -t,atime

-U

-X

/etc/DIR_COLORS

LS_COLORS

[[email protected] ~]# ls /boot

System.map-4.18.0-147.el8.x86_64 initramfs-4.18.0-147.el8.x86_64.img

config-4.18.0-147.el8.x86_64 loader

efi lost+found

grub2 vmlinuz-0-rescue-7650fa24cc7e4d12acb58cba4449720f

initramfs-0-rescue-7650fa24cc7e4d12acb58cba4449720f.img vmlinuz-4.18.0-147.el8.x86_64

[[email protected] ~]# ls -R /boot

[[email protected] ~]# ls -ld /boot

dr-xr-xr-x. 6 root root 4096 Oct 1 19:46 /boot

mtime(modify) ctime(change) atime(access)

[[email protected] ~]# ll /tmp/test.txt

-rw-r--r--. 1 root root 5 Oct 3 16:01 /tmp/test.txt

[[email protected] ~]# ll --time=ctime /tmp/test.txt

-rw-r--r--. 1 root root 5 Oct 3 16:01 /tmp/test.txt

[[email protected] ~]# ll --time=atime /tmp/test.txt

-rw-r--r--. 1 root root 5 Oct 3 16:02 /tmp/test.txt

[[email protected] ~]# chown wang /tmp/test.txt

[[email protected] ~]# ll /tmp/test.txt

-rw-r--r--. 1 wang root 5 Oct 3 16:01 /tmp/test.txt

[[email protected] ~]# ll --time=ctime /tmp/test.txt

-rw-r--r--. 1 wang root 5 Oct 6 18:47 /tmp/test.txt

[[email protected] ~]# ll --time=atime /tmp/test.txt

-rw-r--r--. 1 wang root 5 Oct 3 16:02 /tmp/test.txt

[[email protected] ~]# > /tmp/test.txt

[[email protected] ~]# ll /tmp/test.txt

-rw-r--r--. 1 wang root 0 Oct 6 18:48 /tmp/test.txt

[[email protected] ~]# ll --time=ctime /tmp/test.txt

-rw-r--r--. 1 wang root 0 Oct 6 18:48 /tmp/test.txt

[[email protected] ~]# ll --time=atime /tmp/test.txt

-rw-r--r--. 1 wang root 0 Oct 3 16:02 /tmp/test.txt

[[email protected] ~]# cat /tmp/test.txt

[[email protected] ~]# ll --time=atime /tmp/test.txt

-rw-r--r--. 1 wang root 0 Oct 6 18:51 /tmp/test.txt

stat

[[email protected] ~]# stat /tmp/test.txt

File: /tmp/test.txt

Size: 0 Blocks: 0 IO Block: 4096 regular empty file

Device: 802h/2050d Inode: 1403409 Links: 1

Access: (0644/-rw-r--r--) Uid: ( 1000/ wang) Gid: ( 0/ root)

Context: unconfined_u:object_r:user_tmp_t:s0

Access: 2020-10-06 18:51:36.000631508 +0800

Modify: 2020-10-06 18:48:36.833631914 +0800

Change: 2020-10-06 18:48:36.833631914 +0800

Birth: -

file

magic number

[[email protected] ~]# file /etc

/etc: directory

[[email protected] ~]# file /boot/vmlinuz-4.18.0-147.el8.x86_64

/boot/vmlinuz-4.18.0-147.el8.x86_64: Linux kernel x86 boot executable bzImage, version 4.18.0-147.el8.x86_64 ([email protected]) #1 SMP Wed Dec 4 21:51:45 UTC 2019, RO-rootFS, swap_dev 0x7, Normal VGA

[[email protected] ~]# which file

/usr/bin/file

[[email protected] ~]# file /usr/bin/file

/usr/bin/file: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-Linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=1aaef7e4e7e253a9191d2e7e43d5e7dd8c8ab1e8, stripped

[[email protected] ~]# file /dev/zero

/dev/zero: character special (1/5)

[[email protected] ~]# file /dev/sda

/dev/sda: block special (8/0)

[[email protected] ~]# file /run/autofs.fifo-net

/run/autofs.fifo-net: fifo (named pipe)

[[email protected] ~]# hexdump -C /tmp/test.txt(区分 Linux、Windows 文件)

Linux 回车换行(继承 Unix,存储节约空间,没了回车字符)

Windows 写的文件,在 Linux 中有回车也有换行

[[email protected] ~]# dnf -y install dos2unix

Last metadata expiration check: 0:01:09 ago on Tue 06 Oct 2020 10:47:47 PM CST.

Package dos2unix-7.4.0-3.el8.x86_64 is already installed.

Dependencies resolved.

Nothing to do.

Complete!

[[email protected] ~]# dos2unix win.txt

[[email protected] ~]# file win.txt

[[email protected] ~]# hexdump -C win.txt

[[email protected] ~]# unix2dos Linux.txt

早期 Windows 用的 ANSI 字符集,不是 UTF-8,传到 Linux 中查看不了,编码机制不一样,Linux 用的 UTF-8。

解决办法,在 Windows 上把文件另存为 Unicode,然后传入 Linux 可查看,大小比 ANSI 的大。

[[email protected] ~]# iconv -l

[[email protected] ~]# file windows.txt

[[email protected] ~]# iconv -f gb2312 windows.txt -o windows1.txt

[[email protected] ~]# iconv -f utf8 -t gb2312 windows1.txt -o windows11.txt(转换编码机制)

touch

-a

-m

-t

-c

[[email protected] ~]# ll /etc/issue

-rw-r--r--. 1 root root 23 Jan 2 2020 /etc/issue

[[email protected] ~]# touch /etc/issue

[[email protected] ~]# stat /etc/issue

File: /etc/issue

Size: 23 Blocks: 8 IO Block: 4096 regular file

Device: 802h/2050d Inode: 134341451 Links: 1

Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)

Context: system_u:object_r:etc_t:s0

Access: 2020-10-07 09:23:55.889008789 +0800

Modify: 2020-10-07 09:23:55.889008789 +0800

Change: 2020-10-07 09:23:55.889008789 +0800

Birth: -

cp

-i

-n

-r,-R

-d

cp -p(保留权限、所有者、时间戳)

cp -r

拷贝的快捷方式,目标是文件

cp -d不复制原文件,只复制链接名

cp -a(常用于备份,保留所有内容,包含r)

cp -av(v 显示进程)

cp -f(普通用户在自己家里,可以删除 root 的文件,此处跟权限有关。先删后拷。if an existing destination file cannot be opened, remove it and try again (this option is ignored when the -n option is also used))

cp -u(防止覆盖新文件)

cp -b

cp -a(普通用户拷贝别人的文件时,属性是自己,没有保留别人,这是合乎逻辑的)

[[email protected] data]# cp /etc/issue ./issue.bak

[[email protected] data]# ll !*

ll /etc/issue ./issue.bak

-rw-r--r--. 1 root root 23 Oct 7 09:23 /etc/issue

-rw-r--r--. 1 root root 23 Oct 7 10:07 ./issue.bak

[[email protected] data]# cat /etc/issue

\S

Kernel \r on an \m

[[email protected] data]# cat issue.bak

\S

Kernel \r on an \m

[[email protected] data]# alias cp(root cp 是别名,别的用户不是)

alias cp='cp -i'

[[email protected] data]# cp --backup=numbered /etc/passwd f1.txt

[[email protected] data]# ll

total 4

-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt

[[email protected] data]# cp --backup=numbered /etc/passwd f1.txt

cp: overwrite 'f1.txt'? y

[[email protected] data]# ll

total 8

-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt

-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt.~1~

[[email protected] data]# cp --backup=numbered /etc/passwd f1.txt(先用过 --backup 后,-b 就用这种模式了)

cp: overwrite 'f1.txt'? y

[[email protected] data]# ll

total 12

-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt

-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt.~1~

-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt.~2~

[[email protected] data]# cp -r /etc/ /data/etcbackup

[[email protected] data]# ll

total 12

drwxr-xr-x. 136 root root 8192 Oct 7 10:48 etcbackup

[[email protected] data]# cp -r /etc/ /data/etcbackup

[[email protected] data]# ll

total 12

drwxr-xr-x. 137 root root 8192 Oct 7 10:48 etcbackup

[[email protected] data]# ls -d ./etcbackup/etc

./etcbackup/etc

[[email protected] data]# cp -r /etc/ /data/etcbackup

cp: overwrite '/data/etcbackup/etc/xdg/menus/applications.menu'? y

[[email protected] data]# ll /dev/zero

crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 /dev/zero

[[email protected] data]# cp /dev/zero zero.bak

^C

[[email protected] data]# ll !

ll /dev/zero zero.bak

crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 /dev/zero

-rw-r--r--. 1 root root 415825920 Oct 7 11:05 zero.bak

[[email protected] data]# ll -h

total 397M

-rw-r--r--. 1 root root 397M Oct 7 11:05 zero.bak

[[email protected] data]# hexdump -C zero.bak

00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

18c90000

[[email protected] data]# rm -f zero.bak

[[email protected] data]# cp -a /dev/zero zero.bak

[[email protected] data]# ll

total 0

crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 zero.bak

[[email protected] data]# cp -p /dev/zero zero.bak2

^C

[[email protected] data]# ll

total 527800

crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 zero.bak

-rw-------. 1 root root 540467200 Oct 7 11:07 zero.bak2

mv

-i

-f

-b

[[email protected] ~]# alias mv(root 下也是别名)

alias mv='mv -i'

[[email protected] data]# touch file{1..10}.conf

[[email protected] data]# ll

total 0

-rw-r--r--. 1 root root 0 Oct 7 12:31 file10.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file1.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file2.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file3.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file4.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file5.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file6.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file7.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file8.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file9.conf

[[email protected] data]# rename conf conf.bak

[[email protected] data]# ll

total 0

-rw-r--r--. 1 root root 0 Oct 7 12:31 file10.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file1.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file2.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file3.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file4.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file5.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file6.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file7.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file8.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file9.conf.bak

[[email protected] data]# rename .bak ''

[[email protected] data]# ll

total 0

-rw-r--r--. 1 root root 0 Oct 7 12:31 file10.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file1.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file2.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file3.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file4.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file5.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file6.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file7.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file8.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file9.conf

rm

[[email protected] data]# alias rm

alias rm='rm -i'

[[email protected] data]# rm file2.conf

rm: remove regular empty file 'file2.conf'? y

[[email protected] data]# \rm file3.conf

[[email protected] data]# rm -f file4.conf

[[email protected] data]# ls -a

. .. file10.conf file1.conf file5.conf file6.conf file7.conf file8.conf file9.conf .txt

[[email protected] data]# rm -rf *

[[email protected] data]# ls -a

. .. .txt

[[email protected] data]# cp -av . /opt/

思考:将 rm 定义成 mv 的别名,实现 rm file = mv file /tmp

tree

-d

-L

-P

[[email protected] ~]# tree

.

├── anaconda-ks.cfg

├── Desktop

├── Documents

├── Downloads

├── initial-setup-ks.cfg

├── Music

├── Pictures

├── Public

├── Templates

└── Videos

8 directories, 2 files

[[email protected] ~]# tree -d /etc/sysconfig/

/etc/sysconfig/

├── cbq

├── console

├── modules

├── network-scripts

└── rhn

├── allowed-actions

│ ├── configfiles

│ └── script

└── clientCaps.d

9 directories

mkdir

mkdir -p

rmdir

ln

[[email protected] data]# ll

total 0

-rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt

drwxr-xr-x. 2 root root 6 Oct 7 19:44 zhl

[[email protected] data]# ln file.txt zhl/file.txt

[[email protected] data]# ll

total 0

-rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt

drwxr-xr-x. 2 root root 22 Oct 7 19:44 zhl

[[email protected] data]# ll file.txt zhl/file.txt

-rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt(链接数变为 2)

-rw-r--r--. 2 root root 0 Oct 7 15:34 zhl/file.txt

[[email protected] data]# ll -i file.txt zhl/file.txt

132 -rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt

132 -rw-r--r--. 2 root root 0 Oct 7 15:34 zhl/file.txt

[[email protected] data]# rm file.txt

rm: remove regular empty file 'file.txt'? y

[[email protected] data]# ll -i file.txt zhl/file.txt

ls: cannot access 'file.txt': No such file or directory

132 -rw-r--r--. 1 root root 0 Oct 7 15:34 zhl/file.txt(文件还可以访问,链接数减 1,不依赖于原文件。删文件,是指删名)

硬链接不能跨文件系统(分区),本质是给一个文件起多个名。跨了分区,节点号有可能冲突

不允许给文件夹创建硬链接,避免存在嵌套的问题(文件夹套子文件,子文件又套自身,形成死循环)

[[email protected] zhl]# ln -s file.txt f1.txt

[[email protected] zhl]# ll -i

total 0

134 lrwxrwxrwx. 1 root root 8 Oct 8 17:50 f1.txt -> file.txt()

132 -rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt

[[email protected] zhl]# ln -s file.txt f2.txt

[[email protected] zhl]# ll -i

total 0

134 lrwxrwxrwx. 1 root root 8 Oct 8 17:50 f1.txt -> file.txt(大小是链接的信息内容,8 个字符数)

135 lrwxrwxrwx. 1 root root 8 Oct 8 17:52 f2.txt -> file.txt

132 -rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt(文件链接数没变,节点号不一样,是不同的文件。删除文件,链接作废)

[[email protected] zhl]#

[email protected] data]# ln -s f1.txt dir1/f1.txt.link(此处绕,它认为 f1.txt.link 和 f1.txt 在同一个目录里,现实却不是。此时 f1.txt 的相对路径应该是相对于软链接 dir1/f1.txt.link 的相对路径,而不是相对于 data 的。正确的应该是 ln -s ../f1.txt dir1/f1.txt.link。看这个“/data/dir1/f1.txt.link -> /data/f1.txt”,它是从前往后去找到你,所以你不能是相对的)

[[email protected] data]# ll -i !*

ll -i -s f1.txt dir1/f1.txt.link

33555841 0 lrwxrwxrwx. 1 root root 6 Oct 8 18:07 dir1/f1.txt.link -> f1.txt(此时系统提示 f1.txt 不存在,闪亮。)

132 0 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt

[[email protected] data]# mkdir mysql5.6.10

[[email protected] data]# ln -s mysql5.6.10/ mysql

[[email protected] data]# ll -i

total 0

33555840 drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1

132 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt

133 lrwxrwxrwx. 1 root root 12 Oct 8 18:22 mysql -> mysql5.6.10/

67161792 drwxr-xr-x. 2 root root 6 Oct 8 18:21 mysql5.6.10

[[email protected] data]# rm -f mysql

[[email protected] data]# mkdir mysql5.6.11

[[email protected] data]# ln -s mysql5.6.11/ mysql

[[email protected] data]# ll -i

total 0

33555840 drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1

132 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt

133 lrwxrwxrwx. 1 root root 12 Oct 8 18:23 mysql -> mysql5.6.11/(软件升级的方式)

67161792 drwxr-xr-x. 2 root root 6 Oct 8 18:21 mysql5.6.10

100664640 drwxr-xr-x. 2 root root 6 Oct 8 18:22 mysql5.6.11

[[email protected] data]# rm -rf mysql/(多 / 会删文件,没有 / 只是删软链接。多 / 代表进入了,场景变了)(基础不牢,地动山摇。弄清楚区别)

5、复制 /etc/profile 至 /tmp/ 目录,用查找替换命令删除 /tmp/profile 文件中的行首的空白字符

[[email protected] ~]# cp /etc/profile /tmp/

[[email protected] ~]# vim /tmp/profile

:%[email protected]^[[:blank:]][email protected]@g

6、在 vim 中设置 tab 缩进为 4 个字符

:set tabstop=4

文件管理

内容概述

1 文件系统目录结构

bin 二进制文件

bin -> usr/bin

boot 启动内核

[[email protected] ~]# systemctl status autofs

Unit autofs.service could not be found.

[[email protected] ~]# yum -y install autofs

[[email protected] ~]# systemctl start autofs

[[email protected] ~]# systemctl status autofs

● autofs.service - Automounts filesystems on demand

Loaded: loaded (/usr/lib/systemd/system/autofs.service; disabled; vendor preset: disabled)

Active: active (running) since Tue 2020-10-06 15:49:17 CST; 7s ago

Main PID: 5181 (automount)

Tasks: 5 (limit: 12364)

Memory: 2.7M

CGroup: /system.slice/autofs.service

└─5181 /usr/sbin/automount --systemd-service --dont-check-daemon

Oct 06 15:49:17 centos8.magedu.org systemd[1]: Starting Automounts filesystems on demand...

Oct 06 15:49:17 centos8.magedu.org automount[5181]: setautomntent: lookup(sss): setautomntent: No such file or d>

Oct 06 15:49:17 centos8.magedu.org automount[5181]: setautomntent: lookup(sss): setautomntent: No such file or d>

Oct 06 15:49:17 centos8.magedu.org automount[5181]: setautomntent: lookup(sss): setautomntent: No such file or d>

Oct 06 15:49:17 centos8.magedu.org systemd[1]: Started Automounts filesystems on demand.

[[email protected] ~]# ll / | grep misc

drwxr-xr-x. 2 root root 0 Oct 6 15:49 misc

[[email protected] ~]# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sda 8:0 0 200G 0 disk

|-sda1 8:1 0 1G 0 part /boot

|-sda2 8:2 0 100G 0 part /

|-sda3 8:3 0 50G 0 part /data

|-sda4 8:4 0 1K 0 part

-sda5 8:5 0 4G 0 part [SWAP]<br/>sr0 11:0 1 7G 0 rom<br/>[[email protected] ~]# cd /misc/cd<br/>[[email protected] cd]# lsblk<br/>NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT<br/>sda 8:0 0 200G 0 disk<br/>|-sda1 8:1 0 1G 0 part /boot<br/>|-sda2 8:2 0 100G 0 part /<br/>|-sda3 8:3 0 50G 0 part /data<br/>|-sda4 8:4 0 1K 0 part<br/>-sda5 8:5 0 4G 0 part [SWAP]

sr0 11:0 1 7G 0 rom /misc/cd

[[email protected] cd]# systemctl enable autofs(使下次开机可以使用 autofs)

opt 第三方软件

proc 对应内存数据

run 正在用的程序文件

sbin 系统管理员用的可执行文件

var 可变数据,日志等

1.1 文件系统的目录结构

文件名称大小写敏感

文件名最长 255 个字节

包括路径在内文件名称最长 4095 个字节

文件色彩标识慢慢适应

不使用特殊字符来命名

ext4

[[email protected] ~]# ll /etc/DIR_COLORS

-rw-r--r--. 1 root root 4536 May 12 2019 /etc/DIR_COLORS

元数据 metadata:数据的属性

数据 data:数据本身,内容

1.2 常见的文件系统目录功能

/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader,grub)

/bin:所有用户使用的基本命令;不能关联至独立分区,OS 启动即用

/sbin:管理类的基本命令;不能关联至独立分区,OS 启动即用

/lib

/lib64

/etc:配置文件目录

/home/USERNAME

/root

/media

/mnt

/dev:b 随机访问、c 线性访问

/opt:第三方应用程序安装位置

/srv:系统运行的服务用的数据

/tmp

/usr:universal shared, read-only data

/var

/proc:内核与进程虚拟文件

/sys:硬件设备虚拟文件

/seLinux

1.3 应用程序的组成部分

二进制程序:bin、sbin

库文件:lib、lib64

配置文件:etc

帮助文件

1.4 CentOS 7 以后版本目录结构变化

[[email protected] ~]# ll /bin /sbin /lib /lib64

lrwxrwxrwx. 1 root root 7 May 11 2019 /bin -> usr/bin

lrwxrwxrwx. 1 root root 7 May 11 2019 /lib -> usr/lib

lrwxrwxrwx. 1 root root 9 May 11 2019 /lib64 -> usr/lib64

lrwxrwxrwx. 1 root root 8 May 11 2019 /sbin -> usr/sbin

1.5 Linux 下的文件类型

c 字符文件,逻辑设备文件,一个字符一个字符写,顺序写

b 块文件,以块的方式读写,有大小的容器,容量,例如磁盘,有缓存空间,随机写

p 管道文件,两个应用程序互联互通,单项传输(网络的单工)

l 链接文件

s 套接字文件,网络服务,双向的(双工)

[[email protected] ~]# ll /dev/zero

crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 /dev/zero

[[email protected] ~]# dd if=/dev/zero of=f2.txt bs=1 count=1(if=input file,of=output file)

2 文件操作命令

2.1 显示当前工作目录

所在目录 dirname

文件名 basename

[[email protected] ~]# type dirname

dirname is /usr/bin/dirname

[[email protected] ~]# type basename

basename is /usr/bin/basename

2.2 绝对和相对路径

相对路径名一般指相对于当前工作目录的路径。有个特殊场景,是相对于某目录的位置 ln

[[email protected] ~]# ls /boot/vmlinuz-4.18.0-147.el8.x86_64

/boot/vmlinuz-4.18.0-147.el8.x86_64

[[email protected] ~]# ll -h /boot/vmlinuz-4.18.0-147.el8.x86_64

-rwxr-xr-x. 1 root root 7.8M Dec 5 2019 /boot/vmlinuz-4.18.0-147.el8.x86_64

[[email protected] ~]# echo $OLDPWD

/root

2.3 更改目录

-P:切换至物理路径

echo $PWD

echo $OLDPWD

2.4 列出目录内容

-a

-l

-R:目录递归

-ld:目录、符号链接

-1

-S:大到小

-t:mtime

-u:配合 -t,atime

-U

-X

/etc/DIR_COLORS

LS_COLORS

[[email protected] ~]# ls /boot

System.map-4.18.0-147.el8.x86_64 initramfs-4.18.0-147.el8.x86_64.img

config-4.18.0-147.el8.x86_64 loader

efi lost+found

grub2 vmlinuz-0-rescue-7650fa24cc7e4d12acb58cba4449720f

initramfs-0-rescue-7650fa24cc7e4d12acb58cba4449720f.img vmlinuz-4.18.0-147.el8.x86_64

[[email protected] ~]# ls -R /boot

[[email protected] ~]# ls -ld /boot

dr-xr-xr-x. 6 root root 4096 Oct 1 19:46 /boot

mtime(modify) ctime(change) atime(access)

[[email protected] ~]# ll /tmp/test.txt

-rw-r--r--. 1 root root 5 Oct 3 16:01 /tmp/test.txt

[[email protected] ~]# ll --time=ctime /tmp/test.txt

-rw-r--r--. 1 root root 5 Oct 3 16:01 /tmp/test.txt

[[email protected] ~]# ll --time=atime /tmp/test.txt

-rw-r--r--. 1 root root 5 Oct 3 16:02 /tmp/test.txt

[[email protected] ~]# chown wang /tmp/test.txt

[[email protected] ~]# ll /tmp/test.txt

-rw-r--r--. 1 wang root 5 Oct 3 16:01 /tmp/test.txt

[[email protected] ~]# ll --time=ctime /tmp/test.txt

-rw-r--r--. 1 wang root 5 Oct 6 18:47 /tmp/test.txt

[[email protected] ~]# ll --time=atime /tmp/test.txt

-rw-r--r--. 1 wang root 5 Oct 3 16:02 /tmp/test.txt

[[email protected] ~]# > /tmp/test.txt

[[email protected] ~]# ll /tmp/test.txt

-rw-r--r--. 1 wang root 0 Oct 6 18:48 /tmp/test.txt

[[email protected] ~]# ll --time=ctime /tmp/test.txt

-rw-r--r--. 1 wang root 0 Oct 6 18:48 /tmp/test.txt

[[email protected] ~]# ll --time=atime /tmp/test.txt

-rw-r--r--. 1 wang root 0 Oct 3 16:02 /tmp/test.txt

[[email protected] ~]# cat /tmp/test.txt

[[email protected] ~]# ll --time=atime /tmp/test.txt

-rw-r--r--. 1 wang root 0 Oct 6 18:51 /tmp/test.txt

2.5 查看文件状态 stat

atime 读取文件内容

mtime 改变文件内容(数据)

ctime 元数据改变

[[email protected] ~]# stat /tmp/test.txt

File: /tmp/test.txt

Size: 0 Blocks: 0 IO Block: 4096 regular empty file

Device: 802h/2050d Inode: 1403409 Links: 1

Access: (0644/-rw-r--r--) Uid: ( 1000/ wang) Gid: ( 0/ root)

Context: unconfined_u:object_r:user_tmp_t:s0

Access: 2020-10-06 18:51:36.000631508 +0800

Modify: 2020-10-06 18:48:36.833631914 +0800

Change: 2020-10-06 18:48:36.833631914 +0800

Birth: -

2.6 确定文件内容

magic number

[[email protected] ~]# file /etc

/etc: directory

[[email protected] ~]# file /boot/vmlinuz-4.18.0-147.el8.x86_64

/boot/vmlinuz-4.18.0-147.el8.x86_64: Linux kernel x86 boot executable bzImage, version 4.18.0-147.el8.x86_64 ([email protected]) #1 SMP Wed Dec 4 21:51:45 UTC 2019, RO-rootFS, swap_dev 0x7, Normal VGA

[[email protected] ~]# which file

/usr/bin/file

[[email protected] ~]# file /usr/bin/file

/usr/bin/file: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-Linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=1aaef7e4e7e253a9191d2e7e43d5e7dd8c8ab1e8, stripped

[[email protected] ~]# file /dev/zero

/dev/zero: character special (1/5)

[[email protected] ~]# file /dev/sda

/dev/sda: block special (8/0)

[[email protected] ~]# file /run/autofs.fifo-net

/run/autofs.fifo-net: fifo (named pipe)

[[email protected] ~]# hexdump -C /tmp/test.txt(区分 Linux、Windows 文件)

Linux 回车换行(继承 Unix,存储节约空间,没了回车字符)

Windows 写的文件,在 Linux 中有回车也有换行

[[email protected] ~]# dnf -y install dos2unix

Last metadata expiration check: 0:01:09 ago on Tue 06 Oct 2020 10:47:47 PM CST.

Package dos2unix-7.4.0-3.el8.x86_64 is already installed.

Dependencies resolved.

Nothing to do.

Complete!

[[email protected] ~]# dos2unix win.txt

[[email protected] ~]# file win.txt

[[email protected] ~]# hexdump -C win.txt

[[email protected] ~]# unix2dos Linux.txt

早期 Windows 用的 ANSI 字符集,不是 UTF-8,传到 Linux 中查看不了,编码机制不一样,Linux 用的 UTF-8。

解决办法,在 Windows 上把文件另存为 Unicode,然后传入 Linux 可查看,大小比 ANSI 的大。

[[email protected] ~]# iconv -l

[[email protected] ~]# file windows.txt

[[email protected] ~]# iconv -f gb2312 windows.txt -o windows1.txt

[[email protected] ~]# iconv -f utf8 -t gb2312 windows1.txt -o windows11.txt(转换编码机制)

2.7 文件通配符模式 wildcard pattern

通配符采有特定的符号,表示特定的含义,此特符号称为元 meta 字符

  • 不匹配.开头的文件,即隐藏文件

    ? 匹配任何单个字符

    ~

    ~mage

    ~+或 .

    ~-

    [0-9]

    [a-z]是小大小大的次序写的,aA-z(没有 Z)

    [:digit:]

    [:lower:]

    [:upper:]

    [:alpha:]

    [:alnum:]

    [:blank:]

    [:space:]

    [:punct:]

    [:print:]

    [:cntrl:]

    [:graph:]

    [:xdigit:]

    [[email protected] data]# ls file[[:lower:]].txt([:lower:]代表 a-z,[[:lower:]]才等于[a-z],代表取一个)

    [wang]四取一

    [^wang]除 wang 四个意外的

    特列:( 不包含隐藏文件)

    [[email protected] data]# touch .txt

    [[email protected] data]# ls .txt

    ls: cannot access '.txt': No such file or directory

    [[email protected] data]# ls -a .txt

    ls: cannot access '.txt': No such file or directory

    [[email protected] data]# ls -a

    . .. .txt

    [[email protected] data]# ls

    ls: cannot access '': No such file or directory

    [[email protected] data]# rm -f (不包括删除隐藏文件)

    比较下

    [[email protected] data]# ls -a

    [[email protected] data]# ls -a

    [[email protected] ~]# ls -d .(列出目录本身的,不进去目录)

    . .bash_history .bash_profile .cache .cshrc .esd_auth .local .tcshrc

    .. .bash_logout .bashrc .config .dbus .ICEauthority .pki .Xauthority

    [[email protected] ~]# ls .*

    .bash_history .bash_logout .bash_profile .bashrc .cshrc .esd_auth .ICEauthority .tcshrc .Xauthority

.:

anaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Music Pictures Public Templates Videos

..:

bin data etc lib media mnt opt root sbin sys usr

boot dev home lib64 misc net proc run srv tmp var

.cache:

dconf gnome-shell libgweather

event-sound-cache.tdb.7650fa24cc7e4d12acb58cba4449720f.x86_64-redhat-Linux-gnu gnome-software tracker

evolution gstreamer-1.0 yelp

.config:

dconf gconf gnome-session gtk-3.0 pulse user-dirs.locale

evolution gnome-initial-setup-done goa-1.0 ibus user-dirs.dirs yelp

.dbus:

session-bus

.local:

share

.pki:

nssdb

[[email protected] ~]# l.

. .bash_history .bash_profile .cache .cshrc .esd_auth .local .tcshrc

.. .bash_logout .bashrc .config .dbus .ICEauthority .pki .Xauthority

[[email protected] ~]# ls -d .

. .bash_history .bash_profile .cache .cshrc .esd_auth .local .tcshrc

.. .bash_logout .bashrc .config .dbus .ICEauthority .pki .Xauthority

[[email protected] ~]# alias l.

alias l.='ls -d . --color=auto'

[[email protected] ~]# ls -A

anaconda-ks.cfg .bash_profile .config Desktop .esd_auth .local .pki Templates

.bash_history .bashrc .cshrc Documents .ICEauthority Music Public Videos

.bash_logout .cache .dbus Downloads initial-setup-ks.cfg Pictures .tcshrc .Xauthority

[[email protected] ~]# ls -d /(偏门小技巧,列文件夹待有 /)

Desktop/ Documents/ Downloads/ Music/ Pictures/ Public/ Templates/ Videos/

[[email protected] data]# touch file[[:upper:]].txt(touch 创建不支持通配符,你让它怎么建。只能查看是在现有情况下去匹配)

[[email protected] data]# ll

total 0

-rw-r--r--. 1 root root 0 Oct 7 09:16 'file[[:upper:]].txt'

[[email protected] data]# touch file.log

[[email protected] data]# ll

total 0

-rw-r--r--. 1 root root 0 Oct 7 09:17 'file*.log'(单引号去掉通配符功能)

-rw-r--r--. 1 root root 0 Oct 7 09:16 'file[[:upper:]].txt'

通配符是过滤现有文件的

2.8 创建空文件和刷新时间

-a

-m

-t

-c

[[email protected] ~]# ll /etc/issue

-rw-r--r--. 1 root root 23 Jan 2 2020 /etc/issue

[[email protected] ~]# touch /etc/issue

[[email protected] ~]# stat /etc/issue

File: /etc/issue

Size: 23 Blocks: 8 IO Block: 4096 regular file

Device: 802h/2050d Inode: 134341451 Links: 1

Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)

Context: system_u:object_r:etc_t:s0

Access: 2020-10-07 09:23:55.889008789 +0800

Modify: 2020-10-07 09:23:55.889008789 +0800

Change: 2020-10-07 09:23:55.889008789 +0800

Birth: -

2.9 复制文件和目录

-i

-n

-r,-R

-d

cp -p(保留权限、所有者、时间戳)

cp -r

拷贝的快捷方式,目标是文件

cp -d 不复制原文件,只复制链接名

cp -a(常用于备份,保留所有内容,包含 r)

cp -av(v 显示进程)

cp -f(普通用户在自己家里,可以删除 root 的文件,此处跟权限有关。先删后拷。if an existing destination file cannot be opened, remove it and try again (this option is ignored when the -n option is also used))

cp -u(防止覆盖新文件)

cp -b

cp -a(普通用户拷贝别人的文件时,属性是自己,没有保留别人,这是合乎逻辑的)

[[email protected] data]# cp /etc/issue ./issue.bak

[[email protected] data]# ll !*

ll /etc/issue ./issue.bak

-rw-r--r--. 1 root root 23 Oct 7 09:23 /etc/issue

-rw-r--r--. 1 root root 23 Oct 7 10:07 ./issue.bak

[[email protected] data]# cat /etc/issue

\S

Kernel \r on an \m

[[email protected] data]# cat issue.bak

\S

Kernel \r on an \m

[[email protected] data]# alias cp(root cp 是别名,别的用户不是)

alias cp='cp -i'

[[email protected] data]# cp --backup=numbered /etc/passwd f1.txt

[[email protected] data]# ll

total 4

-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt

[[email protected] data]# cp --backup=numbered /etc/passwd f1.txt

cp: overwrite 'f1.txt'? y

[[email protected] data]# ll

total 8

-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt

-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt.~1~

[[email protected] data]# cp --backup=numbered /etc/passwd f1.txt(先用过 --backup 后,-b 就用这种模式了)

cp: overwrite 'f1.txt'? y

[[email protected] data]# ll

total 12

-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt

-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt.~1~

-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt.~2~

[[email protected] data]# cp -r /etc/ /data/etcbackup

[[email protected] data]# ll

total 12

drwxr-xr-x. 136 root root 8192 Oct 7 10:48 etcbackup

[[email protected] data]# cp -r /etc/ /data/etcbackup

[[email protected] data]# ll

total 12

drwxr-xr-x. 137 root root 8192 Oct 7 10:48 etcbackup

[[email protected] data]# ls -d ./etcbackup/etc

./etcbackup/etc

[[email protected] data]# cp -r /etc/ /data/etcbackup

cp: overwrite '/data/etcbackup/etc/xdg/menus/applications.menu'? y

[[email protected] data]# ll /dev/zero

crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 /dev/zero

[[email protected] data]# cp /dev/zero zero.bak

^C

[[email protected] data]# ll !

ll /dev/zero zero.bak

crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 /dev/zero

-rw-r--r--. 1 root root 415825920 Oct 7 11:05 zero.bak

[[email protected] data]# ll -h

total 397M

-rw-r--r--. 1 root root 397M Oct 7 11:05 zero.bak

[[email protected] data]# hexdump -C zero.bak

00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

18c90000

[[email protected] data]# rm -f zero.bak

[[email protected] data]# cp -a /dev/zero zero.bak

[[email protected] data]# ll

total 0

crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 zero.bak

[[email protected] data]# cp -p /dev/zero zero.bak2

^C

[[email protected] data]# ll

total 527800

crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 zero.bak

-rw-------. 1 root root 540467200 Oct 7 11:07 zero.bak2

2.10 移动和重命名文件

同一分区快

不同分区慢

-i

-f

-b

[[email protected] ~]# alias mv(root 下也是别名)

alias mv='mv -i'

[[email protected] data]# touch file{1..10}.conf

[[email protected] data]# ll

total 0

-rw-r--r--. 1 root root 0 Oct 7 12:31 file10.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file1.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file2.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file3.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file4.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file5.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file6.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file7.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file8.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file9.conf

[[email protected] data]# rename conf conf.bak

[[email protected] data]# ll

total 0

-rw-r--r--. 1 root root 0 Oct 7 12:31 file10.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file1.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file2.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file3.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file4.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file5.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file6.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file7.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file8.conf.bak

-rw-r--r--. 1 root root 0 Oct 7 12:31 file9.conf.bak

[[email protected] data]# rename .bak ''

[[email protected] data]# ll

total 0

-rw-r--r--. 1 root root 0 Oct 7 12:31 file10.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file1.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file2.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file3.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file4.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file5.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file6.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file7.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file8.conf

-rw-r--r--. 1 root root 0 Oct 7 12:31 file9.conf

2.11 删除文件

shred

[[email protected] data]# alias rm

alias rm='rm -i'

[[email protected] data]# rm file2.conf

rm: remove regular empty file 'file2.conf'? y

[[email protected] data]# \rm file3.conf

[[email protected] data]# rm -f file4.conf

[[email protected] data]# ls -a

. .. file10.conf file1.conf file5.conf file6.conf file7.conf file8.conf file9.conf .txt

[[email protected] data]# rm -rf *

[[email protected] data]# ls -a

. .. .txt

[[email protected] data]# cp -av . /opt/

思考:将 rm 定义成 mv 的别名,实现 rm file = mv file /tmp

2.12 目录操作

2.12.1 显示目录树 tree

-d

-L

-P

[[email protected] ~]# tree

.

├── anaconda-ks.cfg

├── Desktop

├── Documents

├── Downloads

├── initial-setup-ks.cfg

├── Music

├── Pictures

├── Public

├── Templates

└── Videos

8 directories, 2 files

[[email protected] ~]# tree -d /etc/sysconfig/

/etc/sysconfig/

├── cbq

├── console

├── modules

├── network-scripts

└── rhn

├── allowed-actions

│ ├── configfiles

│ └── script

└── clientCaps.d

9 directories

2.12.2 创建目录 mkdir

mkdir -p

2.12.3 删除空目录 rmdir

3 文件元数据和节点表结构

文件的元数据存放在 node(index node)表中

链接数(指向这个文件名路径名称个数)

一般 iNode 表会占用文件系统磁盘空间的 1%

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

rm 和 inode:链接数递减,从而释放的 iNode 号可以被重用;把数据块放在空闲列表中;删除目录项;数据实际上不会马上被删除

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

指向磁盘上文件的数据块指针

直接指针 12 个,124K=48K

直接块指针

间接块指针:指向指针块,一个指针占 4 个字节,一个指针块放 1024 个指针,4K1024=4M

双重间接块指针:102410244K=4G

三重间接块指针:4T

目录:存放的文件列表和 iNode 对应关系

同一分区移动文件,文件的 iNode 号不变。移动到别的分区,文件 iNode 号变

每个分区的节点编号是唯一的

[[email protected] data]# stat file.txt

File: file.txt

Size: 0 Blocks: 0 IO Block: 4096 regular empty file

Device: 803h/2051d Inode: 132 Links: 1

Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)

Context: unconfined_u:object_r:etc_runtime_t:s0

Access: 2020-10-07 15:34:18.780029999 +0800

Modify: 2020-10-07 15:34:18.780029999 +0800

Change: 2020-10-07 15:34:18.780029999 +0800

Birth: -

[[email protected] data]# ls -i

132 file.txt

[[email protected] data]# ll -i

total 0

132 -rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt

3.1 inode 表结构

[[email protected] data]# df -i

Filesystem Inodes IUsed IFree IUse% Mounted on

devtmpfs 247297 397 246900 1% /dev

tmpfs 251531 1 251530 1% /dev/shm

tmpfs 251531 681 250850 1% /run

tmpfs 251531 17 251514 1% /sys/fs/cgroup

/dev/sda2 52428800 119210 52309590 1% /

/dev/sda3 26214400 5 26214395 1% /data

/dev/sda1 65536 308 65228 1% /boot

tmpfs 251531 11 251520 1% /run/user/0

3.2 硬(hard)链接

硬链接的本质就是给文件起个新名,实质是同一文件。

创建硬链接会在对应的目录增加额外记录项以引用文件

每个目录引用相同的 iNode 号

创建时链接数递增

不同分区的两个不同文件,节点编号可能一样

同一分区,两个不同的文件,不能用相同的节点编号

同一个文件,不允许有多个不同的节点编号

[[email protected] data]# ll

total 0

-rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt

drwxr-xr-x. 2 root root 6 Oct 7 19:44 zhl

[[email protected] data]# ln file.txt zhl/file.txt

[[email protected] data]# ll

total 0

-rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt

drwxr-xr-x. 2 root root 22 Oct 7 19:44 zhl

[[email protected] data]# ll file.txt zhl/file.txt

-rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt(链接数变为 2)

-rw-r--r--. 2 root root 0 Oct 7 15:34 zhl/file.txt

[[email protected] data]# ll -i file.txt zhl/file.txt

132 -rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt

132 -rw-r--r--. 2 root root 0 Oct 7 15:34 zhl/file.txt

[[email protected] data]# rm file.txt

rm: remove regular empty file 'file.txt'? y

[[email protected] data]# ll -i file.txt zhl/file.txt

ls: cannot access 'file.txt': No such file or directory

132 -rw-r--r--. 1 root root 0 Oct 7 15:34 zhl/file.txt(文件还可以访问,链接数减 1,不依赖于原文件。删文件,是指删名)

硬链接不能夸文件系统(分区),本质是给一个文件起多个名。夸了分区,节点号有可能冲突

不允许给文件夹创建硬链接,避免存在嵌套的问题(文件夹套子文件,子文件又套自身,形成死循环)

drop 文件,就是在每个数据块上 mark free。drop 大文件的话,会瞬间产生大量 IO。有大量用户正在访问的话,就会出问题。

解决办法

先创建个硬链接,数据有了两个名

然后再 drop 文件,此时只是少了个名,空间还在用,就不会去 mark

系统空闲的时候,再清理文件

yum 安装就是待两次,第一次失败,第二次正常

3.3 符号 symbolic(或软 soft)链接

一个符号链接指向另一个文件,就像 Windows 快捷方式,软链接文件和原文件本质不是同一文件

一个符号链接的内容是它引用文件的名称

指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件 iNode 的引用计数

软链接如果使用相对路径,是相对于原文件的路径,而非相对于当前目录

readlink

[[email protected] zhl]# ln -s file.txt f1.txt

[[email protected] zhl]# ll -i

total 0

134 lrwxrwxrwx. 1 root root 8 Oct 8 17:50 f1.txt -> file.txt()

132 -rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt

[[email protected] zhl]# ln -s file.txt f2.txt

[[email protected] zhl]# ll -i

total 0

134 lrwxrwxrwx. 1 root root 8 Oct 8 17:50 f1.txt -> file.txt(大小是链接的信息内容,8 个字符数)

135 lrwxrwxrwx. 1 root root 8 Oct 8 17:52 f2.txt -> file.txt

132 -rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt(文件链接数没变,节点号不一样,是不同的文件。删除文件,链接作废)

[[email protected] zhl]#

[email protected] data]# ln -s f1.txt dir1/f1.txt.link(此处绕,它认为 f1.txt.link 和 f1.txt 在同一个目录里,现实却不是。此时 f1.txt 的相对路径应该是相对于软链接 dir1/f1.txt.link 的相对路径,而不是相对于 data 的。正确的应该是 ln -s ../f1.txt dir1/f1.txt.link。看这个“/data/dir1/f1.txt.link -> /data/f1.txt”,它是从前往后去找到你,所以你不能是相对的)

[[email protected] data]# ll -i !*

ll -i -s f1.txt dir1/f1.txt.link

33555841 0 lrwxrwxrwx. 1 root root 6 Oct 8 18:07 dir1/f1.txt.link -> f1.txt(此时系统提示 f1.txt 不存在,闪亮。)

132 0 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt

[[email protected] data]# mkdir mysql5.6.10

[[email protected] data]# ln -s mysql5.6.10/ mysql

[[email protected] data]# ll -i

total 0

33555840 drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1

132 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt

133 lrwxrwxrwx. 1 root root 12 Oct 8 18:22 mysql -> mysql5.6.10/

67161792 drwxr-xr-x. 2 root root 6 Oct 8 18:21 mysql5.6.10

[[email protected] data]# rm -f mysql

[[email protected] data]# mkdir mysql5.6.11

[[email protected] data]# ln -s mysql5.6.11/ mysql

[[email protected] data]# ll -i

total 0

33555840 drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1

132 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt

133 lrwxrwxrwx. 1 root root 12 Oct 8 18:23 mysql -> mysql5.6.11/(软件升级的方式)

67161792 drwxr-xr-x. 2 root root 6 Oct 8 18:21 mysql5.6.10

100664640 drwxr-xr-x. 2 root root 6 Oct 8 18:22 mysql5.6.11

[[email protected] data]# rm -rf mysql/(多 / 会删文件,没有 / 只是删软链接。多 / 代表进入了,场景变了)(基础不牢,地动山摇。弄清楚区别)

3.4 硬链接和软链接区别总结

硬链接本质是同一个文件

软链接本质是不同一个文件

硬链接不支持文件夹

软链接:原始文件的相对路径是相对于链接文件的相对路径

[[email protected] data]# ll

total 0

drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1(天生就是 2,. 用的与其相同的节点编号。能不能变成 3 呢?可以,建个子目录,子目录的 .. 就是它了,所以可以是 3。以此类推)

3.5 生产案例

3.5.1 案例1:提示空间满 No space left on device,但 df 可以看到空间很多,为什么?

[[email protected] testzhl]# df -i /boot

Filesystem Inodes IUsed IFree IUse% Mounted on

/dev/sda1 65536 309 65227 1% /boot

[[email protected] testzhl]# touch file{1..65228}

touch: cannot touch 'file65228': No space left on device

[[email protected] testzhl]# df -h /boot

Filesystem Size Used Avail Use% Mounted on

/dev/sda1 976M 125M 785M 14% /boot

[[email protected] testzhl]#

3.5.2 案列2:提示空间快满,使用 rm 删除了很大的无用文件后,df 仍然看到空间不足,为什么?如何解决?

[[email protected] testzhl]# df -h

Filesystem Size Used Avail Use% Mounted on

devtmpfs 967M 0 967M 0% /dev

tmpfs 983M 0 983M 0% /dev/shm

tmpfs 983M 9.1M 974M 1% /run

tmpfs 983M 0 983M 0% /sys/fs/cgroup

/dev/sda2 100G 4.8G 96G 5% /

/dev/sda3 50G 390M 50G 1% /data

/dev/sda1 976M 125M 785M 14% /boot

tmpfs 197M 4.0K 197M 1% /run/user/0

[[email protected] testzhl]# dd if=/dev/zero of=/boot/testzhl/bigfile bs=1M count=700

700+0 records in

700+0 records out

734003200 bytes (734 MB, 700 MiB) copied, 2.49676 s, 294 MB/s

[[email protected] testzhl]# df -h

Filesystem Size Used Avail Use% Mounted on

devtmpfs 967M 0 967M 0% /dev

tmpfs 983M 0 983M 0% /dev/shm

tmpfs 983M 9.1M 974M 1% /run

tmpfs 983M 0 983M 0% /sys/fs/cgroup

/dev/sda2 100G 4.8G 96G 5% /

/dev/sda3 50G 390M 50G 1% /data

/dev/sda1 976M 825M 85M 91% /boot

tmpfs 197M 4.0K 197M 1% /run/user/0

[[email protected] testzhl]# vi /boot/testzhl/bigfile

[[email protected] testzhl]# ll

total 716804

-rw-r--r--. 1 root root 734003200 Oct 7 18:10 bigfile

[[email protected] testzhl]# rm bigfile

rm: remove regular file 'bigfile'? y

[[email protected] testzhl]# du -h /boot

2.5M /boot/grub2/fonts

3.0M /boot/grub2/i386-pc

5.5M /boot/grub2

4.0K /boot/efi/EFI/centos

8.0K /boot/efi/EFI

12K /boot/efi

1.9M /boot/testzhl

16K /boot/lost+found

12K /boot/loader/entries

16K /boot/loader

122M /boot

[[email protected] testzhl]# df -h /boot

Filesystem Size Used Avail Use% Mounted on

/dev/sda1 976M 825M 85M 91% /boot

[[email protected] testzhl]# ls bigfile

ls: cannot access 'bigfile': No such file or directory

[[email protected] testzhl]# lsof | grep delete | grep bigfile

vi 17008 root 5r REG 8,1 734003200 308 /boot/testzhl/bigfile (deleted)

[[email protected] testzhl]#

退出

[[email protected] testzhl]# df -h

Filesystem Size Used Avail Use% Mounted on

devtmpfs 967M 0 967M 0% /dev

tmpfs 983M 0 983M 0% /dev/shm

tmpfs 983M 9.1M 974M 1% /run

tmpfs 983M 0 983M 0% /sys/fs/cgroup

/dev/sda2 100G 4.8G 96G 5% /

/dev/sda3 50G 390M 50G 1% /data

/dev/sda1 976M 125M 785M 14% /boot

tmpfs 197M 4.0K 197M 1% /run/user/0

正确释放大文件的步骤(不用 >,下面的办法是通用办法,> 有的 sh 不支持)

[[email protected] testzhl]# cat /dev/null > /boot/testzhl/bigfile(先清,后删。此法不影响应用程序,有些程序只是写文件)

[[email protected] testzhl]# rm -rf /boot/testzhl/bigfile

yum 安装两次 csh,第一次报错,第二次成功,两次安装没区别

已学:

alias

basename

bc

cal

cat /ect/motd /etc/issue

cd

chown

clear

clock

cp

date

dd

df -i

dirname

dnf

echo $PS1 $SHELL

enable

exit

export

file

free

gedit 图形化

halt

hash

help

help

hexdump

history

hostname hostnamectl

iconv

info

init 0 3 5 6

ln

logout

lsblk

lscpu

lsof

man

mandb mkwhatis

mkdir -p

mv

nano /etc/motd

poweroff

ps aux

reboot

rename

rm

rmdir

runlevel

shred

shutdown

sleep

sosreport

source = .

sreen

stat

sudo -i

systemctl

tmux

touch

tree

tty

type

unalias

uptime

whatis

whereis

which

whoami

who who am i

yum

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号