Linux基本指令
# Linux指令
# Linux指令中的三大剑客
在Linux指令中,通常所说的三大剑客指的是grep
、awk
和sed
这三个强大的文本处理工具。
grep:
grep
是一个强大的文本搜索工具,它可以在文件或标准输入中搜索与指定模式匹配的行。grep
支持多种匹配模式,如基本正则表达式、扩展正则表达式和固定字符串等。awk:
awk
是一个强大的文本处理工具,它可以对文本文件进行逐行扫描,并对每一行进行指定的处理。awk
支持多种数据类型,如字符串、数字和数组等。它还提供了丰富的内置函数,可以用来进行字符串处理、数学运算和流程控制等。sed:
sed
是一个强大的流编辑器,它可以对文本文件或标准输入进行编辑。sed
支持多种编辑命令,如替换、删除和插入等。它还支持使用正则表达式进行模式匹配。
这三个工具都非常强大,可以帮助用户快速完成各种复杂的文本处理任务。它们通常被组合在一起使用,以实现更加强大的功能。希望这些信息能够帮助您了解Linux指令中的三大剑客。
# grep常用的用法
grep
是一个强大的文本搜索工具,它可以在文件或标准输入中搜索与指定模式匹配的行。下面是一些grep
的常用用法:
- 搜索文件中包含指定字符串的行:
grep 'pattern' filename
- 在多个文件中搜索包含指定字符串的行:
grep 'pattern' file1 file2 file3
- 忽略大小写进行搜索:
grep -i 'pattern' filename
- 只显示匹配行的数量:
grep -c 'pattern' filename
- 显示匹配行前后若干行的内容:
grep -C 3 'pattern' filename
- 使用正则表达式进行搜索:
grep -E '[0-9]+' filename
- 从标准输入中读取数据进行搜索:
cat filename | grep 'pattern'
以上是一些grep
的常用用法,它们可以帮助用户快速完成各种文本搜索任务。
# awk
awk
是一个强大的文本处理工具,它可以对文本文件进行逐行扫描,并对每一行进行指定的处理。下面是一些awk
的常用用法:
- 打印文件中的指定列:
awk '{print $1}' filename
- 计算文件中数字列的总和:
awk '{sum += $1} END {print sum}' filename
- 根据条件过滤文件中的行:
awk '$1 > 10' filename
- 使用分隔符分割列:
awk -F: '{print $1}' /etc/passwd
- 对多个文件进行处理:
awk '{print $1}' file1 file2 file3
- 从标准输入中读取数据进行处理:
cat filename | awk '{print $1}'
以上是一些awk
的常用用法,它们可以帮助用户快速完成各种文本处理任务。
# sed
sed
是一个强大的流编辑器,它可以对文本文件或标准输入进行编辑。下面是一些sed
的常用用法:
- 替换文件中的字符串:
sed 's/pattern/replacement/' filename
- 在文件中插入新行:
sed '1i new line' filename
- 删除文件中的指定行:
sed '2d' filename
- 保存编辑后的文件:
sed -i 's/pattern/replacement/' filename
- 对多个文件进行编辑:
sed 's/pattern/replacement/' file1 file2 file3
- 从标准输入中读取数据进行编辑:
cat filename | sed 's/pattern/replacement/'
以上是一些sed
的常用用法,它们可以帮助用户快速完成各种文本编辑任务。
# Linux查看服务器的网络和性能情况
在Linux中,有许多命令可以用来查看服务器的网络和性能情况。例如,top
命令可以用来查看 CPU 使用状况。dstat
命令整合了 vmstat
, iostat
和 ifstat
三种命令,可以让你能及时看到各种的资源使用情况。此外,还有一些其他的命令,如 atop
, nmon
, slabtop
, sar
, saidar
等,都可以用来监控服务器的性能。
对于网络流量的监控,你可以使用 ip
命令查看各网卡的总流量,使用 nload
命令查看各个网络设备的当前网络速率和总流量²。此外,还有一些其他的命令,如 dstat
, sar
, ss/netstat
, iftop
和 nethogs
等,都可以用来查看网络流量和连接情况。
# top
使用 top
命令时,您可能会关注以下几个参数:
%CPU
:进程占用 CPU 的使用率。%MEM
:进程占用内存的使用率。VIRT
:进程使用的虚拟内存总量。RES
:进程实际使用的物理内存大小。SHR
:进程共享的内存大小。TIME+
:进程的累计 CPU 时间。
这些参数可以帮助您了解系统中各个进程的资源占用情况,以便对系统进行监控和优化。
# dstat
vmstat
vmstat
命令用于报告有关进程、内存、分页、块 IO、陷阱和 CPU 活动等虚拟内存统计信息。使用vmstat
命令时,您可能会关注以下几个参数:procs
:显示进程相关信息,包括运行和等待的进程数量。memory
:显示内存相关信息,包括可用内存、缓冲区和缓存大小。swap
:显示交换分区的使用情况。io
:显示块设备的 IO 操作情况。system
:显示系统级别的事件,如中断和上下文切换。cpu
:显示 CPU 的使用情况,包括用户、系统、空闲和等待时间。
这些参数可以帮助您了解系统的虚拟内存使用情况,以便对系统进行监控和优化。
iostat
iostat
命令用于报告 CPU 和设备的 IO 统计信息。使用iostat
命令时,您可能会关注以下几个参数:avg-cpu
:显示 CPU 的使用情况,包括用户、系统、空闲和等待时间。Device
:显示设备的名称。tps
:显示每秒传输的块数。Blk_read/s
:显示每秒从设备读取的块数。Blk_wrtn/s
:显示每秒向设备写入的块数。Blk_read
:显示从设备读取的总块数。Blk_wrtn
:显示向设备写入的总块数。
这些参数可以帮助您了解系统的 IO 操作情况,以便对系统进行监控和优化。
ifstat
ifstat
命令用于报告网络接口的统计信息。使用ifstat
命令时,您可能会关注以下几个参数:#
:显示网络接口的编号。IFACE
:显示网络接口的名称。Rx-OK
:显示接收到的正确数据包数量。Rx-ERR
:显示接收到的错误数据包数量。Rx-DRP
:显示丢弃的接收数据包数量。Rx-OVR
:显示接收过载的数据包数量。Tx-OK
:显示发送的正确数据包数量。Tx-ERR
:显示发送的错误数据包数量。Tx-DRP
:显示丢弃的发送数据包数量。Tx-OVR
:显示发送过载的数据包数量。
这些参数可以帮助您了解系统的网络接口使用情况,以便对系统进行监控和优化。
# ip
您可以使用 ip
命令的 -s
参数来查看各个网络设备的统计信息,包括总流量。例如,要查看所有网络设备的总流量,可以使用以下命令:
ip -s link
这将显示每个网络设备的名称、状态和统计信息。在统计信息中,您可以看到每个设备接收和发送的数据包数量和字节数。
- RX:显示接收数据的统计信息,包括接收到的数据包数量和字节数。
- TX:显示发送数据的统计信息,包括发送的数据包数量和字节数。
# 查看目录以及权限
ls -l ll -rw-r-r--:此为普通文件,对于所属用户为可读可写不能执行,对于所属组仅仅可读,对于其他用户仅为读。
# 如何给文件赋予权限
在 Linux 中,可以使用 chmod
命令来更改文件或目录的权限。chmod
命令的语法如下:
chmod [选项] 权限 文件或目录
其中,权限可以用符号表示法或八进制表示法来指定。
符号表示法使用字母 u
、g
、o
和 a
来分别表示文件所有者(user)、组(group)、其他人(others)和所有人(all)。可以使用 +
、-
和 =
来分别添加、删除和设置权限。可以使用字母 r
、w
和 x
来分别表示读(read)、写(write)和执行(execute)权限。
例如,要给文件所有者添加执行权限,可以这样写:
chmod u+x 文件名
要删除组的写权限,可以这样写:
chmod g-w 文件名
要设置其他人的权限为只读,可以这样写:
chmod o=r 文件名
八进制表示法使用三位八进制数来表示权限。每一位分别表示文件所有者、组和其他人的权限。每一位的值可以是 0 到 7,其中 0 表示没有任何权限,1 表示执行权限,2 表示写权限,4 表示读权限。这些值可以相加来表示多种权限。
例如,要给文件所有者设置读和执行权限,可以这样写:
chmod 500 文件名
要给文件所有者和组设置读和写权限,可以这样写:
chmod 660 文件名
要给所有人设置读、写和执行权限,可以这样写:
chmod 777 文件名
# 硬链接 与 软链接之间的区别
硬链接和软链接是 Linux 文件系统中两种不同类型的链接。
硬链接是对文件的直接引用,它指向文件的 inode,而不是指向文件本身。这样,硬链接就获得了原始文件的所有属性,并指向与原始文件相同的数据块。如果删除原始文件,硬链接仍然有效,因为它指向原始文件所指向的数据¹。
相比之下,软链接(也称为符号链接)是对文件名的引用。它指向文件本身,而不是指向文件的 inode。如果删除原始文件,软链接将失效,因为它指向一个不存在的文件¹。
举个例子,假设我们有一个名为 file1
的文件,其内容为 hello world
。我们可以创建一个名为 hardlink1
的硬链接,指向 file1
:
ln file1 hardlink1
现在,hardlink1
和 file1
指向相同的数据。如果我们查看 hardlink1
的内容,会发现它与 file1
相同:
cat hardlink1
# 输出: hello world
2
如果我们删除 file1
,hardlink1
仍然有效,并且仍然包含原始数据:
rm file1
cat hardlink1
# 输出: hello world
2
3
现在,让我们创建一个名为 softlink1
的软链接,指向 file1
:
ln -s file1 softlink1
如果我们查看 softlink1
的内容,会发现它与 file1
相同:
cat softlink1
# 输出: hello world
2
但是,如果我们删除 file1
,则 softlink1
将失效:
rm file1
cat softlink1
# 输出: cat: softlink1: No such file or directory
2
3
# nohup
后台启动线程 nohup 是 Linux 中的一个命令,它可以让进程在退出 shell 或终端后继续运行。nohup 可以阻止进程或作业收到 SIGHUP(挂断)信号。这是一个在关闭或退出终端时发送给后台作业的信号¹。
使用 nohup 命令的语法如下:
nohup [命令] [参数]
其中,命令是要运行的程序,参数是要传递给程序的选项或参数。
使用 nohup 命令运行的程序的输出会被重定向到一个名为 nohup.out 的文件中,除非另外指定了输出文件。如果想要在后台运行程序,可以在命令末尾加上 & 符号。
例如,要使用 nohup 命令在后台运行一个名为 test.sh 的脚本,可以这样写:
nohup bash test.sh &
这样,即使关闭终端,test.sh 也会继续运行,并将输出写入 nohup.out 文件中。
如果想要指定输出文件,可以使用 > 符号来重定向输出。例如,要将输出写入 test.log 文件中,可以这样写:
nohup bash test.sh > test.log &
如果想要查看后台运行的进程的状态,可以使用 jobs 命令。如果想要将后台进程带到前台,可以使用 fg 命令。如果想要终止后台进程,可以使用 kill 命令。
# 查看进程,杀死进程
ps -ef| grep A
在 Linux 中,可以使用 ps
命令来查看当前运行的进程。ps
命令有许多选项,可以用来控制显示的信息和格式。例如,要查看当前用户运行的所有进程,可以这样写:
ps x
要查看所有用户运行的所有进程,可以这样写:
ps aux
要查看特定用户运行的所有进程,可以这样写:
ps -u 用户名
要查看特定进程的详细信息,可以使用 top
或 htop
命令。这些命令提供了一个动态更新的界面,可以实时查看系统资源的使用情况和进程的状态。
在 Linux 中,可以使用 kill
命令来终止进程。kill
命令的语法如下:
kill [选项] 进程ID
其中,进程ID 是要终止的进程的 ID。可以使用 ps
命令来查找进程的 ID。
例如,要终止一个名为 test.sh 的脚本,首先可以使用 ps
命令来查找它的进程 ID:
ps aux | grep test.sh
然后,假设找到的进程 ID 为 12345,则可以使用 kill
命令来终止它:
kill 12345
如果进程无法正常终止,可以使用 -9
选项强制终止它:
kill -9 12345
# tar解压缩
# scp
scp
是一个用于在 Linux 系统之间安全地传输文件的命令行工具。它使用 SSH 协议来加密传输的数据,以保证安全性。
scp
命令的语法如下:
scp [选项] [源] [目标]
其中,源和目标可以是本地文件或远程文件。远程文件的格式为 user@host:path
,其中 user
是远程主机上的用户名,host
是远程主机的地址,path
是远程主机上的文件路径。
例如,要将本地文件 file.txt
上传到远程主机 example.com
的 /tmp
目录下,可以这样写:
scp file.txt user@example.com:/tmp/
要从远程主机 example.com
下载 /tmp/file.txt
文件到本地,可以这样写:
scp user@example.com:/tmp/file.txt .
要在两台远程主机之间传输文件,可以这样写:
scp user1@example1.com:/tmp/file.txt user2@example2.com:/tmp/
scp
命令有许多选项,可以用来控制传输的方式和行为。例如,可以使用 -r
选项来递归地传输目录,使用 -P
选项来指定 SSH 连接的端口号,使用 -C
选项来启用压缩等。
如果您想了解更多关于 scp
命令的信息,可以查看它的手册页:
man scp
# df
查看磁盘大小
df -h
# netstat
netstat
是一个用于显示各种网络相关信息的命令,如网络连接,路由表,接口状态等等。它可以帮助您确定网络上的流量,以确定性能问题是否是由于网络拥塞引起的。
例如,您可以使用 netstat -a
来查看所有连接和监听端口,或者使用 netstat -r
来查看路由表。您还可以使用 netstat -s
来查看每个协议的统计信息。
# 其它的常用命令
# 1. 常用命令介绍
(1) ctrl c: 取消命令,并且换行
(2) ctrl u: 清空本行命令
(3) tab键:可以补全命令和文件名,如果补全不了快速按两下tab键,可以显示备选选项
(4) ls: 列出当前目录下所有文件,蓝色的是文件夹,白色的是普通文件,绿色的是可执行文件
(5) pwd: 显示当前路径
(6) cd XXX: 进入XXX目录下, cd .. 返回上层目录
(7) cp XXX YYY: 将XXX文件复制成YYY,XXX和YYY可以是一个路径,比如../dir_c/a.txt,表示上层目录下的dir_c文件夹下的文件a.txt
(8) mkdir XXX: 创建目录XXX
(9) rm XXX: 删除普通文件; rm XXX -r: 删除文件夹
(10) mv XXX YYY: 将XXX文件移动到YYY,和cp命令一样,XXX和YYY可以是一个路径;重命名也是用这个命令
(11) touch XXX: 创建一个文件
(12) cat XXX: 展示文件XXX中的内容
(13) 复制文本
windows/Linux下:Ctrl + insert,Mac下:command + c
(14) 粘贴文本
windows/Linux下:Shift + insert,Mac下:command + v
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 2. tmux
功能:
(1) 分屏。
(2) 允许断开Terminal连接后,继续运行进程。
结构:
一个tmux可以包含多个session,一个session可以包含多个window,一个window可以包含多个pane。
实例:
tmux:
session 0:
window 0:
pane 0
pane 1
pane 2
...
window 1
window 2
...
session 1
session 2
...
操作:
(1) tmux:新建一个session,其中包含一个window,window中包含一个pane,pane里打开了一个shell对话框。
(2) 按下Ctrl + a后手指松开,然后按%:将当前pane左右平分成两个pane。
(3) 按下Ctrl + a后手指松开,然后按"(注意是双引号"):将当前pane上下平分成两个pane。
(4) Ctrl + d:关闭当前pane;如果当前window的所有pane均已关闭,则自动关闭window;如果当前session的所有window均已关闭,则自动关闭session。
(5) 鼠标点击可以选pane。
(6) 按下ctrl + a后手指松开,然后按方向键:选择相邻的pane。
(7) 鼠标拖动pane之间的分割线,可以调整分割线的位置。
(8) 按住ctrl + a的同时按方向键,可以调整pane之间分割线的位置。
(9) 按下ctrl + a后手指松开,然后按z:将当前pane全屏/取消全屏。
(10) 按下ctrl + a后手指松开,然后按d:挂起当前session。
(11) tmux a:打开之前挂起的session。
(12) 按下ctrl + a后手指松开,然后按s:选择其它session。
方向键 —— 上:选择上一项 session/window/pane
方向键 —— 下:选择下一项 session/window/pane
方向键 —— 右:展开当前项 session/window
方向键 —— 左:闭合当前项 session/window
(13) 按下Ctrl + a后手指松开,然后按c:在当前session中创建一个新的window。
(14) 按下Ctrl + a后手指松开,然后按w:选择其他window,操作方法与(12)完全相同。
(15) 按下Ctrl + a后手指松开,然后按PageUp:翻阅当前pane内的内容。
(16) 鼠标滚轮:翻阅当前pane内的内容。
(17) 在tmux中选中文本时,需要按住shift键。(仅支持Windows和Linux,不支持Mac,不过该操作并不是必须的,因此影响不大)
(18) tmux中复制/粘贴文本的通用方式:
(1) 按下Ctrl + a后松开手指,然后按[
(2) 用鼠标选中文本,被选中的文本会被自动复制到tmux的剪贴板
(3) 按下Ctrl + a后松开手指,然后按],会将剪贴板中的内容粘贴到光标处
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 3.vim
功能:
(1) 命令行模式下的文本编辑器。
(2) 根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能。
(3) 使用方式:vim filename
如果已有该文件,则打开它。
如果没有该文件,则打开个一个新的文件,并命名为filename
模式:
(1) 一般命令模式
默认模式。命令输入方式:类似于打游戏放技能,按不同字符,即可进行不同操作。可以复制、粘贴、删除文本等。
(2) 编辑模式
在一般命令模式里按下i,会进入编辑模式。
按下ESC会退出编辑模式,返回到一般命令模式。
(3) 命令行模式
在一般命令模式里按下:/?三个字母中的任意一个,会进入命令行模式。命令行在最下面。
可以查找、替换、保存、退出、配置编辑器等。
操作:
(1) i:进入编辑模式
(2) ESC:进入一般命令模式
(3) h 或 左箭头键:光标向左移动一个字符
(4) j 或 向下箭头:光标向下移动一个字符
(5) k 或 向上箭头:光标向上移动一个字符
(6) l 或 向右箭头:光标向右移动一个字符
(7) n<Space>:n表示数字,按下数字后再按空格,光标会向右移动这一行的n个字符
(8) 0 或 功能键[Home]:光标移动到本行开头
(9) $ 或 功能键[End]:光标移动到本行末尾
(10) G:光标移动到最后一行
(11) :n 或 nG:n为数字,光标移动到第n行
(12) gg:光标移动到第一行,相当于1G
(13) n<Enter>:n为数字,光标向下移动n行
(14) /word:向光标之下寻找第一个值为word的字符串。
(15) ?word:向光标之上寻找第一个值为word的字符串。
(16) n:重复前一个查找操作
(17) N:反向重复前一个查找操作
(18) :n1,n2s/word1/word2/g:n1与n2为数字,在第n1行与n2行之间寻找word1这个字符串,并将该字符串替换为word2
(19) :1,$s/word1/word2/g:将全文的word1替换为word2
(20) :1,$s/word1/word2/gc:将全文的word1替换为word2,且在替换前要求用户确认。
(21) v:选中文本
(22) d:删除选中的文本
(23) dd: 删除当前行
(24) y:复制选中的文本
(25) yy: 复制当前行
(26) p: 将复制的数据在光标的下一行/下一个位置粘贴
(27) u:撤销
(28) Ctrl + r:取消撤销
(29) 大于号 >:将选中的文本整体向右缩进一次
(30) 小于号 <:将选中的文本整体向左缩进一次
(31) :w 保存
(32) :w! 强制保存
(33) :q 退出
(34) :q! 强制退出
(35) :wq 保存并退出
(36) :set paste 设置成粘贴模式,取消代码自动缩进
(37) :set nopaste 取消粘贴模式,开启代码自动缩进
(38) :set nu 显示行号
(39) :set nonu 隐藏行号
(40) gg=G:将全文代码格式化
(41) :noh 关闭查找关键词高亮
(42) Ctrl + q:当vim卡死时,可以取消当前正在执行的命令
异常处理:
每次用vim编辑文件时,会自动创建一个.filename.swp的临时文件。
如果打开某个文件时,该文件的swp文件已存在,则会报错。此时解决办法有两种:
(1) 找到正在打开该文件的程序,并退出
(2) 直接删掉该swp文件即可
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 4.ssh
# 基本用法
远程登录服务器:
ssh user@hostname
user
: 用户名hostname
: IP地址或域名
第一次登录时会提示:
The authenticity of host '123.57.47.211 (123.57.47.211)' can't be established.
ECDSA key fingerprint is SHA256:iy237yysfCe013/l+kpDGfEG9xxHxm0dnxnAbJTPpG8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
2
3
输入yes
,然后回车即可。
这样会将该服务器的信息记录在~/.ssh/known_hosts
文件中。
然后输入密码即可登录到远程服务器中。
默认登录端口号为22。如果想登录某一特定端口:
ssh user@hostname -p 22
# 配置文件
创建文件 ~/.ssh/config
。
然后在文件中输入:
Host myserver1
HostName IP地址或域名
User 用户名
Host myserver2
HostName IP地址或域名
User 用户名
2
3
4
5
6
7
之后再使用服务器时,可以直接使用别名myserver1
、myserver2
。
# 密钥登录
创建密钥:
ssh-keygen
然后一直回车即可。
执行结束后,~/.ssh/
目录下会多两个文件:
id_rsa
:私钥id_rsa.pub
:公钥
之后想免密码登录哪个服务器,就将公钥传给哪个服务器即可。
例如,想免密登录myserver
服务器。则将公钥中的内容,复制到myserver
中的~/.ssh/authorized_keys
文件里即可。
也可以使用如下命令一键添加公钥:
ssh-copy-id myserver
# 统计行数
这条命令会在当前目录及其子目录下查找所有以 .java
结尾的文件,然后将它们的内容输出并统计总行数。
下面是对这条命令的逐步解释:
find . -name '*.java'
:在当前目录及其子目录下查找所有以.java
结尾的文件。xargs cat
:将查找到的文件名作为参数传递给cat
命令,将它们的内容输出。wc -l
:统计输出内容的总行数。
find . -name '*.java' | xargs cat | wc -l
2
# 环境变量生效
您可以使用 export
命令直接修改环境变量。例如,要将新路径添加到 PATH
环境变量中,可以使用以下命令:
export PATH=$PATH:/new/path
您也可以使用 printenv
命令查看当前定义的所有环境变量,或者使用 echo
命令查看特定环境变量的值。例如,要查看 PATH
环境变量的值,可以使用以下命令:
echo $PATH
source
命令用于在当前 shell 中执行指定文件中的命令。当您修改了某些配置文件(例如 ~/.bashrc
)后,可以使用 source
命令使更改立即生效,而不必注销并重新登录。
例如,如果您修改了 ~/.bashrc
文件,可以使用以下命令使更改立即生效:
source ~/.bashrc
或者您也可以使用点号 .
作为 source
命令的简写形式:
. ~/.bashrc