# Linux 命令行基础
# 参考文档
# 零碎
- 区分大小写
- 一切皆文件
- 图形化界面只是Linux的一个软件而已,而不是操作系统。
- 当用户以普通用户的身份操控系统时,家目录是唯一允许用户写入文件的地方。
- 多个命令可以同时执行,多个命令之间用分号隔开
# shell 简介
- shell 就是一个程序,它接受从键盘输入的命令, 然后把命令传递给操作系统去执行。
- 使用图形用户界面时,一个和 shell 交互的叫做终端仿真器的程序,即
terminal
。 - shell提示符
[me@linuxbox ~]
- 结构是
用户名@主机名 + 当前工作目录最后以 $ 结尾
- 如果结尾是
#
,说明当前终端会话拥有超级管理员权限。
- 在终端内不使用
Ctrl+C
复制,Ctrl+V
也一样,这两个组合早于Windows
的定义,在 Linux 中,他们有着不同的含义。即使使用了它们,也不起作用。 - 复制粘贴
- 按下鼠标左键选中要复制的部分,当选中的同时,这些部分就已经被放到剪贴板了。
- 粘贴的话按下鼠标中键(鼠标滚轮)会粘贴到光标的位置。
- 虚拟终端
- 即使终端仿真器没有运行,在后台仍然有几个终端会话运行着。它们叫做虚拟终端 或者是虚拟控制台。
- 在大多数 Linux 发行版中,这些终端会话都可以通过按下
Ctrl-Alt-F1
到Ctrl-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 -'
- 例如:将一个命令的组合重新命名为 foo,
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
是指定操作。- 在这种情况下是,替换(查找与替代)。
- 输入以下命令
- 将整个文件中的单词 Line 更改为 line
- 我们也可以指定一个需要用户确认的替换命令。通过添加一个
c
字符到这个命令的末尾,来完成这个替换命令。y
,执行替换操作n
,跳过这个匹配的实例a
,对这个及随后所有匹配的字符串执行替换操作。q or esc
,退出替换操作。l
执行这次替换并退出。l
是 last 的简写。
Ctrl-e
,Ctrl-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
选项可以查看该命令下的所有参数 - 当删除链接指向的文件时,该链接不会被删除,但是不再指向任何东西,被称为坏链接。
- 当删除链接,文件依然存在。
- 如果往该链接中写入东西,那么该链接指向的文件也被写入。
- 类似于 Windows 的快捷方式,建立一个文件指向另一个文件。
在命令后加
- 硬链接
- 一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联与链接本身不在同一个磁盘分区上的文件。
- 一个硬链接不能关联一个目录。
# 重定向
- 标准输出重定向
- 使用
>
重定向符后接文件名将标准输出重定向到除屏幕以外的另一个文件。 - 例如
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
# 讨论区
由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。
点击查看评论区内容,渴望您的宝贵建议~
← Linux 总览 Linux 命令行常用 →