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 系统的使用。
超级会员免费看

被折叠的 条评论
为什么被折叠?



