掌握这些常用Linux命令,一起提升工作效率

开始上班了,新一年的奋斗的之路启程了,要继续【奔赴山海,奔赴热爱】。

汪国真在《热爱生命》这首诗中写到:既然选择了远方,便只顾风雨兼程。技术上还是持续精进和学习,远方虽远,要迈开脚步,一步步抵达远方的目标。

这次整理了常用的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]

图解:

掌握这些常用Linux命令,一起提升工作效率_第1张图片

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 相似)。

lessmore 类似,但使用 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
                    
                    

你可能感兴趣的:(掌握这些常用Linux命令,一起提升工作效率)