31、Linux Shell 操作与文件管理全解析

Linux Shell 操作与文件管理全解析

1. 标准输出重定向

在 Linux 中,我们可以将标准输出重定向到文件而非屏幕显示。要实现这一点,可在 Linux 命令行中使用输出重定向操作符大于号(>),其后紧跟文件名。例如:

$ ls -l *.c > programlist

此操作会创建新的目标文件。若文件已存在,将被标准输出的数据覆盖。为防止覆盖现有文件,可设置 noclobber 特性:

$ set -o noclobber
$ cat myarticle >! oldarticle

这里的 > 操作符虽置于命令后,但重定向操作会在命令执行前进行。若文件已存在,会先被销毁再创建同名文件。

以下是一个将 ls 命令输出重定向到文件的示例:

$ ls
mydata intro preface
$ ls > listf
$ cat listf
mydata intro listf preface 

需要注意的是,若使用相同文件名作为命令的输入文件和重定向的目标文件,会出现错误。因为重定向操作先执行,输入文件会被销毁并替换为同名空文件。

除了覆盖文件,还可使用 >> 操作符将标准输出追加到现有文件末尾:

$ cat myarticle >> allarticles
$ cat oldarticle >> allarticles 

1.1 重定向操作总结

命令 执行操作
command > filename 将标准输出重定向到文件或设备,若文件不存在则创建,存在则覆盖
command < filename 将标准输入从文件或设备重定向到程序
command >> filename 将标准输出重定向到文件或设备,并将输出追加到文件末尾
command 2> filename 将标准错误重定向到文件或设备
command 2>> filename 将标准错误重定向并追加到文件或设备
command 2>&1 在 Bourne shell 中将标准错误重定向到标准输出
command >& filename 在 C shell 中将标准错误重定向到文件或设备
command | command 将一个命令的标准输出作为另一个命令的输入

2. 标准输入

许多 Linux 命令可从标准输入接收数据,标准输入的数据来自设备或文件,默认设备是键盘。我们也可将标准输入重定向,从文件而非键盘接收输入,使用小于号(<)操作符。示例如下:

$ cat < myarticle
hello Christopher
How are you today
$

还可同时对标准输入和标准输出进行重定向:

$ cat < myarticle > newarticle

3. 管道操作

在 Linux 中,可使用管道操作符(|)将一个命令的标准输出作为另一个命令的输入。例如,要将文件名列表发送到打印机打印,可使用以下命令:

$ ls | lpr

管道操作可与其他 shell 特性结合,实现特定操作。如只打印 .c 扩展名的文件:

$ ls *.c | lpr

管道不仅可处理文件名列表,还能处理整个文件内容。例如,将 mydata 文件内容读取并输出,再通过管道发送到打印机:

$ cat mydata | lpr

Linux 中有许多能生成修改后输出的命令,如 sort 命令可对文件内容按行进行字母排序。这类输出修改后版本输入的命令称为过滤器,常与管道结合使用:

$ sort mylist | more

使用 - 作为命令参数,可更精确控制管道输入,它代表标准输入。

4. Linux 文件

4.1 文件名规则

在 Linux 中,文件名可使用字母、下划线、数字,也可包含句点和逗号,但除特殊情况外,文件名不应以句点开头。像斜杠、问号、星号等字符是系统保留的特殊字符,不能作为文件名的一部分。文件名最长可达 256 个字符,也可包含空格,但在命令行引用时需用引号括起来。例如:

preface
chapter2
9700info
New_Revisions
calc.c
intro.bk1
"New book review"

4.2 隐藏文件

特殊的初始化文件用于保存 shell 配置命令,这些是隐藏文件(以句点开头)。例如, .mozilla 目录用于保存 Mozilla 数据和配置文件。使用 ls 命令时,隐藏文件默认不显示,若要显示,需使用 -a 选项。

4.3 文件详细信息

ls -l 命令可显示文件的详细信息,包括权限、链接数、文件所有者、所属组、文件大小、最后修改日期和时间以及文件名。示例如下:

$ ls -l
-rw-r--r-- 1 chris weather 207 Feb 20 11:55 mydata
-rw-rw-r-- 1 chris weather 568 Feb 14 10:30 today
-rw-rw-r-- 1 chris weather 308 Feb 17 12:40 monday

4.4 文件类型

Linux 中所有文件都采用字节流的物理格式,这使 Linux 能将文件概念应用于系统的每个数据组件。常见的文件类型有以下 5 种:
- 普通文件
- 目录文件
- 先进先出(FIFO)管道
- 字符设备文件
- 块设备文件

虽然很少直接引用文件类型,但在搜索目录或设备时可能会用到。可使用 file 命令判断文件用途:

$ file monday reports
monday: text
reports: directory

若需逐字节检查整个文件,可使用 od 命令,默认以八进制表示每个字节,也可指定字符、十进制或十六进制表示。

4.5 文件类型判断流程

graph TD;
    A[开始] --> B[使用 file 命令检查文件];
    B --> C{文件类型判断};
    C -->|文本文件| D[显示 text];
    C -->|目录文件| E[显示 directory];
    C -->|其他类型| F[显示相应类型];
    D --> G[结束];
    E --> G[结束];
    F --> G[结束];

5. 文件结构

Linux 采用树形结构组织文件,文件被分层存放在不同的目录中。每个目录既可以包含文件,也可以包含其他子目录。这种结构就像一棵树,根目录是树干,各个子目录和文件则是树枝和树叶。

5.1 根目录与系统目录

整个 Linux 文件结构始于根目录( / ),根目录下包含了多个系统目录,这些目录存储着用于运行和维护系统的文件和程序。以下是一些常见系统目录及其功能:
| 目录 | 功能 |
| — | — |
| / | 开始文件系统结构,即根目录 |
| /home | 包含用户的主目录 |
| /bin | 保存所有标准命令和实用程序 |
| /usr | 存放系统使用的文件和命令,该目录又包含多个子目录 |
| /usr/bin | 包含面向用户的命令和实用程序 |
| /usr/sbin | 保存系统管理命令 |
| /usr/lib | 存放编程语言的库文件 |
| /usr/share/doc | 保存 Linux 文档 |
| /usr/share/man | 保存在线手册文件 |
| /var/spool | 存放假脱机文件,如打印作业和网络传输生成的文件 |
| /sbin | 保存用于启动系统的系统管理命令 |
| /var | 存放可变文件,如邮箱文件 |
| /dev | 保存设备的文件接口,如终端和打印机(由 udev 动态生成,请勿编辑) |
| /etc | 保存系统配置文件和其他系统文件 |

5.2 用户主目录

用户登录系统后,会进入自己的主目录,主目录的名称通常与用户的登录名相同。用户在登录后创建的文件默认会存放在主目录中,并且可以在主目录下创建更多的子目录来组织文件。例如,用户 dylan 的主目录是 /home/dylan 。用户可以通过目录名访问特定目录,也可以使用 cd 命令将某个目录设置为当前工作目录。当执行文件操作时,如果不指定目录名,默认操作的是当前工作目录。

5.3 路径名

5.3.1 绝对路径名和相对路径名

文件或目录的全名是其路径名,路径名可以分为绝对路径名和相对路径名。绝对路径名从根目录开始,是文件或目录的完整路径;相对路径名从当前工作目录开始,是相对于当前工作目录的路径。例如,假设当前工作目录是 /home/chris ,文件 monday 的绝对路径名是 /home/chris/reports/monday ,相对路径名则是 reports/monday

5.3.2 波浪号(~)的使用

为了方便引用主目录,可使用波浪号(~),它代表用户主目录的绝对路径名。例如,要访问主目录下 reports 目录中的 monday 文件,可使用以下命令:

$ cat ~/reports/monday 

5.4 文件结构层次流程

graph TD;
    A[/根目录/] --> B[/home/]
    A --> C[/bin/]
    A --> D[/usr/]
    A --> E[/var/]
    A --> F[/dev/]
    A --> G[/etc/]
    B --> H[/home/chris/]
    H --> I[/home/chris/reports/]
    I --> J(monday 文件)
    D --> K[/usr/bin/]
    D --> L[/usr/sbin/]
    D --> M[/usr/lib/]
    D --> N[/usr/share/]
    N --> O[/usr/share/doc/]
    N --> P[/usr/share/man/]
    E --> Q[/var/spool/]

6. 总结

通过本文的介绍,我们了解了 Linux 中标准输入输出的重定向方法、管道操作的使用,以及 Linux 文件的命名规则、文件类型和文件结构等重要知识。这些知识对于在 Linux 系统中进行高效的文件管理和命令操作至关重要。在实际使用中,我们可以根据具体需求灵活运用这些技术,提高工作效率。例如,合理使用重定向和管道操作可以简化复杂的任务,利用文件结构的特点能够更好地组织和查找文件。希望这些内容能帮助你更好地掌握 Linux 系统的使用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值