Section 1.1: 有用的快捷键
使用命令行终端
本文档中的示例假设您正在使用兼容posix的shell(如bash、sh、zsh、ksh)。
GNU/Linux的大部分功能是使用终端实现的。大多数Linux发行版都包含终端仿真器,允许用户在桌面环境中与shell交互。shell是执行用户输入命令的命令行解释器。Bash(又是Bourne SHell)是许多Linux发行版中常见的默认SHell,也是macOS的默认SHell。
如果你使用Bash和emacs键绑定(默认设置),这些快捷方式将起作用:
打开终端
Ctrl + Alt + T 或 Super + T
光标移动
Ctrl + A 转到当前正在输入的行首。
Ctrl + E 转到当前正在输入的行末。
Ctrl + XX 在行首和光标当前位置之间移动。
Alt + F 将光标在当前行上向前移动一个单词。
Alt + B 将光标在当前行上向后移动一个单词。
Ctrl + F 将光标在当前行上向前移动一个字符。
Ctrl + B 将光标在当前行上向后移动一个字符。
文本操作
Ctrl + U 从当前位置剪切行到行首,将其添加到剪贴板。如果
您位于行末,则剪切整行。
Ctrl + K 从当前位置剪切行到行末,将其添加到剪贴板。如果
您位于行首,则剪切整行。
Ctrl + W 删除光标前的单词,将其添加到剪贴板。
Ctrl + Y 粘贴最近从剪贴板剪切的最后一项(在当前光标位置撤消最后一次删除)。
Alt + T 交换光标前的最后两个单词。
Alt + L 从光标到单词末尾变为小写。
Alt + U 从光标到单词末尾变为大写。
Alt + C 从光标开始到单词末尾变为大写(如果光标在单词开头,则为整个单词)。
Alt + D 从光标开始到单词末尾删除(如果光标在单词开头,则为整个单词)。
Alt + . 打印上一个命令中写入的最后一个单词。
Ctrl + T 交换光标前的最后两个字符。
历史记录访问
Ctrl + R 允许您搜索以前使用的命令。
Ctrl + G 退出历史记录搜索模式而不运行命令。
Ctrl + J 允许您将当前匹配的命令复制到命令行而不运行它,允许您在运行命令之前进行修改。
Alt + R 如果您已编辑过从历史记录中提取的命令,则恢复对它的任何更改。
Ctrl + P 显示最后执行的命令,即回顾命令历史记录(类似于向上箭头)。
Ctrl + N 显示下一个执行的命令,即向前浏览命令历史记录(类似于向下箭头)。
终端控制
Ctrl + L 清除屏幕,类似于清除命令。
Ctrl + S 停止所有屏幕输出。这在运行具有大量长输出的命令时很有用。但这不会停止正在运行的命令。
Ctrl + Q 使用 Ctrl+S 停止后恢复屏幕输出。
Ctrl + C 结束当前正在运行的进程并返回提示符。
Ctrl + D 注销当前 shell 会话,类似于 exit 或 logout 命令。在某些命令中,充当文件结尾信号,表示已到达文件结尾。
Ctrl + Z 暂停当前正在运行的前台进程,返回 shell 提示符。然后,您可以使用 bg 命令允许该进程在后台运行。要再次将该进程带到前台,请使用 fg 命令。要查看所有后台进程,请使用 jobs 命令。
Tab 自动完成文件和目录名称。
Tab Tab 当键入的字符与文件或目录名称不唯一匹配时,显示所有可能性。
特殊字符
Ctrl + H 与退格键相同。
Ctrl + J 与回车键相同(历史上的换行符)。
Ctrl + M 与回车键相同(历史上的回车符)。
Ctrl + I 与 Tab 相同。
Ctrl + G 铃声字符。
Ctrl + @ 空字符。
Esc 相当于 Alt 修饰符的死键。
关闭终端
Ctrl + Shift + W 关闭终端选项卡。
Ctrl + Shift + Q 关闭整个终端。
或者,您可以使用 set -o vi 切换到 bash 中的 vi 键绑定。使用 set -o emacs 切换回 emacs 键绑定
Section 1.2: 文件管理命令
Linux 对 当前目录和父级目录使用一些约定。对于初学者来说,这可能会造成困惑。
无论何时在 Linux 中的终端中,您都将位于所谓的当前工作目录中。通常,命令提示符将显示完整的工作目录,或者仅显示该目录的最后一部分。您的提示可能如下所示:
user@host ~/somedir $
user@host somedir $
user@host /home/user/somedir $
上面的提示符都表示您当前的工作目录是 /home/user/somedir。
在 Linux 中 '..' 表示父目录,'.' 表示当前目录。因此,如果当前目录是 /home/user/somedir,执行命令 cd ../somedir 的结果并不会改变目录。
下表列出了一些常用的文件管理命令
目录导航
| Command | Utility |
|---|---|
pwd |
获取当前工作目录的完整路径。 |
cd - |
导航到您正在使用的最后一个目录。 |
cd ~ 或者仅 cd |
导航到当前用户的主目录。 |
cd .. |
转到当前目录的父目录(注意 cd 和 .. 中间有空格) |
列出目录中的文件
| Command | Utility |
|---|---|
ls -l |
以长格式(类似表格)列出当前目录中的文件和目录(建议使用 ls 搭配 -l 选项以获得更好的可读性)。 |
ls -ld dir-name |
列出有关目录 dir-name 的目录长格式信息,而不是其内部有什么文件和目录的信息。 |
ls -a |
列出所有文件,包括隐藏的文件(以 . 开头的文件名在 Linux 中是隐藏文件)。 |
ls -F |
在文件名的末尾附加一个符号以指示其类型( * 表示可执行文件,/表示目录,@ 表示符号链接,= 表示套接字(socket),| 表示FIFO管道文件 ) |
ls -lt |
按上次修改时间降序列出文件,最近修改的文件显示在顶部( -l选项提供具有更好可读性的长格式)。 |
ls -lh |
以用户可读的格式列出文件大小。 |
ls -lR |
递归显示所有子目录。 |
tree |
将从当前目录中的文件、子目录生成树状的形式来表示。 |
文件/目录创建、复制和删除
| Command | Utility |
|---|---|
cp -p source destination |
将文件从源复制到目标。-p 代表 preservation。它在复制时保留文件的原始属性,如文件所有者、时间戳、组、权限等。 |
cp -R source_dir destination_dir |
将递归地将源目录复制到指定的目标,-R选项多用于目录的复制。 |
mv file1 file2 |
在 Linux 中 rename 这样的命令有的发行版本中并没有。因此通常情况下是使用 mv 将 file1 移动/重命名为 file2。 |
rm -i filename |
在每次文件删除之前询问您进行确认。如果您是 LINUX 命令行的新用户,则应始终使用 rm -i。(您可以指定多个文件,文件名用空格隔开。) |
rm -R dir-name |
将递归删除目录 dir-name。 |
rm -rf dir-name |
将递归删除目录 ,忽略不存在的文件,并且永远不会提示输入任何内容。使用此命令时要小心!您可以指定多个目录,目录名用空格隔开。 |
rmdir dir-name |
如果目录 dir-name 为空,将删除该目录。此命令只能删除空目录。 |
mkdir dir-name |
创建一个名为 dir-name 的目录。 |
mkdir -p dir-name/dir-name |
创建目录层次结构。根据需要创建父目录(如果它们不存在)。您可以指定多个目录。 |
touch filename |
如果文件名不存在,请创建一个文件名,否则将文件的时间戳更改为当前时间。 |
文件/目录权限和组
| Command | Utility |
|---|---|
chmod <specification> filename |
更改文件权限。规范: u 用户,g 组,o 其他,+ 添加权限,-删除,r 读取,w 写入,x 执行。 |
chmod -R <specification> dirname |
递归更改目录的权限。在需要更改目录和该目录中的所有内容的权限时使用这个命令。 |
chmod go=+r myfile |
为所有者和组添加读取权限。 |
chmod a +rwx myfile |
允许所有用户读取、写入或执行 myfile。 |
chmod go -r myfile |
删除组和其他人的读取权限。 |
chown owner1 filename |
将文件 filename 的所有权更改为用户 owner1。 |
chgrp grp_owner filename |
将文件 filename 的主要组所有权更改为组 grp_owner。 |
chgrp -R grp_owner dir-name |
将目录 dir-name 的主组所有权改为 group grp_owner 递归。要更改目录的组所有权以及该目录中的所有内容,请使用此命令。 |
Section 1.3: Hello World
在终端中键入以下代码,然后按 Enter :
echo "Hello World"
这将产生以下输出:
Hello World
这就是命令终端中最简单的 Hello World
Section 1.4: Linux 基本实用程序/命令
Linux 几乎有适用于任何任务的命令,其中大多数都很直观且易懂易于解释。
在 Linux 中获取帮助
| Command | Usability |
|---|---|
man <name> |
阅读 的手册页。 |
man <section> <name> |
阅读 的手册页,与 相关的部分。 |
man -k <editor> |
输出所有软件 man 页中包含关键词 的内容。 |
man -K <keyword> |
输出其中包含关键词 的所有手册页。 |
apropos <editor> |
输出单行描述与 word editor 匹配的所有应用程序。当无法回忆起应用程序的名称时,请使用此命令。 |
help |
在 Bash shell 中,这将显示所有可用的 bash 命令列表。 |
help <name> |
在 Bash shell 中,这将显示有关 的 bash 命令的帮助信息。 |
info <name> |
查看 的所有信息。 |
dpkg -l |
输出基于 Debian 的系统上所有已安装软件包的列表。 |
dpkg -L packageName |
将列出 Debian 上给定软件包的已安装文件和路径详细信息。 |
dpkg -l | grep -i <edit> |
返回所有已安装的.deb软件包,不区分大小写包含的 的结果。 |
less /var/lib/dpkg/available |
返回所有可用包的描述。 |
whatis vim |
列出 vim 的单行描述。 |
<command-name> --help |
显示有关 的使用情况信息。有时使用 command -h 也可以有同样的效果,但并非适用于所有命令。 |
用户身份和Linux世界的谁是谁
| Command | Usability |
|---|---|
hostname |
显示系统的主机名。 |
hostname -f |
显示系统的完全限定域名 (FQDN)。 |
passwd |
更改当前用户的密码。 |
whoami |
当前在终端上登录的用户的用户名。 |
who |
当前登录系统的所有用户的列表。 |
w |
显示当前系统状态、时间、持续时间、当前登录系统的用户列表和其他用户信息。 |
last |
谁最近成功登陆过系统。 |
last root |
root 用户上次登录是什么时候。 |
lastb |
显示系统中的所有的登录失败。 |
chmod |
更改文件或目录的权限 - 读取、写入、执行。 |
进程相关信息
| Command | Usability |
|---|---|
top |
列出按其当前系统资源使用情况排序的所有进程。显示持续更新的进程显示(默认为 3 秒)。使用 q 键退出 top。 |
ps |
列出当前 shell 会话当前正在运行的进程 |
ps -u root |
列出 root 正在运行的所有进程和命令 |
ps aux |
列出当前系统上所有用户的所有进程 |
Section 1.5: 按名称/内容中的模式搜索文件
使用 Linux 命令行 (shell) 最常见的其中一个任务就是是搜索特定名称或包含特定文本的文件/目录。为了实现这一点,您应该熟悉 2 个命令:
按名称查找文件/目录
find /var/www -name '*.css'
这将打印出 /var/www 下所有以 .css 结尾的文件的完整路径/文件名。输出结果示例:
/var/www/html/text-cursor.css
/var/www/html/style.css
有关 find 的更多信息,可以使用下面的命令查看:
man find
查找包含文本的文件
grep font /var/www/html/style.css
这将打印指定文件中包含 pattern 字体的所有行。输出结果示例:
font-weight: bold;
font-family: monospace;
另一个例子:
grep font /var/www/html/
这并没有像你希望的那样工作。您将获得,报错信息说:你指定的是一个目录
grep: /var/www/html/: Is a directory
要让 grep 在你指定的路径中递归的进行工作,您需要使用 -R 选项:
grep -R font /var/www/html/
嘿,很好!看看这个的输出:
/var/www/html/admin/index.php: echo '<font color=red><b>Error: no dice</b></font><br/>';
/var/www/html/admin/index.php: echo '<font color=red><b>Error: try again</b></font><br/>';
/var/www/html/style.css: font-weight: bold;
/var/www/html/style.css: font-family: monospace;
从上面的输出可以看到,当 grep 匹配多个文件时,它会在匹配的行前面加上文件名。如果不需要,你可以使用 -h 选项来删除它。
有关 grep 的更多信息,可以使用下面的命令查看:
man grep
Section 1.6: 文件操作
文件和目录(文件夹的另一个名称)是 Linux 的核心,因此能够从命令行创建、查看、移动和删除它们是非常重要的操作且命令的功能强大。这些文件操作命令允许您执行与图形文件资源管理器相同的任务。
创建一个名为 myFile 的空文本文件:
touch myFile
将 myFile 重命名为 myFirstFile:
mv myFile myFirstFile
查看文件的内容:
cat myFirstFilebash
使用分页的格式查看文件的内容(一次一个屏幕):
less myFirstFile
查看文件的前几行:
head myFirstFile
查看文件的最后几行:
tail myFirstFile
编辑文件:
vi myFirstFile
查看当前工作目录中有哪些文件、文件夹:
ls
创建一个名为 myFirstDirectory 的空目录:
mkdir myFirstDirectory
创建多路径目录:(创建两个目录,src 和 myFirstDirectory)
mkdir -p src/myFirstDirectory
将文件移动到目录中:
mv myFirstFile myFirstDirectory/
您还可以重命名文件:
mv myFirstFile secondFileName
将当前工作目录更改为 myFirstDirectory:
cd myFirstDirectory
删除文件:
rm myFirstFile
移动到父目录(..表示父目录):
cd ..
删除空目录:
rmdir myFirstDirectory
删除非空目录(即包含文件和/或其他目录):
rm -rf myFirstDirectory
在删除目录时,需要注意是删除 ./ 而不应该是 /,删除 / 会把整个文件系统都抹除。
Section 1.7: 文件/目录的细节
ls 命令具有多个选项,可以一起使用以显示更多信息。
详细信息/权限
l 选项显示文件权限、大小和上次修改日期。因此,如果根目录包含一个名为 test 的目录和一个文件 someFile,则命令:
$ ls -l
将输出类似下面的信息:
-rw-r--r-- 1 user users 70 Jul 22 13:36 someFile.txt
drwxrwxrwx 2 user users 4096 Jul 21 07:18 test
权限的格式为 drwxrwxrwx。第一个字符表示文件类型 d(如果它是一个目录),否则。接下来的三个 rwx 是用户对文件拥有的权限,接下来的三个是组对文件拥有的权限,最后三个是其他人对文件拥有的权限。
rwx 的 r 代表是否可以读取文件,w 表示是否可以修改文件,x 代表是否可以执行文件。如果未授予任何权限,则 - 将代替 r、w 或 x。
因此,从上面看,用户可以读取和修改 someFile.txt 但该组只有只读权限。
要更改权限,如果您有 sudo 权限,则可以使用 chmod ### fileName 命令。r 由值 4 表示,w 由 2 表示,x 由 1 表示。所以,如果只是你希望能够将内容修改到 test 目录
Owner rwx = 4+2+1 = 7
Group r-x = 4+0+1 = 5
Other r-x = 4+0+1 = 5
所以整个命令是:
chmod 755 test
现在执行 ls -l 将显示如下内容:
drwxr-xr-x 2 user users 4096 Jul 21 07:20 test
用户可阅读的大小
-h 选项与 -l 选项通常都会结合使用,显示用户可读的文件大小。运行
$ ls -lh
将输出:
total 4166
-rw-r--r-- 1 user users 70 Jul 22 13:36 someFile.txt
drwxrwxrwx 2 user users 4.0K Jul 21 07:18 test
隐藏的文件
要查看隐藏的文件,请使用 -a 选项。例如
$ ls -a
结果输出:
.profile
someFile.txt
test
目录总大小
要查看当前目录的大小,请使用 -s 选项(-h 选项也可用于使大小更具可读性)。
$ ls -s
结果输出:
total 4166
someFile.txt test
递归视图
假设 test 目录有一个文件 anotherFile,你想从根文件夹中看到它,你可以使用 R 选项来列出递归树。
$ ls -R
结果输出:
.:
someFile.txt test
./test:
anotherFile