【开发运维手牵手】「Linux篇」开发同学可能用到的Linux运维命令集锦

我们家里老公是运维,老婆是开发。老婆不懂运维,老公想借着这个专栏,给各位开发同学总结一份宝典。让你在开发的岗位上,了解运维的基础知识。开发运维手牵手,共同对付产品狗。

一、远程管理类

1、远程登录命令-SSH

不要笑,不要觉得ssh命令你天天用,严肃,严肃。
ssh基本用法举例:

ytlzq0228@vm01:~$ ssh 10.1.2.3

此时会使用你当前客户端系统登录的用户名作为登录远程主机,而客户端用户名并不是你真正想用的,可能你想用root登录远程主机。
例如下图:
在这里插入图片描述
这时候,就需要使用如下格式,来强制约束远程登录使用的用户名

ytlzq0228@vm01:~$ ssh root@10.1.2.3

同时,ssh还可能会用到以下扩展参数

加端口ssh,适用于远端主机不使用22作为ssh端口的时候
ytlzq0228@vm01:~$ ssh root@10.1.2.3 -p 3321
加源IP地址ssh,适用本机具有多张网卡的时候
ytlzq0228@vm01:~$ ssh root@10.1.2.3 -b 192.168.0.106
或者用-B绑定源网卡
ytlzq0228@vm01:~$ ssh root@10.1.2.3 -B eth01

第一次远程一台主机的时候,需要接受远端主机分发的ssh公钥,系统会询问是否接收公钥,输入yes
在这里插入图片描述
有关ssh秘钥问题,详见第3点,SSH-Keygen

2、远程传输文件命令-SCP

scp与ssh一样同样使用openssl进行加密传输,也同样使用22端口。大部分情况下,有ssh功能的主机基本都有scp功能。
scp基本用法举例:

将本机文件复制到远端服务器上
ytlzq0228@vm01:~$ scp ./code.py root@10.1.2.3:/root/Python
将远端服务器文件下载到本地
ytlzq0228@vm01:~$ scp root@10.1.2.3:/root/Python/code.txt ./

3、SSH秘钥操作命令ssh-keygen

如果ssh或者scp的时候出现下述提醒

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!

It is also possible that the RSA host key has just been changed.
The fingerprint for the SHA key sent by the remote host is
SHA256:oeJv1ODY3h6l4zC3ZOr3Qhp/bZelyT3mSrhVCULn/og.
Please contact your system administrator.
Add correct host key in /var/root/.ssh/known_hosts to get rid of this message.
Offending key in /var/root/.ssh/known_hosts:1
RSA host key for 10.1.2.3 has changed and you have requested strict checking.
Host key verification failed.

表示本次ssh的主机传给你的秘钥与之前保存的秘钥不一样,本机怀疑远端服务器被劫持或者被篡改。一般出现在服务器重装操作系统后仍然使用原来的IP,或者某台新服务的IP与之前你曾经远程过的服务器IP一样。
注意!如果你确认这次远程是安全的,服务器没有被恶意劫持。
那么使用以下命令清除之前保存的秘钥,并重新接收新的秘钥。

ytlzq0228@vm01:~$ ssh-keygen -R 10.1.2.3(你远程服务器的IP)

4、使用key免密码ssh服务器

某些情况,系统要求不能用password的方式验证,而要通过key的方式验证。一方面增加安全性,另一方面登录的时候无需输入密码,方便!
认证原理:
当客户端再次发送一个连接请求,包括ip、用户名;服务端得到客户端的请求后,会到authorized_keys中查找,如果有对应的的IP和用户,就会随机生成一个字符串,服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端,得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端,服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录了
基本配置逻辑:
客户端生成秘钥对,私钥自己保存好,公钥上传到服务器端。服务器端同意添加你的公钥,即认定允许你远程登录我这台服务器。
操作步骤
1、首先在A机器生成密钥对,命令:ssh-keygen,本例中生成的秘钥保存在/root/.ssh/id_rsa.ssh/下的id_rsaid_rsa.pub两个文件中,分别是私钥和公钥,选填设置密钥对密码。

ytlzq0228@vm01:~$ ssh-keygen
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:esARTVf53owszvSNjetiqWF4qcrzSMISX/TB+J0gsAg root@localhost.localdomain
The key's randomart image is:
ytlzq0228@vm01:~$ ls -a ~/.ssh
.  ..  id_rsa  id_rsa.pub

2、将客户端的公钥(id_rsa.pub)拷贝到服务端(B主机)上root的home目录(因为咱们要登录的是root用户)并命名为authorized_keys

>方法一:拿U盘拷
>方法二:scp传过去
>方法三:把id_rsa.pub的内容复制出来,粘贴到服务器的authorized_keys文件中去
>方法四:用ssh-copy-id这个命令,会自己在服务器相应的目录生成authorized_keys文件
ytlzq0228@vm01:~$ ssh-copy-id -i id\_rsa.pub root@10.1.2.3          
root@10.1.2.3's password:  #输入主机B登录密码以完成公钥拷贝

之后,下次远程的时候,就可以直接无需密码连接了。

二、系统操作类

1、查看系统进程

服务器卡了怎么办?通过下述命令可以查看当前主机运行的进程,以及进程对资源的占用情况。

ps -ef命令

ytlzq0228@vm01:~$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0  2019 ?        01:45:31 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2     0  0  2019 ?        00:00:01 [kthreadd]
root         3     2  0  2019 ?        00:12:55 [ksoftirqd/0]
root         5     2  0  2019 ?        00:00:00 [kworker/0:0H]
root         7     2  0  2019 ?        00:00:00 [migration/0]
root         8     2  0  2019 ?        00:00:00 [rcu_bh]

查看所有进程信息,会比较多,建议用grep命令进行筛选

top命令

ytlzq0228@vm01:~$ top
top - 15:09:12 up 17 days, 22:49,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 224 total,   1 running, 153 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  4030648 total,  1225488 free,   222068 used,  2583092 buff/cache
KiB Swap:   969960 total,   969960 free,        0 used.  3517960 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                                                    
30646 ytlzq02+  20   0   51344   4516   3688 R   6.2  0.1   0:00.01 top                                                                                                                                                                                        
    1 root      20   0  160180   9596   6856 S   0.0  0.2   0:29.65 systemd                                                                                                                                                                                    
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.13 kthreadd                                                                                                                                                                                   
    3 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 rcu_gp                                                                                                                                                                                     
    4 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 rcu_par_gp                                                                                                                                                                                 
    6 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker/0:0H-kb   

查看系统进程线程运行情况,包括资源的使用情况,系统负载等。我的用法是看下服务器上负载是否很高,然后看具体是哪个进程,哪个线程占用cpu比较多。
基本用法
top 列出所有线程负载信息
top -H 列出所有线程的负载信息
top -H -p ${pid} 列出某个pid下所有线程的负载信息

pstree命令

ytlzq0228@vm01:~$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager───2*[{NetworkManager}]
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─acpid
        ├─avahi-daemon───avahi-daemon

查看系统进程树,他可以把各个进程之间的关系用树形结构标识出来。

2、结束进程命令-kill

用这个命令可以。
基本用法

ytlzq0228@vm01:~$ cat file.txt

3、查看网卡配置-ifconfig

特别需要注意的是,最小化安装的linux可能默认不带ifconfig
需要yum install net-tools

ytlzq0228@vm01:~$ ifconfig
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.20  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::6f67:f500:bbc7:9b8  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:8b:78:b4  txqueuelen 1000  (Ethernet)
        RX packets 224154680  bytes 115825762715 (115.8 GB)
        RX errors 0  dropped 26  overruns 0  frame 0
        TX packets 222664350  bytes 115992838205 (115.9 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

一般情况下,ensXXX或者ethX开头的是本机网卡。开发同学只需要查看这几张网卡的配置就好
除此之外,还可能会有dockerX,pppX,vmX等各种网卡,一般是虚拟网卡,对于线上服务器开发同学无需过分关心。

4、查看系统信息类命令

# uname -a                # 查看内核/操作系统/CPU信息
# cat /etc/issue
# cat /etc/redhat-release # 查看操作系统版本
# cat /proc/cpuinfo       # 查看CPU信息
# hostname                # 查看计算机名
# lspci -tv               # 列出所有PCI设备
# lsusb -tv               # 列出所有USB设备
# lsmod                   # 列出加载的内核模块
# env                     # 查看环境变量

5、常见系统日志位置

大部分的系统级功能和正经的软件,都会在/var/log路径下创建日志,可以直接用cat或者tail命令查看

/var/log/message     //系统启动后的信息和错误日志,Linux中最常用的日志之一
/var/log/secure      //与安全相关的日志信息
/var/log/maillog    //与邮件相关的日志信息
/var/log/cron       //与定时任务相关的日志信息
/var/log/spooler    //与UUCP和news设备相关的日志信息
/var/log/boot.log   //守护进程启动和停止相关的日志消息

6、查看磁盘空间-df -h

如果磁盘空间不足,可以使用df- h命令查看当前磁盘占用量,如下图,已经出现磁盘100%使用的情况。

ytlzq0228@vm01:~$ df -h 
Filesystem      Size  Used Avail Use% Mounted on
udev            1.9G     0  1.9G   0% /dev
tmpfs           394M  1.2M  393M   1% /run
/dev/sda1        20G   20G     0 100% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup

使用find可以找到磁盘中的大文件,并选择性的清理掉。

ytlzq0228@vm01:~$ find / -size +100M |xargs ls -lh
find: ‘/proc/22139/task/22139/fd/6’: No such file or directory
find: ‘/proc/22139/task/22139/fdinfo/6’: No such file or directory
find: ‘/proc/22139/fd/5’: No such file or directory
find: ‘/proc/22139/fdinfo/5’: No such file or directory
-rw-r--r-- 1 root root 1.0G 6月  15 16:36 /data/test_randread1
-r-------- 1 root root 128T 7月  12 17:48 /proc/kcore
-rw------- 1 root root 948M 1月  19 15:15 /swapfile
-rw------- 1 root root 128M 7月  12 17:48 /sys/devices/pci0000:00/0000:00:0f.0/resource1
-rw------- 1 root root 128M 7月  12 17:48 /sys/devices/pci0000:00/0000:00:0f.0/resource1_wc
-rw-r--r-- 1 root root  10G 4月   1 19:48 /test_randread/123
-rw-r--r-- 1 root root 120M 6月   3 23:08 /usr/lib/firefox/libxul.so
-rw-r--r-- 1 root root 117M 5月  13 21:05 /usr/lib/thunderbird/libxul.so
-rw------- 1 root root 243M 4月  25 20:57 /var/lib/snapd/cache/047a079b88612d704414da7c3efee15569e6667974609066cf7811712d98ffaab0e4dbe7e1db2e54c6b60a28d1c41c16
-rw-r--r-- 1 root root 150M 8月   6  2019 /var/lib/snapd/seed/snaps/gnome-3-28-1804_67.snap
-rw------- 1 root root 161M 1月  25 05:17 /var/lib/snapd/snaps/gnome-3-28-1804_116.snap
-rw------- 1 root root 162M 6月   6 18:53 /var/lib/snapd/snaps/gnome-3-28-1804_128.snap
-rw------- 1 root root 256M 5月   7 09:20 /var/lib/snapd/snaps/gnome-3-34-1804_33.snap
-rw------- 1 root root 256M 6月   6 10:33 /var/lib/snapd/snaps/gnome-3-34-1804_36.snap

7、神级网络防火墙+NAT命令-iptables

iptables可以做什么?
防火墙
策略路由
DNAT端口映射
SNAT让虚机共享上网
软路由
有以上需求的,可以参考下面这篇文章
【开发运维手牵手】「Linux篇」iptables用法详解和典型配置举例

三、文件操作类

1、查看文件内容命令-cat、tail、head、more、less

cat

用这个命令查看配置文件,或者是日志文件。但是有点需要注意,cat命令会把整个文件输出到终端了,如果文件内容非常多,建议使用grep进行过滤,或者直接用less或more命令。
基本用法

ytlzq0228@vm01:~$ cat file.txt

tail

查看某个文件的尾部,或者查看标准出入的最末尾,默认值显示10行,可以用-n参数来指定输出多少行。

基本用法

ytlzq0228@vm01:~$ tail -n 100 file.txt 输出最末尾的100行
ytlzq0228@vm01:~$ tail -f file.txt 随着文件新增,持续输出新增的内容,一般用来看实时日志

head

和tail命令很相似,不过head是输出头部内容,个人感觉head远没有tail命令用的多。

基本用法

ytlzq0228@vm01:~$ head -n 100 file.txt 输出最开始的100行

more

也是用来查看文件,但more命令只加载一屏的内容,可以向下翻动,因为加载的内容少,所以比cat快多了。

基本用法

ytlzq0228@vm01:~$ more file.txt

less

和more很像,但是可以上下翻动,感觉less和more只需要less就可以了,完全可以去掉more啊

基本用法

ytlzq0228@vm01:~$ less file.txt

2、文件编辑器-vi和vim

首先,我们要知道vi和vim不是一个东西啊!
所有的 Unix类系统都会内建 vi 文书编辑器,其他编辑器则不一定会存在。对Unix及Linux系统的任何版本,vi编辑器是完全相同的。
但是目前我们使用比较多的是 vim 编辑器。
vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
具体的vi和vim的快捷键等用法,之后会单独开一篇文章讲,这里只是简单的提一下。
【开发运维手牵手】「Linux篇」vi/vim快捷键及用法解释
贴一张神图
在这里插入图片描述

3、文件增删-touch、mkdir和rm

touch用于增加文件,rm用于增加文件(remove)

ytlzq0228@vm01:~$ touch text.txt
#在当前目录新建文件
ytlzq0228@vm01:~$ touch /home/ytlzq0228/test.txt
#在绝对路径下新建文件
ytlzq0228@vm01:~$ midir ./bgp_script
#在当面目录下创建bgp_script文件夹
ytlzq0228@vm01:~$ rm text.txt
#删除当前目录下文件
ytlzq0228@vm01:~$ rm -rf ./bgp_script/*
#删除当前路径下./bgp_script文件夹和内部全部内容 -f参数用于强制删除不提示 -r参数用于递归
ytlzq0228@vm01:~$ rm -rf /*
#删库跑路命令,强制递归删除根目录下所有文件和子目录

4、写入文件命令EOF和>>

使用>或者>>可以将屏幕显示内容写入文件
请注意,>写入文件为覆盖重写,>>写入文件为追加。

ytlzq0228@vm01:~$ ifconfig > a.txt
ytlzq0228@vm01:~$ cat a.txt 
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.20.20  netmask 255.255.255.0  broadcast 10.0.20.255
        inet6 fe80::e2e9:5411:cbd4:a747  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:a7:dd:ba  txqueuelen 1000  (Ethernet)
        RX packets 648867771  bytes 57443415987 (53.4 GiB)
        RX errors 0  dropped 622  overruns 0  frame 0
        TX packets 641727408  bytes 81167630246 (75.5 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 132  bytes 11424 (11.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 132  bytes 11424 (11.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

EOF命令可以直接快捷的给文件追加内容。用法示例如下

ytlzq0228@vm01:~$ cat >> a.txt <<EOF
> 输入想保存到文件的文字
> EOF

5、内容和数据筛选命令-grep

grep是一个非常有用的内容查找命令。grep可以单独使用,也可以在其他命令执行后对回显结果进行筛选。
基本用法

ytlzq0228@vm01:~$ ifconfig | grep ens192 从ifconfig命令的结果中筛选出包含“ens192”的行
ytlzq0228@vm01:~$ grep "eth0" ./route.txt 从route.txt文件中筛选出包含“eth0”的行

grep支持正则表达式,例如

ytlzq0228@vm01:~$ ifconfig | grep -o -E "([0-9]{1,3}[.]){3}[0-9]{1,3}"
172.31.1.110
255.255.240.0
172.31.15.255

其中参数 -E 表示使用扩展正则表达式egrep
参数 -o 表示只显示一行中匹配正则表达式的部分
更多grep的用法,请参阅
【开发运维手牵手】「Linux篇」grep筛选命令用法

6、文本分片分列功能-awk

awk命令类似于.split()函数功能,可以对文本内容进行分列或者分片。
例如下面的例子,我们想取出route -n的结果中,第1行,第8列的字符“eth0”,即可用grep取行,awk '{print $8}'取列。
在这里插入图片描述
具体awk命令用法,请参见
【开发运维手牵手】「Linux篇」awk命令用法
Linux awk 命令

四、故障排错类

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逗老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值