Linux 命令行操作全解析
1. 命令重定向与管道
在 Linux 命令行中,
more
和
less
是非常实用的工具。若想了解
more
的更多功能,可在
more
提示符下输入
?
。
管道可将两个程序连接起来,重定向则能让程序从文件读取输入或把输出写入文件。重定向标准输出到新文件使用
>
符号,例如将
ls
命令的输出写入
ls.output
文件:
ls /bin > ls.output
重定向符号周围的空格是可选的。要读取这个文件内容,可使用
more
命令并通过
<
符号重定向输入:
more < ls.output
more
命令在此处处理重定向,与之前处理管道的方式类似,它本身并不关心数据的实际来源,而
more ls.output
是
more
自己打开文件。
除上述两种重定向方式外,还有其他形式,如下表所示:
| 符号 | 功能 |
| ---- | ---- |
| > | 将命令的标准输出重定向到指定文件 |
| >> | 类似
>
,但如果文件已存在则追加内容 |
| 2> | 将命令的错误输出重定向到指定文件 |
| < | 将命令的输入从指定文件重定向 |
| | | 连接两个命令,左边命令的输出作为右边命令的输入 |
2. 命令行格式
命令行由单词组成,单词间用空白字符(一个或多个空格、制表符或其组合)分隔。命令行的第一个单词是要运行的命令,它可以是二进制程序、别名、脚本或其他解释型语言编写的程序。其余单词是参数,以
-
开头的参数是选项,以
--
开头的是长选项,选项通常用于修改命令的行为。
多个命令可以用分号
;
分隔在同一行输入,在命令后加
&
可让命令在后台运行,不占用终端屏幕。
以下是一些示例:
- 分页显示
/bin
目录下所有文件的详细列表:
ls -l /bin | more
-
在终端打印日期,然后将
/bin目录下所有文件的详细列表写入/tmp/testme文件:
date; ls -l /bin > /tmp/testme
3. 命令行编辑与历史记录
Shell 会记录最近使用的命令,允许用户检索、编辑和重新执行。根据 Shell 的设置模式,历史记录的访问和编辑方式类似于 Emacs 或 vi 编辑器。
要选择 vi 编辑模式,在 Shell 提示符下输入:
set -o vi
要选择 Emacs 编辑模式,输入:
set -o emacs
若要永久更改编辑模式,可将相应的
set
命令添加到主目录下的
.bashrc
文件末尾,不过更改要到下次登录才生效。
如果不熟悉 Emacs 或 vi,Emacs 模式可能更适合。在该模式下,上下箭头键可浏览历史记录列表,左右箭头键、退格键和删除键可编辑命令,按回车键执行命令。在 vi 模式下,按
ESC
键后可使用任何适用于单行的 vi 命令,上下箭头键或
J
、
K
键可在历史记录列表中移动。
4. 命令补全
Bash 除提供命令历史记录外,还能在用户输入文件名时进行补全。当输入的文件名足够唯一时,按
TAB
键,Bash 会补全剩余部分;若不唯一,再次按
TAB
键,Shell 会列出所有可能的匹配项,等待用户继续输入。
5. 通配符扩展
Shell 提供了一种特殊的简写方式——通配符扩展,可在命令行中选择多个文件名,这是 Shell 非常强大的功能,能节省大量输入时间。
| 符号 | 功能 |
| ---- | ---- |
|? | 匹配任意单个字符 |
| * | 匹配任意数量(零个或多个)的任意字符 |
| ~ | 表示主目录,
~name
会被替换为用户
name
的主目录路径,省略
name
则为当前用户主目录 |
| [ ] | 用于单个字符匹配,如
[aQz]
匹配
a
、
Q
或
z
,
[am - pZ]
匹配
a
、
m
、
n
、
o
、
p
或
Z
,
[^a - z]
匹配除小写字母外的任意字符 |
| $ | 引入 Shell 变量,变量会被替换为其保存的值,如
$HOME
会被替换为当前用户主目录的路径 |
| \ | 取消后续字符的特殊含义,如
\?
匹配
?
而非任意单个字符 |
需要注意的是,不要将 Shell 通配符扩展与正则表达式混淆,它们有相似之处,但功能和使用场景不同。
6. 引号使用
除了用反斜杠
\
保护字符不被 Shell 扩展或解释外,还有其他引号字符,反斜杠也可取消它们的特殊含义。
| 引号 | 功能 |
| ---- | ---- |
| ” | 取消除
$
外所有字符的特殊含义,常用于将多个单词作为一个参数处理 |
| ’ | 取消所有字符的特殊含义 |
| ` | 将引号内的字符串作为命令执行,并将结果替换原字符串 |
以下是一些示例:
- 输出包含变量替换的字符串:
echo "My home directory is $HOME"
- 输出包含字面变量的字符串:
echo 'My home directory is $HOME'
- 输出包含命令执行结果的字符串:
echo "The current time is `date`"
7. 命令约定
在示例中,使用等宽字体表示示例;方括号
[]
表示命令中可选的信息,不要实际输入;粗体表示命令的正确语法;斜体表示需要替换的参数,常见的如
file
表示文件名;
option
可替换为任何可用的命令选项。
8. 文件层次结构
在 Linux 中,斜杠
/
用于分隔文件层次结构的各级,根目录用
/
表示,其他文件都相对于根目录定位。文件在层次结构中的位置称为路径名,以
/
开头的是绝对路径名,否则是相对路径名。每个目录都有
.
(表示当前目录)和
..
(表示父目录)两个特殊文件,可用于在文件层次结构中快速导航。
例如,若主目录是
/home/fyl
,另一个用户
jill
的主目录是
/home/jill
,在当前目录为
/home/fyl
时,
/home/jill
是绝对路径名,
../jill
是相对路径名。
9. 文件操作命令
-
ls- 列出目录内容-
基本形式:
ls [选项] [文件] -
常见选项:
-
-a:显示以点开头的隐藏文件 -
-l:显示文件大小、所有者和权限信息 -
-R:递归显示子目录 -
-t:按最后修改时间排序 -
-u:按最后访问时间排序
-
-
示例:
bash # 按最后修改时间排序列出当前目录所有文件 ls -lt # 长列表显示 /usr/bin 目录下以 gif 开头的文件 ls -l /usr/bin/gif*
-
基本形式:
-
cp- 复制文件-
基本形式:
cp [选项] 源文件 目标文件或cp [选项] 文件列表 目录 -
常见选项:
-
-a:归档,保留文件属性并包含子目录,但不跟随符号链接 -
--help:显示帮助信息 -
-p:尽可能保留文件属性 -
-R:递归复制子目录 -
-v:显示操作过程
-
-
示例:
bash # 复制当前目录的 harry 文件到 /tmp 目录并命名为 chest cp harry /tmp/chest # 复制 /tmp 目录下以 a 或 b 开头的文件到当前目录并保留属性 cp -p /tmp/[ab]* . # 递归复制 /home/bill/secret 目录及其子目录到 /tmp/savebill 目录 cp -R /home/bill/secret/* /tmp/savebill
-
基本形式:
-
mv- 重命名或移动文件-
基本形式:
mv [选项] 源文件 目标文件 -
常见选项:
-
--help:显示帮助信息 -
-i:覆盖文件前提示确认 -
-u:只移动较旧或全新的非目录文件 -
-v:显示操作过程
-
-
示例:
bash # 移动当前目录的 harry 文件到 /tmp 目录并命名为 chest mv harry /tmp/chest # 移动 /tmp 目录下以 a 或 b 开头的文件到当前目录,覆盖前提示 mv -i /tmp/[ab]* .
-
基本形式:
-
rm- 删除文件-
基本形式:
rm [选项] 文件 -
常见选项:
-
-f:强制删除,不提示 -
--help:显示帮助信息 -
-i:删除前提示确认 -
-r或-R:递归删除目录及其内容 -
-v:显示操作过程
-
-
示例:
bash # 删除当前目录的 harry 文件 rm harry # 删除 /tmp 目录下以 a 或 b 开头的文件 rm /tmp/[ab]* # 删除当前目录的 Garbage 目录及其内容 rm -r Garbage
-
基本形式:
-
mkdir- 创建目录-
基本形式:
mkdir [选项] 目录名 -
常见选项:
-
--help:显示帮助信息 -
-m 模式:设置目录权限 -
-p:创建缺失的父目录 -
-v:显示操作过程
-
-
示例:
bash # 在当前目录创建 Harry 目录,在 /tmp 目录创建 Chest 目录 mkdir Harry /tmp/Chest # 在当前目录创建 Harry 目录并设置权限 mkdir -m u=rwx,g=rx,o-rwx Harry # 使用数字模式设置权限创建 Harry 目录 mkdir -m 750 Harry # 创建 Harry/Chest 目录,若 Harry 目录不存在则先创建 mkdir -p Harry/Chest
-
基本形式:
-
rmdir- 删除空目录-
基本形式:
rmdir [选项] 目录 -
常见选项:
-
--help:显示帮助信息 -
-p:删除目录并尝试删除路径中的每个组件 -
-v:显示操作过程
-
-
示例:
bash # 删除当前目录的 Harry 目录和 /tmp 目录的 Chest 目录 rmdir Harry /tmp/Chest # 删除 Harry/Chest 目录,若 Harry 目录为空则一并删除 rmdir -p Harry/Chest
-
基本形式:
10. 文本编辑器
在 Linux 命令行中,常见的文本编辑器有 Emacs、Joe 和 vi。
-
Emacs
:是自由软件基金会的项目,很多人将其视为工作环境而非单纯的编辑器,它有自己的内置编程语言,可自定义操作。
-
Joe
:不如 Emacs 或 vi 流行,但对初学者很友好,除了有易于使用的默认模式和屏幕菜单外,还能模拟 Emacs 和 vi 的基本功能。
-
vi
:是最受欢迎的编辑器,有多种变体,如 nvi、vim、vile、elvis 和 stevie 等。它们都采用模式系统,在不同模式下进行文本输入和编辑,用户和开发者以最少的按键完成任务为傲。
11. 打印命令
lpr
命令可用于将文件发送到打印机进行打印,类似于 GUI 应用程序中的菜单选择和 KDE 中的拖放功能。
- 基本形式:
lpr [选项] [文件]
- 若未指定文件,则从标准输入读取。
- 常见选项:
-
-m [用户]
:打印完成后向用户发送电子邮件(默认是当前用户)
-
-P 打印机名
:将文件发送到指定打印机而非默认打印机
-
-r
:打印后删除文件
12. 文件属性和权限
每个文件和目录都有两个所有权字段和一组权限,用于限制对文件的访问。合理设置文件的所有权和权限可以保障系统的安全性和数据的隐私性。例如,对于敏感文件,可以设置只有特定用户或用户组才能访问。在实际操作中,我们可以使用
chown
命令更改文件的所有者,使用
chmod
命令更改文件的权限。
通过以上对 Linux 命令行操作的详细介绍,相信你已经对如何在 Linux 系统中进行文件操作、命令使用、文本编辑和打印等有了更深入的了解。在实际使用中,不断练习和探索这些命令,你将能够更加高效地管理和操作 Linux 系统。
Linux 命令行操作全解析
13. 命令使用流程图
下面是一个简单的 mermaid 流程图,展示了在 Linux 命令行中进行文件操作的基本流程:
graph LR
A[开始] --> B{选择操作}
B -->|列出目录内容| C(ls 命令)
B -->|复制文件| D(cp 命令)
B -->|重命名/移动文件| E(mv 命令)
B -->|删除文件| F(rm 命令)
B -->|创建目录| G(mkdir 命令)
B -->|删除空目录| H(rmdir 命令)
C --> I[结束]
D --> I
E --> I
F --> I
G --> I
H --> I
14. 综合示例与技巧
- 综合示例 :假设我们需要对一个项目目录进行整理。首先,我们要列出项目目录下的所有文件和子目录,包括隐藏文件:
ls -a /path/to/project
然后,我们发现有一些临时文件需要删除,这些临时文件的文件名都以
.tmp
结尾:
rm /path/to/project/*.tmp
接着,我们要将项目中的一个配置文件
config.example
复制一份并命名为
config
,同时保留文件属性:
cp -p /path/to/project/config.example /path/to/project/config
之后,我们想将项目中的一个子目录
old_version
移动到备份目录
/backup
下:
mv /path/to/project/old_version /backup
最后,我们创建一个新的子目录
new_feature
用于开发新功能:
mkdir /path/to/project/new_feature
-
技巧
:
-
使用别名
:对于一些常用但较长的命令组合,我们可以创建别名来简化输入。例如,将
ls -lth命令创建别名llt,在终端输入以下命令:
-
使用别名
:对于一些常用但较长的命令组合,我们可以创建别名来简化输入。例如,将
alias llt='ls -lth'
若要让别名永久生效,可将该命令添加到
.bashrc
文件中。
-
批量操作
:利用通配符扩展可以进行批量文件操作。如要删除当前目录下所有以
.log
结尾的文件,只需执行:
rm *.log
15. 命令组合与管道的高级应用
-
命令组合
:我们可以使用分号
;或双与符号&&来组合多个命令。分号用于依次执行多个命令,无论前一个命令是否执行成功;双与符号则要求前一个命令执行成功后才执行下一个命令。例如:
# 依次执行 date 和 ls 命令
date; ls -l
# 只有当 date 命令执行成功后才执行 ls 命令
date && ls -l
-
管道高级应用
:管道可以将多个命令的输出和输入连接起来,实现更复杂的功能。例如,我们要找出
/usr/bin目录下所有可执行文件,并统计其数量。可以先使用find命令查找可执行文件,再通过wc -l命令统计数量:
find /usr/bin -type f -executable | wc -l
16. 错误处理与日志记录
在执行命令时,可能会遇到各种错误。我们可以利用重定向将错误信息记录到日志文件中,方便后续排查问题。例如,执行
ls
命令时,将错误输出重定向到
error.log
文件:
ls /nonexistent/directory 2> error.log
这样,当
ls
命令尝试访问不存在的目录时,错误信息会被记录到
error.log
文件中,而不是显示在终端上。
17. 自定义环境变量与配置文件
-
自定义环境变量
:环境变量可以影响命令和程序的行为。我们可以自定义环境变量来满足特定需求。例如,设置一个名为
MY_PROJECT_DIR的环境变量,指向项目目录:
export MY_PROJECT_DIR=/path/to/project
之后,在命令中可以使用该环境变量:
ls $MY_PROJECT_DIR
若要让环境变量永久生效,可将
export
命令添加到
.bashrc
文件中。
-
配置文件
:许多命令和程序都有自己的配置文件,通过修改配置文件可以定制其行为。例如,
bash
的配置文件是
.bashrc
,
vim
的配置文件是
.vimrc
。我们可以编辑这些配置文件来实现个性化设置。
18. 总结
通过本文的介绍,我们全面了解了 Linux 命令行的各种操作,包括命令重定向、管道、命令行格式、编辑与历史记录、补全、通配符扩展、引号使用、文件层次结构、文件操作命令、文本编辑器、打印命令以及文件属性和权限等内容。同时,我们还学习了命令的综合应用、高级技巧、错误处理、环境变量和配置文件的使用。
在实际使用 Linux 系统时,我们可以根据具体需求灵活运用这些命令和技巧,提高工作效率和系统管理能力。不断实践和探索,你将逐渐成为 Linux 命令行操作的高手。
以下是一个总结表格,回顾本文介绍的主要命令及其功能:
| 命令 | 功能 |
| ---- | ---- |
| ls | 列出目录内容 |
| cp | 复制文件 |
| mv | 重命名或移动文件 |
| rm | 删除文件 |
| mkdir | 创建目录 |
| rmdir | 删除空目录 |
| more | 分页显示文件内容 |
| lpr | 发送文件到打印机 |
| set -o vi | 设置 vi 编辑模式 |
| set -o emacs | 设置 Emacs 编辑模式 |
| alias | 创建命令别名 |
| export | 设置环境变量 |
超级会员免费看
963

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



