「RHCSA 红帽系统管理」2、文件管理

ReaHat Linux 重要目录

/usr安装软件、共享的库,包括文件和只读程序数据。重要的子目录有:/usr/bin 用户命令,/usr/sbin 系统管理命令,/usr/local 本地自定义软件。
/etc特定于此系统的配置文件。
/run自上一次系统启动以来,启动进程运行时的数据,包括进程 ID 文件和锁定文件等。此目录中的内容在重启时重新创建。此目录合并了早期版本 RHEL 中的 /var/run 和 /var/lock。
/home主目录是普通用户存储其个人数据和配置文件的位置。
/root管理超级用户 root 的主目录。
/tmp供临时文件使用的全局可写空间。10 天内未访问、未更改或未修改的文件将自动从该目录中删除。还有一个临时目录 /var/tmp,该目录中的文件如果在 30 天内未曾访问、更改或修改过,将被自动删除。
/boot系统开始启动过程所需的文件。
/dev包含特殊的设备文件,供系统用于访问硬件。

使用命令行进行文件管理

touch 命令用于更新文件的时间戳为当前日期和时间,另外还可用于创建空文件。

[root@redhat ~]# touch 1.txt

ls 命令用于显示文件属性。
常用的选项有 -l 长列表格式,-a 包含隐藏文件的所有文件,-R 递归显示包含所有子目录的内容。

# 长列表格式显示文件(另一种命令缩写方法为 ll)
[root@redhat ~]# ls -l
[root@redhat ~]# ll
总用量 4
-rw-r--r--. 1 root root    0 8月  26 22:03 1.txt
-rw-------. 1 root root 1075 8月  25 20:27 anaconda-ks.cfg

# 长列表格式显示文件,并包含隐藏文件。开头为句点(.)的文件名表示隐藏文件。
[root@redhat ~]# ls -la
总用量 28
dr-xr-x---.  3 root root  160 8月  26 22:03 .
dr-xr-xr-x. 17 root root  224 8月  25 20:22 ..
-rw-r--r--.  1 root root    0 8月  26 22:03 1.txt
-rw-------.  1 root root 1075 8月  25 20:27 anaconda-ks.cfg
-rw-------.  1 root root  952 8月  26 17:48 .bash_history
-rw-r--r--.  1 root root   18 3月  15 2021 .bash_logout
-rw-r--r--.  1 root root  176 3月  15 2021 .bash_profile
-rw-r--r--.  1 root root  176 3月  15 2021 .bashrc
-rw-r--r--.  1 root root  100 3月  15 2021 .cshrc
drwx------.  2 root root   25 8月  26 17:49 .ssh
-rw-r--r--.  1 root root  129 3月  15 2021 .tcshrc

cd 命令可更改用户的所在目录。
通过列表顶部的两个特殊目录,当前目录(.)以及父目录(..),可以上移一个目录级别。

[root@redhat ~]# cd /usr/bin/

# 移动到上一级别的父目录
[root@redhat bin]# cd ..

# 移动到当前用户的家目录
[root@redhat bin]# cd ~

常用文件管理命令

创建目录mkdir directory
复制文件cp file new-file
复制目录及其内容cp -r directory new-directory
移动或重命名文件或目录mv file new-file
删除文件rm file
删除含有文件的目录rm -r directory
删除空目录rmdir directory

使用 mkdir 命令可以创建一个或多个子目录。

[root@redhat ~]# mkdir a
[root@redhat ~]# mkdir a/b

# 使用 -p 选项可以递归创建目录。
[root@redhat ~]# mkdir -p a/b/c

cp 命令可用于复制文件,mv 命令可用于移动文件。

[root@redhat ~]# cp 1.txt 2.txt
[root@redhat ~]# mv 2.txt ./a/b/2.txt

# 使用 cp 命令的 -r 选项可以复制目录及其内容
[root@redhat ~]# cp -r ./a/b ./

使用 rm 命令可以删除目录和文件。

[root@redhat ~]# rm 1.txt
rm:是否删除普通空文件 '1.txt'?y
[root@redhat ~]# 

# 使用 -r 选项将递归删除整个目录,使用 -f 选项将不再进行系统提示,强制删除整个目录。
[root@redhat ~]# rm -rf a

创建、查看和编辑文本文件

1、将输出重定向到文件或程序。

> file重定向标准输出结果 (stdout) 以覆盖文件。
>> file重定向标准输出结果 (stdout) 以附加到文件。
2> file重定向错误信息 (stderr) 以覆盖文件。
2> /dev/null将错误信息 (stderr) 重定向到 /dev/ null,从而将它丢弃。
file 2>&1 或 &> file重定向标准输出结果 (stdout) 和错误信息 (stderr) 以覆盖同一个文件。
file 2>&1 或者 &>> file重定向标准输出结果 (stdout) 和错误信息 (stderr) 以追加到同一文件。
# 保存时间戳
[root@redhat ~]# date > 1.txt
[root@redhat ~]# cat 1.txt
2023年 08月 26日 星期六 23:15:36 CST

# 将一个文件的最后 3 行复制到另外一个文件
[root@redhat ~]# tail -n3 /etc/passwd > 2.txt
[root@redhat ~]# cat 2.txt 
sssd:x:994:990:User for sssd:/:/sbin/nologin
chrony:x:993:989::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

# 将两个文件合并为一个
[root@redhat ~]# cat 1.txt 2.txt > 3.txt

# 将错误信息保存到单独的文件
[root@redhat ~]# cd sss 2> 4.txt
[root@redhat ~]# cat 4.txt 
-bash: cd: sss: No such file or directory

2、构建管道。
通过管道可以将第一个命令的标准输出,连接到下一个命令的标准输入。管道用竖线字符 | 分隔。

# 将 ls 命令的输出使用 less 在终端上分屏显示输出。
[root@redhat ~]# ll /usr/bin/ | less

# 使用 tee 命令将 ls 命令的输出重定向到文件,并使用 less 在终端上分屏显示输出。
[root@redhat ~]# ll /usr/bin/ | tee ~/saved | less

3、Vim 编辑器的四种模式。

正常模式 (Normal-mode)启动 Vim 后的默认模式,无论位于任意模式下,按下「ESC」键都会进入正常模式。
插入模式 (Insert-mode)在正常模式中按下 i、l、a、A、o、O 等键将进入插入模式,在插入模式中可以输入相应的字符。
命令模式 (Command-mode)在正常模式中按下 :(英文冒号)键将进入命令模式,在命令模式中可以执行一部分 vim 指令,包含环境设置、文件操作、调用功能等。常用的命令有 :q(退出)、 :w(保存)、:wq(保存并退出)。
可视模式 (Visual-mode)在正常模式中按下 v,V,Ctrl + V 将进入可视模式,在该模式下可以通过光标选择文本,类似通过鼠标进行操作。

4、Vim 编辑器的常用操作。

普通模式

G跳转到最后一行
10G跳转到第 10 行
dd剪切或删除当前行
10dd从当前行开始,向后删除 10 行
yy复制当前行
yy10从当前行开始,向后复制 10 行
p粘贴
j向下一行移动
k向上一行移动
h向左一个字符移动
l向右一个字符移动

插入模式

i在当前位置插入
l在行首插入
o向下新建一行
O向上新建一行
a从右向后一个字符插入
A在行末插入

命令模式

:wq保存退出
/linux查找关键字 linux
:s/旧内容/新内容替换光标所在行的第一个匹配项
:s/旧内容/新内容/g替换光标所在行的所有匹配项
:%s/旧内容/新内容/g全局替换所有匹配项

制作文件链接

1、硬链接。

使用 ln 命令可以创建一个指向现有文件的新硬链接,新的硬链接与原始文件名的作用完全相同。

硬链接的文件具有相同的链接数、访问权限、用户和组所有权、时间戳,以及文件内容。如果更改一个硬链接其中的信息,指向同一文件的其他硬链接也会更新信息。

即使原始文件被删除,只要存在至少一个硬链接,该文件的内容就依然可用。只有删除了最后一个硬链接,该数据才从存储中删除。

[root@redhat ~]# ln 1.txt /tmp/1.txt

如果需要确定两个文件是否为彼此的硬链接,可以使用 -i 选项列出文件的索引节点编号。如果文件位于同一文件系统,并且索引节点编号相同,那么这两个文件为同一数据的硬链接。

[root@redhat ~]# ll -i 1.txt /tmp/1.txt 
33575689 -rw-r--r--. 2 root root 27 8月  26 22:58 1.txt
33575689 -rw-r--r--. 2 root root 27 8月  26 22:58 /tmp/1.txt

硬链接存在一些局限性,只能用于常规文件,无法使用 ln 来创建指向目录或特殊文件的硬链接。其次,只有两个文件位于同一个文件系统上时,才能使用硬链接。

# 使用 df 命令可以列出不同文件系统上的目录。
[root@redhat ~]# df
文件系统                       1K-块    已用     可用     已用% 挂载点
devtmpfs                      897732       0   897732    0% /dev
tmpfs                         916616       0   916616    0% /dev/shm
tmpfs                         916616    8848   907768    1% /run
tmpfs                         916616       0   916616    0% /sys/fs/cgroup
/dev/mapper/rl_redhat-root  17811456 2070184 15741272   12% /
/dev/nvme0n1p1               1038336  198364   839972   20% /boot
tmpfs                         183320       0   183320    0% /run/user/0

2、软链接。

使用 ln -s 命令可以创建软链接,软链接是指向现有文件或目录的特殊类型的文件,其作用类似于 Windows 系统的快捷方式。

相较于硬链接,软链接可以链接位于不同文件系统上的两个文件,并且可以指向目录或特殊目录,不局限于常规文件。

[root@redhat ~]# ln -s 2.txt /tmp/2.txt

当原始文件被删除后,软链接依然会指向该文件,但目标已消失。指向已缺失文件软链接被称为「悬挂的软链接」。

「悬挂的软链接」有个缺点,如果创建了一个与已删除文件同名的新文件,此时软链接将不再「悬挂」,而是指向到新创建的文件。而硬链接则不会出现这种现象,创建一个同名的新文件,新创建的文件不会链接到旧文件。

使用 Shell 扩展匹配文件名

1、元字符和匹配项表。

*由零个或更多字符组成的任何字符串。
?任何一个字符。
[abc…]括起的类(位于两个方括号之间)中的任何一个字符。
[!abc…]不在括起的类中的任何一个字符。
[^abc…]以括起的类中的任何一个字符开头。
[[:alpha:]]任何字母字符。
[[:lower:]]任何小写字符。
[[:upper:]]任何大写字符。
[[:alnum:]]任何字母字符或数字。
[[:punct:]]除空格和字母数字以外的任何可打印字符。
[[:digit:]]从 0 到 9 的任何单个数字。
[[:space:]]任何一个空白字符。这可能包括制表符、换行符、回车符、换页符或空格。
# 使用简单模式匹配
[root@redhat ~]# ll /usr/bin/a*
[root@redhat ~]# ll /usr/bin/*ac*
[root@redhat ~]# ll /usr/bin/a?

2、大括号拓展。

大括号扩展用于生成任意字符串,大括号内包含顺序表达式,支持大括号的相互嵌套。

[root@redhat ~]# echo {1,2}.txt
1.txt 2.txt

[root@redhat ~]# echo {a..c}.txt
a.txt b.txt c.txt

大括号的实际用途是快速创建多个文件或目录。

[root@redhat ~]# mkdir rhce-{a..e}
[root@redhat ~]# ll
总用量 4
-rw-------. 1 root root 1075 8月  25 20:27 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 8月  26 23:34 rhce-a
drwxr-xr-x. 2 root root    6 8月  26 23:34 rhce-b
drwxr-xr-x. 2 root root    6 8月  26 23:34 rhce-c
drwxr-xr-x. 2 root root    6 8月  26 23:34 rhce-d
drwxr-xr-x. 2 root root    6 8月  26 23:34 rhce-e

3、变量扩展。

变量的作用类似于在内存中存储命名容器,通过 shell 脚本可以轻松访问和修改存储的数据。

# 为变量赋值
[root@redhat ~]# MYNUM=996
[root@redhat ~]# echo $MYNUM
996

# 为避免因其他 shell 扩展而引起错误,建议将变量名称放在大括号里。
[root@redhat ~]# echo ${MYNUM}

总结

  • Linux 系统中的文件被组织到一个颠倒的目录树中,称为文件系统层次结构。
  • 有五个关键命令可用于管理文件,分别为 mkdir、rmdir、cp、mv 和 rm。
  • 硬链接和软链接是让多个文件名指向同一数据的不同方式。
  • Bash Shell 提供了模式匹配、扩展和替换功能,可帮助高效地运行命令。
  • 运行程序或进程涉及三个标准通信通道:标准输入、标准输出和标准错误。使用 I/O 重定向从文件中读取标准输入,或者将输出或错误从进程写入文件。
  • 管道可用干将标准输出从一个进程连接到另一个进程的标准输入,并可用干格式化输出或构建复杂命令。
本文为原创文章,著作权归作者所有:来自「KOBIN 技术随笔」作者的原创作品,转载请标明出处。
「RHCSA 红帽系统管理」2、文件管理
https://blog.kobin.cn/notes/2819.html
(0)

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

CAPTCHAis initialing...