# Linux 命令行基础

# 参考文档

# 零碎

  • 区分大小写
  • 一切皆文件
  • 图形化界面只是Linux的一个软件而已,而不是操作系统。
  • 当用户以普通用户的身份操控系统时,家目录是唯一允许用户写入文件的地方。
  • 多个命令可以同时执行,多个命令之间用分号隔开

# shell 简介

  • shell 就是一个程序,它接受从键盘输入的命令, 然后把命令传递给操作系统去执行。
  • 使用图形用户界面时,一个和 shell 交互的叫做终端仿真器的程序,即 terminal
  • shell提示符
    • [me@linuxbox ~]
    • 结构是 用户名@主机名 + 当前工作目录最后以 $ 结尾
    • 如果结尾是 #,说明当前终端会话拥有超级管理员权限。
  • 在终端内不使用 Ctrl+C 复制,Ctrl+V 也一样,这两个组合早于 Windows 的定义,在 Linux 中,他们有着不同的含义。即使使用了它们,也不起作用。
  • 复制粘贴
    • 按下鼠标左键选中要复制的部分,当选中的同时,这些部分就已经被放到剪贴板了。
    • 粘贴的话按下鼠标中键(鼠标滚轮)会粘贴到光标的位置。
  • 虚拟终端
    • 即使终端仿真器没有运行,在后台仍然有几个终端会话运行着。它们叫做虚拟终端 或者是虚拟控制台。
    • 在大多数 Linux 发行版中,这些终端会话都可以通过按下 Ctrl-Alt-F1Ctrl-Alt-F6 访问。当一个会话被访问的时候, 它会显示登录提示框,我们需要输入用户名和密码。要从一个虚拟控制台转换到另一个, 按下 Alt 和 F1-F6(中的一个)。返回图形桌面,按下 Alt-F7

# 什么是命令?

  • 是一个可执行程序,就像我们所看到的位于目录 /usr/bin 中的文件一样。
    • 这一类程序可以是用诸如 C 和 C++ 语言写成的程序编译的二进制文件,也可以是由诸如shell,perl,python,ruby等等脚本语言写成的程序 。
  • 是一个内建于 shell 自身的命令。
    • bash 支持若干命令,内部叫做 shell 内部命令 (builtins)。
    • 例如,cd 命令,就是一个 shell 内部命令。
  • 是一个 shell 函数。
    • 这些是小规模的 shell 脚本,它们混合到环境变量中。
  • 是一个命令别名。
    • 我们可以定义自己的命令,建立在其它命令之上。

# 基础命令

# 系统命令

# date

显示当前系统时间和日期

  • 例如 Tue 29 Jun 2021 09:45:21 AM CST
  • 星期 日 月 年 时间 上午下午
  • CST
    • GMT(Greenwich Mean Time) 代表格林尼治标准时间。
    • 而 CST 却同时可以代表如下 4 个不同的时区:
      • Central Standard Time (USA) UT-6:00
      • Central Standard Time (Australia) UT+9:30
      • China Standard Time UT+8:00
      • Cuba Standard Time UT-4:00
    • CST 可以同时表示美国、澳大利亚、中国、古巴四个国家的标准时间。
    • 为了避免错误,还是不要使用 CST 时间,而尽量采用 GMT 时间。

# cal

calendar,默认显示当前月的日历

# df

Disk Free,剩余空间

# free

剩余内存

  • free -h 以可读的方式显示
  • free -g 以 G 为单位显示
  • free -m 以 M 为单位显示

# pwd

print working directory,打印当前工作目录。

# clear

清空屏幕

# history

显示历史列表内容

  • !23 表示为显示历史列表中的第 23 行。
    • 执行完之后,可以直接回车以执行这条命令。
  • history -c 清除所有的命令历史

# exit

结束会话

# 文件管理

# file

file filename,确定文件类型。

# ls

列出当前目录的内容,list。

  • 得到更多细节
    • 使用 ls 命令的“-l”选项,则结果以长模式输出。
  • 可以指定目录
  • 可以列出多个目录的内容
  • 以 “.” 字符开头的文件名是隐藏文件。这仅表示,ls 命令不能列出它们,用 ls -a 命令就可以了。

# cd

Change Directory,更改当前工作目录。

  • cd - 默认是到用户的家目录,即 /home/ 用户名。
    • 符号 . 指的是工作目录,.. 指的是工作目录的父目录。
  • 可以省略 ./,它是隐含的。
  • 如果不指定一个文件的路径,那它被默认为在当前工作目录下。

# less

可以滚动查看文档,开启以后按 q 键退出。

# mkdir

创建目录

  • 可以同时创建多个
    • mkdir dir1 dir2
  • 多级创建
    • mkdir -p

# cp

copy,复制文件或者目录。

  • 复制一个,cp 文件名/目录名(从哪里) 文件名/目录名(到哪里)
  • 复制多个,cp 文件名/目录名(从哪里) 目录名(到哪里)
  • 选项和参数:
    • -a--archive
      • 复制文件和目录,以及它们的属性,包括拥有者和所有权。
      • 通常,副本具有用户所操作文件的默认属性。
    • -i--interactive
      • 在重写已存在文件之前,提示用户确认。
      • 如果这个选项不指定, cp 命令会默认重写文件。
    • -r--recursive
      • 递归地复制目录及目录中的内容。
      • 当复制目录时, 需要这个选项(或者 -a 选项)。
    • -u--update
      • 当把文件从一个目录复制到另一个目录时,仅复制目标目录中不存在的文件,或者是文件内容新于目标目录中已经存在的文件。
    • -v--verbose
      • 显示翔实的命令操作信息。
  • 示例:
    • cp file1 file2
      • 复制文件 file1 内容到文件 file2。
      • 如果 file2 已经存在,file2 的内容会被 file1 的内容重写。
      • 如果 file2 不存在,则会创建 file2。
    • cp -i file1 file2
      • 这条命令和上面的命令一样,除了如果文件 file2 存在的话,在文件 file2 被重写之前,会提示用户确认信息。
    • cp file1 file2 dir1
      • 复制文件 file1 和文件 file2 到目录 dir1。
      • 目录 dir1 必须存在。
    • cp dir1/ dir2
      • 使用一个通配符,在目录 dir1 中的所有文件都被复制到目录 dir2 中。
      • dir2 必须已经存在。
    • cp -r dir1 dir2
      • 复制目录 dir1 中的内容到目录 dir2。
      • 如果目录 dir2 不存在,创建目录 dir2,操作完成后,目录 dir2 中的内容和 dir1 中的一样。
      • 如果目录 dir2 存在,则目录 dir1 (和目录中的内容)将会被复制到 dir2 中。

# mv

move,移动和重命名文件。

  • 如果两个文件在同一个目录下,那就是改名;
  • 参数选项:
    • -i--interactive
      • 在重写一个已经存在的文件之前,提示用户确认信息。
      • 如果不指定这个选项,mv 命令会默认重写文件内容。
    • -u--update
      • 当把文件从一个目录移动另一个目录时,只是移动不存在的文件, 或者文件内容新于目标目录相对应文件的内容。
    • -v--verbose
      • 当操作 mv 命令时,显示翔实的操作信息。
  • 示例:
    • mv file1 file2
      • 移动 file1 到 file2。
      • 如果 file2 存在,它的内容会被 file1 的内容重写。
      • 如果 file2 不存在,则创建 file2。
      • 这两种情况下,file1 都不再存在。
    • mv -i file1 file2
      • 除了如果 file2 存在的话,在 file2 被重写之前,用户会得到 提示信息外,这个和上面的选项一样。
    • mv file1 file2 dir1
      • 移动 file1 和 file2 到目录 dir1 中。
      • dir1 必须已经存在。
    • mv dir1 dir2
      • 如果目录 dir2 不存在,创建目录 dir2,并且移动目录 dir1 的内容到 目录 dir2 中,同时删除目录 dir1。
      • 如果目录 dir2 存在,移动目录 dir1(及它的内容)到目录 dir2。

# rm

remove,删除文件或目录。

  • 选项参数:
    • -i--interactive
      • 在删除已存在的文件前,提示用户确认信息。
      • 如果不指定这个选项,rm 会默默地删除文件
    • -r--recursive
      • 递归地删除文件,这意味着,如果要删除一个目录,而此目录又包含子目录,那么子目录也会被删除。
      • 要删除一个目录,必须指定这个选项。
    • -f--force
      • 忽视不存在的文件,不显示提示信息。
      • 这选项覆盖了--interactive选项。
    • -v--verbose
      • 在执行 rm 命令时,显示翔实的操作信息。
  • 示例:
    • rm file1
      • 默默地删除文件
    • rm -i file1
      • 除了在删除文件之前,提示用户确认信息之外,和上面的命令作用一样。
    • rm -r file1 dir1
      • 删除文件 file1, 目录 dir1,及 dir1 中的内容。
    • rm -rf file1 dir1
      • 同上,除了如果文件 file1,或目录 dir1 不存在的话,rm 仍会继续执行。

# ln

link,创建链接,硬/软

硬链接:ln file link

软链接:ln -s item link

注意:创建软链接的时候,一定要使用绝对路径!!!

# cat

catenate,连接文件。

输入 cat 以后,并没有任何反应,但是它会从标准输入读入数据,又因为标准输入默认情况下连接到键盘,所以它正在等待我们从键盘上输入数据。

# | 管道

管道,管道是将前一个命令的输出作为后一个命令的输入。

  • 格式: command1 | command2
  • 过滤器
    • 多个命令放在一起组成的管道线。

# uniq

忽略重复行。

# wc

Word Count,打印行数、字数、字节数。

  • -l 只显示行号

# grep

打印匹配行

  • -i
    • 使得 grep 在执行搜索时忽略大小写(通常,搜索是大小写 敏感的)
  • -v
    • 选项会告诉 grep 只打印不匹配的行。

# head/tail

打印开头结尾部分。

# sort - 排序并输出

  • ls -lt
    • 按照时间降序
  • ls -ltr
    • 按照时间升序

# tee

将输出正常显示的同时写入到文件。

  • echo aaa | tee file
    • 在显示 "aaa" 的同时,将 "aaa" 写入到文件 file

# 关于命令的命令

  • type
    • 显示命令类型
  • where
    • 显示所有的可执行程序的位置
  • which
    • 显示一个可执行程序的位置(通过 PATH 查找),即你用到的那个
  • help
    • 帮助文档
  • --help
    • 用户信息
  • man
    • 程序手册页
  • apropos
    • 相当于 man -k 命令,用来通过关键字查找定位手册页的名字和描述,显示适当的命令。
  • whatis
    • 显示非常简洁的命令说明
  • info
    • 显示程序info条目
  • alias
    • 别名
    • 格式为 alias name='string'
    • 因为多个命令可以同时执行,那么可以将这多个命令合并在一起,并起一个别名
      • 例如:将一个命令的组合重新命名为 foo,
        • alias foo='cd /usr; ls; cd -'
  • unalias
    • 删除别名
    • 例如:
      • unalias foo

# VIM 命令集

  • 在命令之前加上一个数字,可以指定命令执行的次数。
    • 例如:
      • 命令 5j 将光标下移 5 行。

# 移动光标

  • l or 右箭头 - 向右移动一个字符
  • h or 左箭头 - 向左移动一个字符
  • j or 下箭头 - 向下移动一行
  • k or 上箭头 - 向上移动一行
  • 0 (零按键) - 移动到当前行的行首。
  • ^ - 移动到当前行的第一个非空字符。
  • $ - 移动到当前行的末尾。
  • w - 移动到下一个单词或标点符号的开头。
  • W - 移动到下一个单词的开头,忽略标点符号。
  • b - 移动到上一个单词或标点符号的开头。
  • B - 移动到上一个单词的开头,忽略标点符号。
  • Ctrl-f or Page Down - 向下翻一页
  • Ctrl-b or Page Up - 向上翻一页
  • numberG - 移动到第 number 行。例如,1G 移动到文件的第一行。
  • G - 移动到文件末尾。

# 操作文本

  • A - 光标移动到行尾
  • o - 当前行的下方打开一行。
  • O - 当前行的上方打开一行。
  • u - 按键,撤销我们的修改。
  • x - 删除当前字符
  • 3x - 删除当前字符及其后的两个字符。
  • dd - 删除当前行。
  • 5dd - 删除当前行及随后的四行文本。
  • dW - 删除从光标位置开始到下一个单词的开头。
  • d$ - 删除从光标位置开始到当前行的行尾。
  • d0 - 删除从光标位置开始到当前行的行首。
  • d^ - 删除从光标位置开始到文本行的第一个非空字符。
  • dG - 删除从当前行到文件的末尾。
  • d20G - 删除从当前行到文件的第20行。
  • yy - 复制当前行。
  • 5yy - 复制当前行及随后的四行文本。
  • yW - 复制从当前光标位置到下一个单词的开头。
  • y$ - 复制从当前光标位置到当前行的末尾。
  • y0 - 复制从当前光标位置到行首。
  • y^ - 复制从当前光标位置到文本行的第一个非空字符。
  • yG - 复制从当前行到文件末尾。
  • y20G - 复制从当前行到文件的第20行。
  • p - 粘贴当前行之下
  • P - 粘贴到当前行之前
  • J - 将下一行提到改行末尾

# 查找

  • 查找一行
    • f 命令能搜索一特定行,在当前行中检索,并将光标移动到下一个匹配的字符上。
    • 例如,命令 fa 会把光标定位到同一行中下一个出现的”a”字符上。
    • 在进行了一次行内搜索后,输入分号能重复这次搜索。
  • 整个文件中查找,按下 /,在屏幕最下面会出现一个 /,接着输入你要搜索的单词或者内容,按 n 重复之前的搜索。
  • vi 使用 ex 命令来执行查找和替代操作(vi 中叫做“替换”)。
    • 将整个文件中的单词 Line 更改为 line
      • 输入以下命令 ::%s/Line/line/g
        • 是命令模式
        • % 是表指定要操作的行数
          • % 是一个快捷方式,表示从第一行到最后一行。
          • 另外,操作范围也可以用 1,5 来代替(因为我们的文件只有5行文本),或者用 1,$ 来代替,意思是 “从第一行到文件的最后一行。”
          • 如果省略了文本行的范围,那么操作只对当前行生效。
        • s 是指定操作。
          • 在这种情况下是,替换(查找与替代)。
  • 我们也可以指定一个需要用户确认的替换命令。通过添加一个 c 字符到这个命令的末尾,来完成这个替换命令。
    • y,执行替换操作
    • n,跳过这个匹配的实例
    • a,对这个及随后所有匹配的字符串执行替换操作。
    • q or esc,退出替换操作。
    • l执行这次替换并退出。
      • l 是 last 的简写。
    • Ctrl-eCtrl-y
      • 分别是向下滚动和向上滚动。
      • 用于查看建议替换的上下文。

# 打开多个文件

  • vi file1 file2,打开多个文件
    • 首先显示第一个文件,按 n 切换到下一个文件,按 N 切换到上一个文件。
    • 查看正在编辑的文件列表,使用 :buffers 命令。
      • 切换文件 buffer 2(列表的序号)
    • 打开另一个文件并编辑
      • 例如 vi foo.txt 打开了一个文件
      • 这时 :e ls-output.txt 加入第二个文件。
      • **注意:**当文件由 :e 命令加载,你将无法用 :n:N 命令来切换文件。这时要使用 :buffer 命令加缓冲区号码,来切换文件。

# 跨文件操作

  • 跨文件复制黏贴
    • 例如从一个文件到第二个文件的流程 ::buffer 1,把光标移到第一行,并且输入 yy 来复制这一行。
    • 切换到第二个 :buffer 2,移动光标到粘贴位置,输入 p 命令粘贴。
  • 插入整个文件到另一个文件
    • vi ls-output.txt
    • 打开一个文件
      • :r foo.txt
      • 这个 :r 命令(是 read 的简称)把指定的文件插入到光标位置之前。

# ZZ

退出并保存,相当于 :wq

# 快捷键/组合键

# 移动光标

  • Ctrl-a - 移动光标到行首。
  • Ctrl-e - 移动光标到行尾。
  • Ctrl-f - 光标前移一个字符;和右箭头作用一样。
  • Ctrl-b - 光标后移一个字符;和左箭头作用一样。
  • Alt-f - 光标前移一个字。
  • Alt-b - 光标后移一个字。
  • Ctrl-l 清空屏幕,移动光标到左上角。
    • clear 命令完成同样的工作。

# 修改文本

  • Ctrl-d - 删除光标位置的字符。
  • Ctrl-t - 光标位置的字符和光标前面的字符互换位置。
  • Alt-t - 光标位置的字和其前面的字互换位置。
  • Alt-l - 把从光标位置到字尾的字符转换成小写字母。
  • Alt-u - 把从光标位置到字尾的字符转换成大写字母。

# 复制粘贴

  • Ctrl-k - 剪切从光标位置到行尾的文本。
  • Ctrl-u - 剪切从光标位置到行首的文本。
  • Alt-d - 剪切从光标位置到词尾的文本。
  • Alt-Backspace - 剪切从光标位置到词头的文本。如果光标在一个单词的开头,剪切前一个单词。
  • Ctrl-y - 把剪切环中的文本粘贴到光标位置。

# 自动补全命令

  • Alt-? 显示可能的自动补全列表。
    • 在大多数系统中,你也可以完成这个通过按 两次 tab 键,这会更容易些。
  • Alt-* 插入所有可能的自动补全。
    • 当你想要使用多个可能的匹配项时,这个很有帮助。

# 历史命令

  • Ctrl-p 移动到上一个历史条目。类似于上箭头按键。
  • Ctrl-n 移动到下一个历史条目。类似于下箭头按键。
  • Alt-< 移动到历史列表开头。
  • Alt-> 移动到历史列表结尾,即当前命令行。
  • Ctrl-r 反向增量搜索。从当前命令行开始,向上增量搜索。
  • Alt-p 反向搜索,非增量搜索。(输入要查找的字符串,按下 Enter 来执行搜索)。
  • Alt-n 向前搜索,非增量。
  • Ctrl-o 执行历史列表中的当前项,并移到下一个。如果你想要执行历史列表中一系列的命令,这很方便。

# 历史展开命令

  • !! 重复最后一次执行的命令。
    • 可能按下上箭头按键和 enter 键更容易些。
  • !number 重复历史列表中第 number 行的命令。
  • !string 重复最近历史列表中,以这个字符串开头的命令。
  • !?string 重复最近历史列表中,包含这个字符串的命令。

# 通配符

  • - 可以表示任意字符,包括 0 个或 1 个。
  • ? 可以表示任意一个字符
  • [characters] 匹配任意一个属于字符集中的字符
  • [!characters] 匹配任意一个不是字符集中的字符
  • [[:class:]] 匹配任意一个属于指定字符类中的字符
  • [:alnum:] 匹配任意一个字母或数字
  • [:alpha:] 匹配任意一个字母
  • [:digit:] 匹配任意一个数字
  • [:lower:] 匹配任意一个小写字母
  • [:upper:] 匹配任意一个大写字母

# 转义字符

  • \a 响铃(”警告”-导致计算机嘟嘟响)
  • \b 退格符
  • \n 新的一行。在类 Unix 系统中,产生换行。
  • \r 回车符
  • \t 制表符

# 链接

  • 符号链接 - 软链接
    • 类似于 Windows 的快捷方式,建立一个文件指向另一个文件。 在命令后加 --help 选项可以查看该命令下的所有参数
    • 当删除链接指向的文件时,该链接不会被删除,但是不再指向任何东西,被称为坏链接。
    • 当删除链接,文件依然存在。
    • 如果往该链接中写入东西,那么该链接指向的文件也被写入。
  • 硬链接
    • 一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联与链接本身不在同一个磁盘分区上的文件。
    • 一个硬链接不能关联一个目录。

# 重定向

  • 标准输出重定向
    • 使用 > 重定向符后接文件名将标准输出重定向到除屏幕以外的另一个文件。
    • 例如 ls -l /usr/bin > ls-output.txt
    • 技巧清空一个文件内容(或者创建一个新的空文件)
      • > ls-output.txt
      • 因为,当我们使用 > 重定向符来重定向输出结果时,目标文件总是从开头被重写。
      • 简单地使用重定向符,没有命令在它之前,这会清空一个已存在文件的内容或是创建一个新的空文件。
    • >>> 的区别
      • > 表示以覆盖方式重定向提示信息,也就是说如果目的地原来有内容,将把原来的内容清除掉,用新内容填充;
      • >> 表示以追加的方式重定向提示信息,也就是说,如果目的地原来有内容,原有的内容将保持不变,在原有内容之后追加新内容。
  • 标准错误重定向
    • 标准错误重定向没有专用的重定向操作符,参考其文件描述符。
    • 文件流的前三个称作:
      • 标准输入
      • 输出
      • 错误
    • shell 内部分别将其称为文件描述符:
      • 0
      • 1
      • 2
    • 2> 来进行重定向到标准错误
  • 标准输出和错误到同一个文件
    • ls -l /bin/usr > ls-output.txt 2>&1
    • 还可以 ls -l /bin/usr &> ls-output.txt 使用 &> 符号进行操作。
  • 处理不需要的文件
    • 重定向到 /dev/null,这个文件是系统设备,叫做位存储桶,它可以接受输入,并且对输入不做任何处理。

# 字符展开

  • 字符展开
    • [me@linuxbox ~]$ echo *
    • Desktop Documents ls-output.txt Music Pictures Public Templates Videos
  • 路径名展开
  • 波浪符展开
  • 算数表达式展开
  • 花括号展开
  • 参数展开
    • 要查看有效的变量列表,可以试试这个:printenv | less

# 软件包管理

  • 包管理系统
    • Debian Style (.deb)Debian, Ubuntu, Xandros, Linspire
    • Red Hat Style (.rpm)Fedora, CentOS, Red Hat Enterprise Linux, OpenSUSE, Mandriva, PCLinuxOS
  • .tar

# 讨论区

由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。

点击查看评论区内容,渴望您的宝贵建议~
Last Updated: 10/11/2022, 10:59:16 AM