开始上班了,新一年的奋斗的之路启程了,要继续【奔赴山海,奔赴热爱】。
汪国真在《热爱生命》这首诗中写到:既然选择了远方,便只顾风雨兼程。技术上还是持续精进和学习,远方虽远,要迈开脚步,一步步抵达远方的目标。
这次整理了常用的Linux的命令,这里面很多命令都是高频使用。作为程序员,离不开和Linux服务器打交道,部署项目,排查问题等。正确掌握这些命令后,好处多多。比如能极大的提高工作的效率,遇到线上出现问题需要排查,能更快的通过命令定位问题,找到原因,解决问题,获得领导和同事的认可和赞赏,岂不美哉!
温馨提示:本文内容较多,建议收藏食用!(收藏后一定要看啊,不要放到收藏夹吃土)
一、工欲善其事,必先利其器
基本功练习
0、登录服务器SSH命令
简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
最基本的用法:
常用格式:ssh [-l login_name] [-p port] [user@]hostname
例子:
ssh 192.168.1.110
ssh -l root 192.168.0.11
# 比较常用
ssh [email protected]
图解:
1、传输文件scp命令
scp命令用于Linux服务器之间复制文件和目录。scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。
最基本的用法:
常用格式:scp [可选参数] file_source remote_username@remote_ip:remote_folder
例子:
scp /home/test.log [email protected]:/home/happy/
注意: 使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的。
2、查看系统状态 top、free、df
top命令用于实时显示 process 的动态。可以配合用来查询vm的一些问题!具体参数不做介绍。
# 表示更新两次后终止更新显示
top -n 2
#表示更新周期为3秒
top -d 3
# 显示进程号为2586的进程信息,CPU、内存占用率等
top -p 2586
更新显示二次的结果输入到名称为 top.log 的档案里
top -n 2 -b < top.log
free命令用于显示内存状态。
# 显示内存使用信息 , -h 选项为根据大小适当显示(人类可以读懂的方式)
free -h
# 每10s 执行一次命令
free -hs 10
df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
# 查看磁盘信息, -h 选项为根据大小适当显示
df -h
du会显示指定的目录或文件所占用的磁盘空间。用于查看当前目录的总大小。
# 通过排序的方式显示前十条
[root@localhost ~]# du -am | sort -nr | head -n 10
183 ./jdk-8u191-linux-x64.tar.gz
183 .
1 ./.viminfo
....
3、压缩/解压tar命令
tar是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。
- 压缩文件
命令 : tar -zcvf 备份文件.tar.gz 备份文件/目录
后缀也可以是.tgz。
# 创建一个文件
[root@localhost ~]# touch text.log
# 压缩 text.tar.gz
[root@localhost ~]# tar -zcvf text.tar.gz text.log
[root@localhost ~]# tar -zcvf text.tgz text.log
text.log
[root@localhost ~]# ll
-rw-r--r--. 1 root root 114 3月 12 22:45 text.tgz
- 列出压缩文件内容
命令: tar -ztvf 备份文件.tar.gz 或 tar -ztvf 备份文件.tgz
[root@localhost ~]# tar -ztvf text.tar.gz
-rw-r--r-- root/root 0 2019-03-12 22:41 text.log
[root@localhost ~]# tar -ztvf text.tgz
-rw-r--r-- root/root 0 2019-03-12 22:41 text.log
- 解压文件
命令: tar -zxvf 备份文件.tar.gz 或 tar -zxvf 备份文件.tgz
[root@localhost ~]# tar -zxvf text.tar.gz
-rw-r--r-- root/root 0 2019-03-12 22:41 text.log
[root@localhost ~]# tar -zxvf text.tgz
-rw-r--r-- root/root 0 2019-03-12 22:41 text.log
tar -z 压缩(c)、查看(t)、解压(x)vf
- -z或--gzip或--ungzip 通过gzip指令处理备份文件
- -c或--create 建立新的备份文件
- -t或--list 列出备份文件的内容
- -x或--extract或--get 从备份文件中还原文件
- -v或--verbose 显示指令执行过程
- -f<备份文件>或--file=<备份文件> 指定备份文件
4、修改文件属性chmod命令
Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调用。
读,写,执行
的权限。r=4,w=2,x=1
- 若要rwx属性则4+2+1=7;
- 若要rw-属性则4+2=6;
- 若要r-x属性则4+1=5。
一般情况,赋值 命令
chmod 755 file
此外chmod也可以用字母来表示权限,这里就不进行说明。
5、查找文件find命令
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
find . -iname \*.txt(大小写都匹配)
find . -type d(当前目录下的所有子目录)
find /usr -type l(当前目录下所有的符号链接)
find /usr -type l -name "z*" -ls(符号链接的详细信息 eg:inode,目录)
find /home/test -size +250000k(超过250000k的文件,当然+改成-就是小于了)
find /home/test f -perm 777 -exec ls -l {} \; (按照权限查询文件)
find /home/test -atime -1 1天内访问过的文件
find /home/test -ctime -1 1天内状态改变过的文件
find /home/test -mtime -1 1天内修改过的文件
find /home/test -amin -1 1分钟内访问过的文件
find /home/test -cmin -1 1分钟内状态改变过的文件
find /home/test -mmin -1 1分钟内修改过的文件
#----------
#查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们
find /var/log -type f -mtime +7 -ok rm {} \;
#查找系统中所有文件长度为0的普通文件,并列出它们的完整路径
find / -type f -size 0 -exec ls -l {} \;
6、查询字符grep命令
grep命令用于查找文件里符合条件的字符串。
grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。
# 显示所有以d开头的文件中包含test的行。
grep 'test' d*
# 显示在text1,text2,text3文件中匹配test的行。
grep 'test' text1 text2 text3
# text文件中显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
grep '[a-z]\{5\}' text
# 查找文件名中包含 test 的文件中不包含test 的行
grep -v test *test*
7、查看端口占用netstat命令
netstat命令用于显示网络状态。
利用netstat指令可让你得知整个Linux系统的网络情况。
# 查看端口1212的使用情况
netstat -tln | grep 1212
查看端口属于哪个程序
lsof -i :1212
8、查看文件内容 tail命令
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
真实使用:
# 查看日志
tail -f xxxx.out
# 查看 100行日志
tail -n100 xxxx.out
# 查看带有'test'的日志
tail -f | grep 'test' 这样可以只显示
9、杀死进程kill命令
kill命令用于删除执行中的程序或工作。查找tomcat服务,并彻底杀死进程。
# 查找tomcat服务器
ps aux | grep tomcat
root 25689
# 杀掉进程 -9 强制杀,一枪爆头
kill -9 25689
# 杀掉进程 -15 温柔杀,安乐死
kill -15 25689
10、切换目录 cd | 显示当前路径 pwd
# 登录酷炫的服务器
Connecting to 192.168.1.120:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'
cd 命令
用于切换当前工作目录至 dirName
(目录参数)。
其中 dirName
表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home 目录 (也就是刚 login 时所在的目录)。
另外,"~" 也表示为 home 目录 的意思,"." 则是表示目前所在的目录,".." 则表示目前目录位置的上一层目录。
pwd命令
用于显示工作目录。
执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称。
# 进入 magic “空间”
[root@localhost ~]# cd magic/
# 查看magic “空间”当前的目录
[root@localhost magic]# pwd
/root/magic
11、创建目录 mkdir|创建文件 touch
mkdir命令
用于建立名称为 dirName
之子目录。
touch命令
用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
# 创建一个奇幻目录,也可以一次性创建多个。或者多级
# 创建一个
[root@localhost magic]# mkdir fantasy
[root@localhost magic]# ls
fantasy
# 创建多个
[root@localhost magic]# mkdir great best
[root@localhost magic]# ll
总用量 0
drwxr-xr-x. 2 root root 6 3月 14 22:47 best
drwxr-xr-x. 2 root root 6 3月 14 22:45 fantasy
drwxr-xr-x. 2 root root 6 3月 14 22:47 great
# 创建多级
[root@localhost magic]# mkdir -p surprise/otherworld
[root@localhost magic]# cd surprise/otherworld/
[root@localhost otherworld]# pwd
/root/magic/surprise/otherworld
#-------------------#
# 在fantasy 下创建一个文件
[root@localhost fantasy]# touch happyday
[root@localhost fantasy]# ll
总用量 0
-rw-r--r--. 1 root root 0 3月 14 22:50 happyday
# 在fantasy 下创建多个文件
[root@localhost fantasy]# touch sadday busyday
[root@localhost fantasy]# ll
总用量 0
-rw-r--r--. 1 root root 0 3月 14 22:50 busyday
-rw-r--r--. 1 root root 0 3月 14 22:50 happyday
-rw-r--r--. 1 root root 0 3月 14 22:50 sadday
12、文本编辑器vi/vim | 复制 cp | 截切 mv
Unix 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。
但是目前我们使用比较多的是 vim 编辑器(有时候系统安装好没有vim需要自行安装一下)。
原因:vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
vim涉及的知识还是挺多,这里简单介绍,不详细展开,如不是很了解的可以阅读:Linux学习—vim文本编辑器学习:https://blog.csdn.net/u010648555/article/details/73719039
# 打开happyday
[root@localhost fantasy]# vim happyday
#点击 i 后插入内容
# 输入完成 按 esc 输入 :wq ,回车保存
# 拷贝 复制一份
[root@localhost fantasy]# cp happyday ../best/
[root@localhost fantasy]# cd ..
[root@localhost magic]# ll best/happyday
-rw-r--r--. 1 root root 99 3月 14 23:02 best/happyday
# 改名
[root@localhost magic]# cd best/
[root@localhost best]# mv happyday besthappyday
[root@localhost best]# ll
总用量 4
-rw-r--r--. 1 root root 99 3月 14 23:02 besthappyday
注: Vim相关模式
(1)命令模式 -Command Mode
(2)输入模式 -Insert Mode
(3)底行模式(尾行,末行) - Last Line Mode
--vim 打开(创建)文件
默认进入的命令模式,输入I 转换到输入模式,
到底行模式--esc :wq
13、显示文件内容 cat | more | less
cat 命令
用于连接文件并打印到标准输出设备上。
more 命令
类似 cat
,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似)。
less
与 more
类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
# 这里就只演示 cat
[root@localhost best]# cat besthappyday
0315 happy
0812 happy
0201 happy
.....
插个小故事: 之前有遇到过使用vi打开几个G的文件去查日志内容。导致系统负载飙升。命令的正确使用很重要啊!
14、显示开头内容 head | 排序 sort
head
命令 用来显示档案的开头至标准输出中。
sort
命令用于将文本文件内容加以排序。sort可针对文本文件的内容,以行为单位来排序。
# 查看前5行内容 -n num:显示每个文件的前num 行内容
[root@localhost best]# head -n 5 besthappyday
0315 happy
0812 happy
0201 happy
0403 happy
9046 happy
# 排序一下
[root@localhost best]# head -n 5 besthappyday | sort
0201 happy
0315 happy
0403 happy
0812 happy
9046 happy
15、压缩文件的内容查看和搜索 zgrep | zcat
避免解压文件,可以使用zgrep
命令查找文件内容信息、zcat
查看压缩文件中的信息。
# 五日后文件记录内容太多,压缩一下
[root@localhost best]# tar -zcvf besthappyday.tar.gz besthappyday
besthappyday
[root@localhost best]# ll
总用量 8
-rw-r--r--. 1 root root 99 3月 14 23:02 besthappyday
-rw-r--r--. 1 root root 163 3月 14 23:14 besthappyday.tar.gz
# 查看 压缩文件内容
[root@localhost best]# zcat -a besthappyday.tar.gz
0812 happy
0201 happy
0403 happy
9046 happy
...
# 查找 压缩文件中的内容
[root@localhost best]# zgrep -a "0201" besthappyday.tar.gz
0201 happy
注: 一般公司日志都会每天压缩归档,当日志量较大的时候,如果想要排查问题,查找日志,那使用这个命令不用解压在查看了,方便高效。
16、查看目录下文件和属性 ls | 移除文件或目录 rm
ls命令
用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。ls -l
可以显示档案的时间记录。
rm命令
用于删除一个文件或者目录。
# 查看best目录文件
[root@localhost best]# ls
besthappyday besthappyday.tar.gz
[root@localhost best]# ls -l
总用量 8
-rw-r--r--. 1 root root 99 3月 14 23:02 besthappyday
-rw-r--r--. 1 root root 163 3月 14 23:14 besthappyday.tar.gz
[root@localhost best]# ll
总用量 8
-rw-r--r--. 1 root root 99 3月 14 23:02 besthappyday
-rw-r--r--. 1 root root 163 3月 14 23:14 besthappyday.tar.gz
# 删除 文件 besthappyday
[root@localhost best]# rm -i besthappyday
[root@localhost best]# ll
总用量 4
-rw-r--r--. 1 root root 163 3月 14 23:14 besthappyday.tar.gz
**注意: rm使用一定不能胡搞,尤其还是root用户的时候,千万注意使用 rm -rf / ,生产环境切记! **
正规的公司一般有权限控制,不会直接给开发人员一个root的权限。
- -i 删除前逐一询问确认。
- -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
- -r 将目录及以下之档案亦逐一删除。
注: 如果不能使用 ll(别名,不是系统自带命令),可以进行配置(临时):alias ll='ls -l --color=auto' ,如果想服务重启后还生效要改配置文件。
掌握别名的使用可以定义自己的专属命令。
17、网络命令工具 ifconfig | ping | telnet | nc
ifconfig命令
用于显示或设置网络设备。ifconfig可设置网络设备的状态,或是显示目前的设置,可用于启动关闭指定网卡、配置IP地址等。
ping命令
用于检测主机。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
telnet命令
用于远端登入。执行telnet指令开启终端机阶段作业,并登入远端主机.
nc命令
nc命令是一个功能打包的网络实用程序,它通过命令行在网络上读取和写入数据。(有时候没有telnet命令可以使用nc 进行检查),这个命令我是这样记住的,nc(脑残)命令。
# 查询显示网络信息 配置的IP: 192.168.1.120
[root@localhost best]# ifconfig
enp0s3: flags=4163 mtu 1500
inet 192.168.1.120 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::2011:229e:3407:7b99 prefixlen 64 scopeid 0x20
ether 08:00:27:ef:a7:71 txqueuelen 1000 (Ethernet)
RX packets 2602 bytes 225175 (219.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1527 bytes 193319 (188.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 68 bytes 5912 (5.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 68 bytes 5912 (5.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# 勾搭 googleMM 和 勾搭BaiduMM
[root@localhost best]# ping www.google.com
PING www.google.com (69.171.225.13) 56(84) bytes of data.
^C
--- www.google.com ping statistics ---
17 packets transmitted, 0 received, 100% packet loss, time 16019ms
[root@localhost best]# ping www.baidu.com
PING www.a.shifen.com (119.75.217.26) 56(84) bytes of data.
64 bytes from 119.75.217.26 (119.75.217.26): icmp_seq=1 ttl=55 time=101 ms
64 bytes from 119.75.217.26 (119.75.217.26): icmp_seq=2 ttl=55 time=124 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 101.591/113.020/124.449/11.429 m
# 看房间门是否打开
[root@localhost ~]# telnet 192.168.1.120 8080
-- telnet : ctrl + ] + quit
# 检查redis的服务是否通,redis部署在192.168.1.121服务器上
[root@localhost ~]# nc -zv 192.168.1.121 7000
Connection to 192.168.2.122 7000 port [tcp/newoak] succeeded
[root@localhost ~]# nc -zv 192.168.1.122 7000
nc: connect to 192.168.2.122 port 7000 (tcp) failed: Connection refused
18、显示进程状态 ps |定时执行任务 crontab
ps命令
用于显示当前进程 (process) 的状态。
这个命令文章上面有介绍过。和grep组合使用查看应用进程。
# 查询java服务
[root@localhost ~]# ps -aux | grep java
crontab
是用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
crontab的使用这里略,感兴趣的请自行查找资料。
19、切换用户 su | 查看帮助 man
su命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。一般会给权限小的账户,需要做一些高端操作,要切换到更高权限用户,这个时候可以使用su命令。这里注意下,切换的使用最好带 -
, 会切换到用户的环境下,否则可能有些环境变量不可用。
# 显示当前用户
dufy@localhost:~$ whoami
dufy
# 切换到root用户
dufy@localhost:~$ su - root
密码:
[root@localhost ~]# whoami
root
man命令
来查看一些不熟悉的命令的使用方法,还可以用来查询系统库文件中的一些函数定义和使用方法。man就是manual(参考手册)。
# 查看对应命令的使用说明
[root@localhost ~]# man mv
[root@localhost ~]# man ls
三剑客 grep | sed | awk
0、文本过滤器-grep
grep命令
用于查找文件里符合条件的字符串,是一种强大的文本搜索工具,支持正则表达式或者字符及基本文本字符所编写的过滤条件。
grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。说简单一点就是 :用户可以指定的“模式”(选项)对目标文本进行匹配检查 , 查看就打印匹配到的行。
注: 在grep命令中输入字符串参数时,最好将其用双引号括起来。调用变量时也可以使用双引号。在调用模式匹配事,应使用单引号。
- 常用命令格式
# grep 匹配条件 目标文件/目录
可选参数:
-c 或 --count : 计算符合样式的列数。
-i 或 --ignore-case : 忽略字符大小写的差别
-l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称
-n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号
-s :不显示不存在或无匹配文本的错误信息。
-v 或 --revert-match : 显示不包含匹配文本的所有行行
-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同
-E 或 --extended-regexp : 将样式为延伸的普通表示法来使用
....
说明:在正则表达式中
^ :匹配字符串开始
$ :匹配字符串结尾
* :字符出现 [0- 任意次 ]
\?:字符出现 [0-1 次 ]
\+:字符出现 [1- 任意次 ]
- 简单实例
# 1、新建一个busyday busyday1 busyday2文件
[root@localhost learn_grep]# touch busyday
[root@localhost learn_grep]# vim busyday
# 其他busyday1 busyday2类似,文件内容略
[root@localhost learn_grep]# cat busyday
abc
123abdef
789happy
hjk567
hello123
greptest
# 2、查询 happy 所在的文件
[root@localhost learn_grep]# grep "happy" busyday*
busyday:789happy
busyday1:123happy
busyday2:456happy
# 3、统计 happy 所在的文件内容的出现的次数
[root@localhost learn_grep]# grep -c "happy" busyday*
busyday:1
busyday1:1
busyday2:1
# 4、显示匹配happy的所有行数,都在第三行
[root@localhost learn_grep]# grep -n "happy" busyday*
busyday:3:789happy
busyday1:3:123happy
busyday2:3:456happy
# 5、显示所有不包含happy的行
[root@localhost learn_grep]# grep -v "happy" busyday*
busyday:abc
busyday:123abdef
busyday:hjk567
busyday:hello123
busyday:greptest
busyday:
busyday1:abc
busyday1:4567abdef
busyday1:hjk321
busyday1:hello987
busyday2:abc
busyday2:9876abdef
busyday2:hjk4321
busyday2:hello0980
# 6、精确匹配,找到 123happy
[root@localhost learn_grep]# grep "123happy" busyday*
busyday1:123happy
# 7、正则匹配,找到所有123开头的
[root@localhost learn_grep]# grep -E "^123*" busyday*
busyday:123abdef
busyday1:123happy
还有很多,自行进行魔法练习!
1、字符处理器-sed
sed命令
是利用script来处理文本文件。sed可依照script的指令,来处理、编辑文本文件。能够完美的配合正则表达式便用,功物能不同凡响。
- 基本语法
sed [-参数] '命令' 文本
参数说明:
- -e