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