1.1 前言
作为 Java
后端开发的我们,开发的项目绝大部分都是部署在 Linux
系统上的,因此熟练使用一些常用的 Linux
命令不管是对于日常开发、服务部署或者查找问题都非常有用。以下整理了一些常用的 Linux
常用命令。
1.2 文件管理
1.2.1 ls 命令
ls
命令是 Linux
最常用的命令之一,其功能是列出指定目录下的内容及其相关属性信息。默认状态下,ls
命令会列出当前目录的内容,它也可以带上一些参数来实现更多的功能。
语法格式:ls [选项] [文件]
常用参数
参数 | 描述 |
---|---|
-a | 显示所有文件及目录(包括以 . 开头的隐藏文件) |
-l | 使用长格式列出文件及目录 |
-r | 将文件以相反次序显示(默认按照英文字母次序) |
-t | 根据最后的修改时间排序 |
-A | 同 -a ,但是不列出 . (当前目录)以及 .. (父级目录) |
-S | 根据文件大小排序 |
-R | 递归列出所有子目录 |
Examples
ls -a # 列出所有文件(包括隐藏文件)
ls -l # 列出文件的详细信息
ls / # 列出根目录(/)下的所有目录
ls -ltr s* # 列出当前目录下所有名称是 s 开头的文件
ls -AS # 列出当前目录下所有文件及目录并以文件大小进行排序
1.2.2 chown 命令
Linux
是一种多用户多任务的操作系统,所有的文件都有一个拥有者。chown
命令就是用来将指定文件的拥有者改为指定的用户或者组(PS:用户和组都可以是名称或者其 ID
),文件是以空格分开的要改变权限的文件列表,支持通配符。
语法格式:chown [参数]
常用参数
参数 | 描述 |
---|---|
-R | 对当前目录下的所有文件与子目录进行相同的拥有者变更 |
-c | 若该文件拥有者确实已经更改,才显示其更改动作 |
-f | 若该文件拥有者无法更改也不显示错误信息 |
-v | 显示拥有者变更的详细信息 |
--version | 显示版本 |
Examples
# 将 change_usergroup_and_user_demo.txt 文件用户组与用户都改为 mghio
[root@mghio ~]# ll change_usergroup_and_user_demo.txt
-rw-r--r-- 1 root root 56 Dec 21 10:17 change_usergroup_and_user_demo.txt
[root@mghio ~]# chown mghio:mghio change_usergroup_and_user_demo.txt
[root@mghio ~]# ll change_usergroup_and_user_demo.txt
-rw-r--r-- 1 mghio mghio 56 Dec 21 10:17 change_usergroup_and_user_demo.txt
# 显示其更改动作
[root@mghio ~]# ll change_usergroup_and_user_demo.txt
-rw-r--r-- 1 root root 45 Dec 21 10:30 change_usergroup_and_user_demo.txt
[root@mghio ~]# chown -c mghio:mghio change_usergroup_and_user_demo.txt
changed ownership of 'change_usergroup_and_user_demo.txt' to mghio:mghio
1.2.3 cp 命令
cp
命令为英文单词 copy
的缩写,功能为复制文件或目录。cp
命令可以将多个文件复制到一个具体的文件名或者一个已经存在的目录下,也可以同时复制多个文件到一个指定的目录中。
语法格式:cp [参数] [文件]
常用参数
参数 | 描述 |
---|---|
-f | 若目标文件已经存在,则直接覆盖原文件 |
-i | 若目标文件已经存在,则会询问是否覆盖 |
-p | 保留原文件或者目录的属性 |
-r | 递归复制文件和目录 |
-d | 当复制符号链接时,把目标文件或者目录也建立符号链接,并指向和原文件或目录连接的原始文件或目录 |
-l | 对原文件建立连接,而非复制文件 |
-s | 对原文件建立符合连接,而非复制文件 |
-b | 覆盖已经存在的文件目标前将目标文件备份 |
-v | 详细显示 cp 命令的执行过程 |
Examples
# 复制目录
cp -R source_dir1 dest_dir2/
# 将文件 demo1.txt 改名为 demo2.txt
cp -f demo1.txt demo2.txt
# 复制多个文件
cp -r file1 file2 file3 dest_dir
1.2.4 mkdir 命令
mkdir
命令是 make directories
的缩写,其功能是用来创建目录。默认状态下,如果要创建的目录如果已经存在,则提示已存在,而不会继续创建目录。所有我们在创建目录时,应该要保证新建的目录与它所在的目录下的文件没有重名,同时该命令还可以一次性创建多个目录。
语法格式:mkdir [参数] [目录]
常用参数
参数 | 描述 |
---|---|
-p | 递归创建多级目录 |
-m | 建立目录的同时设置目录的权限 |
-v | 显示目录的常见过程 |
Examples
# 在当前目录下,创建一个名为 dir 的子目录
mkdir dir
# 在目录 /usr/mghio 下建立子目录 dir,并且设置文件属主有读(4)、写(2)和执行(1)权限,其它用户无法访问
mkdir -m 700 /usr/mghio/dir
# 一次性创建目录 dir1、dir2、dir3
mkdir dir1 dir2 dir3
# 递归创建目录
mkdir -p /mghio/dir
1.2.5 mv 命令
mv
命令为英文单词 move
的缩写,功能为移动文件或者对文件重新命名。mv
与 cp
命令的结果不同。mv
命令是将文件整个移走,文件名发生改变,但是个数没有增加。而 cp
命令是对文件进行复制操作,文件个数增加。
语法格式:mv [参数]
常用参数
参数 | 描述 |
---|---|
-i | 若存在同名文件,则会询问是否覆盖 |
-f | 覆盖已经存在的文件时,不进行任何提示 |
-b | 当文件存在时,覆盖前为其创建一个备份 |
-u | 当原文件比目标文件新或者目标文件不存在时,才会执行 |
Examples
# 将文件 file1 重命名为 file2
mv file1 file2
# 将文件 file 移动到目录 dest_dir
mv file /dest_dir
# 将目录 dir 下的所有文件移到当前目录
mv /dir/* .
1.3 文档编辑
1.3.1 cat 命令
在 Linux
系统中有很多用于查看文件内容的命令,cat
命令就是用来查看内容较少
的纯文本内容文件的。当文件内容较大时,文本内容会在屏幕上快速滚屏,我们通常都看不到所显示的内容。对于较长文件内容可以按 Ctrl+S
键来停止滚屏,以及 Ctrl+Q
键来恢复滚屏,按 Ctrl+C(中断)
键则可以终止该命令的执行。对于大文件,推荐使用下文说的 more
命令。
语法格式:cat [参数] [文件]
常用参数
参数 | 描述 | |
---|---|---|
-n | 显示行数(一个空行显示一个编号) | |
-s | 显示行数(多个空行只算一个编号) | |
-b | 显示行数(空行不编号) | |
-E | 每行结束显示 $ 符号 |
|
-T | 将 TAB 字符显示为 `^\ |
` 符号 |
--version | 显示版本信息 |
Examples
# 查看文件内容
cat demo.txt
# 查看文件内容,并显示行号
cat -n demo.txt
# 产查看文件的内容,并添加行数编号后输出到另外一个文件中
cat -n mghio.log > mghio_with_line_number.log
# 清空文件内容
cat /dev/null > /mghio/demo.txt
# 持续写入文件内容,直到碰到 `EOF` 符号后结束并保存
cat > demo.txt << EOF
> Hello, World
> mghio
> EOF
1.3.2 more 命令
more
命令用于将内容较长的文本文件内容(无法在一屏显示完)进行分屏显示,并且支持显示时定位关键字。对于内容比较少的文本内容推荐使用 cat
命令查看。
语法格式:more [参数] [文件]
常用参数
参数 | 描述 |
---|---|
-num | 指定每屏显示的内容行数 |
-l | more 在通常情况下把 ^L 当遇到这个字符就会暂停,这个参数可以屏蔽这个特性 |
-f | 计算实际的行数,而非自动换行的行数 |
-p | 先清除屏幕在显示文本文件的剩余内容 |
-c | 与 -p 相似,不滚屏,先显示内容在清除内容 |
-s | 多个空行压缩成一行显示 |
-u | 禁止下划线 |
+/pattern | 在每个文档显示前搜寻该字(pattern ),然后该字串之后开始显示 |
+num | 从第 num 行开始显示 |
查看时的命令操作
命令 | 描述 |
---|---|
Space 键 | 显示文本的下一屏内容 |
Enter 键 | 向下 n 行,需要定义,默认为 1 行 |
\ 键 |
接着输入一个模式,可以在文本中寻找下一个相匹配的模式 |
H 键 | 显示帮助屏 |
B 键 | 显示上一屏内容 |
Q 键 | 退出 more 命令 |
Ctrl + F、空格键 | 向下滚动一屏 |
Ctrl + B | 返回上一屏 |
= | 输出当前的行号 |
:f | 输出文件名和当前的行号 |
V | 调用 vi 编辑器 |
! | 调用 Shell , 并执行命令 |
Examples
# 显示文件 demo.txt 的内容和已显示的百分比,显示之前先清屏
more -dc demo.txt
# 显示文件 demo.txt 的内容,每 10 行显示一次,而且在显示之前先清屏
more -c -10 demo.txt
# 显示文件 demo.txt 的内容,每 5 行显示一次,而且在显示之后再清屏
more -p -5 demo.txt
# 从第 20 行开始显示文件 demo.txt 的内容
more +20 demo.txt
1.3.3 tail 命令
tial
命令用于显示文件尾部的内容,默认在屏幕上显示指定文件的末尾 10 行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题,如果没有指定文件或者文件名为 -
,则读取标准输入。
语法格式:tail [参数]
常用参数
命令 | 描述 |
---|---|
--retry | 即是在 tail 命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与 —f 一起使用 |
-c |
输出文件尾部的 N (N 为整数) 个字节内容 |
-f | 显示文件最新追加的内容 |
-n |
输出文件的尾部 N (N 为整数) 行内容 |
Examples
# 显示文件 demo.txt 的最后 10 行
tail demo.txt
# 显示文件 demo.txt 的内容,从第 20 行至文件末尾
tail +20 demo.txt
# 显示文件 demo.txt 的最后 10 个字符
tail -c 10 demo.txt
1.3.4 grep 命令
grep
是英文 global search regular expression and print out the line
的简称。是全面搜索正则表达式,并将其打印出来。这个命令可以结合正则表达式使用,使用非常广泛。grep
命令的选项用于对搜索过程的补充,而其命令的模式十分灵活,可以是变量、字符串、正则表达式,需要注意的是,当我们的模式中包含了空格的话,要使用双引号将其引起来。
语法格式:grep [参数]
参数列表
命令 | 描述 |
---|---|
-i | 搜索时,忽略大小写 |
-c | 只输出匹配行的数量 |
-l | 只列出符合匹配的文件名,不列出具体匹配行 |
-n | 列出所有匹配行,显示行号 |
-h | 查询多文件时不显示文件名 |
-s | 不显示不存在、没有匹配文本的错误信息 |
-v | 显示不包含匹配文本的所有行 |
-w | 匹配整词 |
-x | 匹配整行 |
-r | 递归搜索 |
-q | 禁止输出任何结果,已退出状态表示搜索是否成功 |
-b | 打印匹配行距文件头部的偏移量(以字节为单位) |
-o | 与 -b 结合使用,打印匹配的词距文件头部的偏移量(以字节为单位) |
Examples
# 支持多文件查询并支持使用通配符
[root@mghio ~]# grep mghio file_* /usr/demo
file_1:mghio
file_1:mghioddkjflkdjfdlkfjlsdkj
file_2:mghio
file_4:dkfjlmghioejfkds
file_4:mghio djftgf
file_4:twetmghioedkfgj
# 列出所有的匹配行,并显示行号
[root@mghio ~]# grep mghio file_* /usr/demo
file_1:1:mghio
file_1:3:mghioddkjflkdjfdlkfjlsdkj
file_2:4:mghio
file_4:8:dkfjlmghioejfkds
file_4:11:mghio djftgf
file_4:20:twetmghioedkfgj
1.3.5 echo 命令
echo
命令用于在终端设备上输出字符串或者变量提取后的值,这是在 Linux
系统中最常用的几个命令之一,在 Linux
系统中,人们一般使用在变量前加上 $
符号的方式提取出变量的值,例如:$PATH
,然后再用 echo
命令予以输出。或者直接使用 echo
命令输出一段字符串到屏幕上,起到给用户提示的作用。
语法格式:echo [参数] [字符串]
常用参数
命令 | 描述 |
---|---|
-n | 不输出结尾的换行符 |
-e"a" | 发出警告音 |
-e"b" | 删除前面的一个字符 |
-e"c" | 结尾不加换行符 |
-e"f" | 换行,光标仍然停留在原来的坐标位置 |
-e"n" | 换行,光标移至行首 |
-e"r" | 光标移至首行,但是不换行 |
-E | 禁止反斜杠转义,与 -e 参数功能相反 |
Examples
# 输出一段字符串
[root@mghio ~]# echo "mghio.cn"
mghio.cn
# 输出变量提取后的值
[root@mghio ~]# echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
# 对内容进行转义,不让$符号的提取变量值功能生效
[root@mghio ~]# echo \$PATH
$PATH
# 使用反引号符执行命令,并输出其结果到终端
[root@mghio ~]# echo `date`
Sat Dec 21 15:30:24 CST 2019
1.4 网络通讯
1.4.1 ssh 命令
ssh
命令是 openssh
套件中的客户端连接工具,可以给予 ssh
加密协议实现安全的远程登录服务器,实现对服务器的管理。
语法格式:ssh [参数] [主机]
常用参数
命令 | 描述 |
---|---|
-1 | 强制使用 ssh 协议版本 1 |
-2 | 强制使用 ssh 协议版本 2 |
-4 | 强制使用 IPv4 地址 |
-6 | 强制使用 IPv6 地址 |
-A | 开启认证代理连接转发功能 |
-a | 关闭认证代理连接转发功能 |
-b |
使用本机指定的地址作为对位连接的源 IP 地址 |
-C | 请求压缩所有数据 |
-F<配置文件> | 指定 ssh 指令的配置文件,默认的配置文件为 /etc/ssh/ssh_config |
-f | 后台执行 ssh 指令 |
-g | 允许远程主机连接本机的转发端口 |
-i<身份文件> | 指定身份文件(即私钥文件) |
-l<登录名> | 指定连接远程服务器的登录用户名 |
-N | 不执行远程指令 |
-o<选项> | 指定配置选项 |
-p<端口> | 指定远程服务器上的端口 |
-q | 静默模式,所有的警告和诊断信息被禁止输出 |
Examples
# 登录远程服务器
[root@mghio ~]# ssh 112.67.239.127
# 用 mghio 用户连接远程服务器
[root@linuxcool ~]# ssh -l mghio 112.67.239.127
1.4.2 sftp 命令
sftp
命令全称是 Secure File Transfer Protocol
。是一个交互式的文件传输程序,sftp
命令的运行和使用与 ftp
相似,但是 sftp
命令对传输的所有信息使用 ssh
加密 ,它还支持公钥认证和压缩等功能。
语法格式:sftp [参数] [IP或主机名]
常用参数
命令 | 描述 |
---|---|
-B | 指定传输文件缓冲区的大小 |
-l | 使用 ssh 协议版本 1 |
-b | 指定批处理文件 |
-C | 使用压缩 |
-o | 指定 ssh 选项 |
-F | 指定 ssh 配置文件 |
-R | 指定一次可以容忍多少请求数 |
Examples
# 使用 sftp 命令连接到服务器
[root@mghio ~]# sftp 112.67.239.127
# 指定传输文件是缓冲区大小
[root@mghio ~]# sftp -B 256 112.67.239.127
# 在传输过程中使用压缩
[root@linuxcool ~]# sftp -C 112.67.239.127
1.4.3 telnet 命令
telnet
命令的功能是远端登入,执行 telnet
指令开启终端机阶段作业,并登入远端主机。telnet
命令可以帮助你从这台路由器远程登陆到远端开启了 telnet
服务的设备,包括路由器、交换机、Linux
服务器等,并且配置当前路由器的 telnet
服务。
语法格式:telnet [参数]
常用参数
命令 | 描述 |
---|---|
-8 | 允许使用 8 位字符资料,包括输入与输出 |
-a | 尝试自动登入远端系统 |
-b | 使用别名指定远端主机名称 |
-c | 不读取用户专属目录里的 .telnetrc 文件 |
-d | 启动排错模式 |
-e | 设置脱离字符 |
-E | 滤除脱离字符 |
-f | 此参数的效果和指定 -F 参数相同 |
-F | 使用 Kerberos V5 认证时,加上此参数可把本地主机的认证数据上传到远端主机 |
-k | 使用 Kerberos 认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名 |
-K | 不自动登入远端主机 |
-l | 指定要登入远端主机的用户名称 |
-L | 允许输出8位字符资料 |
-n | 指定文件记录相关信息 |
-r | 使用类似 rlogin 指令的用户界面 |
-S | 设置 telnet 连线所需的 IP TOS 信息 |
-x | 假设主机有支持数据加密的功能,就使用它 |
-X | 关闭指定的认证形态 |
Examples
# 登录远程主机
[root@mghio ~]# telnet 112.67.239.127
# 连接本地主机,端口号为 23
[root@mghio ~]# telnet localhost 23
1.4.4 netstat 命令
netstat
命令用于显示各种网络相关信息,如网络连接、路由表、接口状态、多播成员等。从整体上看,netstat
的输出结果为两部分:一个是 Active Internet connections
称为 有源 TCP 连接
,其中 Recv-Q
和 Send-Q
指 %OA
的是接收队列和发送队列。另一个是 Active UNIX domain sockets
,称为有源Unix域套接口
(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
语法格式:netstat [参数]
常用参数
命令 | 描述 |
---|---|
-a | 显示所有连线中的 Socket |
-p | 显示正在使用 Socket 的程序识别码和程序名称 |
-u | 显示 UDP 传输协议的连线状况 |
-i | 显示网络界面信息表单 |
-n | 直接使用 IP 地址,不通过域名服务器 |
Examples
# 显示详细的网络状况
[root@mghio ~]# netstat -a
# 显示当前 UDP 连接状况
[root@mghio ~]# netstat -nu
# 显示网卡列表
[root@mghio ~]# netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 181864 0 0 0 141278 0 0 0 BMRU
lo 16436 0 3362 0 0 0 3362 0 0 0 LRU