Linux常用的命令

、监控系统状态

1.使用w查看当前系统的负载,代码如下:

 第一行从左面开始显示的信息依次为:时间,系统运行时间,登录用户数,平均负载。第二行开始以及下面所有的行,告诉我们的信息是,当前登录的都有哪些用户,以及他们是从哪里登录的等等。

load average 后面的三个数值,第一个数值表示1分钟内系统的平均负载值;第二个数值表示5分钟内系统的平均负载值;第三个数值表示15分钟系统的平均负载值。

2.查看服务器有几个CPU,代码如下:

 因为我就有一个虚拟机所以 physical id 为0。 

3.使用 vmstat 监控系统的状态,示例代码如下:

上面讲的 w 查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力,但是具体是哪里(CPU, 内存,磁盘等)有压力就无法判断了。通过 vmstat 就可以知道具体是哪里有压力。vmstat命令打印的结果共分为6部分:procs, memory, swap, io, system, cpu. 请重点关注一下r b si so bi bo几列。

(1)procs 显示进程相关信息

r :表示运行和等待cpu时间片的进程数,如果长期大于服务器cpu的个数,则说明cpu不够用了;

b :表示等待资源的进程数,比如等待I/O, 内存等,这列的值如果长时间大于1,则需要关注一下了;

(2)memory 内存相关信息

swpd :表示切换到交换分区中的内存数量 ;

free :当前空闲的内存数量;

buff :缓冲大小,(即将写入磁盘的);

cache :缓存大小,(从磁盘中读取的);

(3)swap 内存交换情况

si :由交换区写入到内存的数据量;

so :由内存写入到交换区的数据量;

(4)io 磁盘使用情况

bi :从块设备读取数据的量(读磁盘);

bo: 从块设备写入数据的量(写磁盘);

(5)system 显示采集间隔内发生的中断次数

in :表示在某一时间间隔中观测到的每秒设备中断数;

cs :表示每秒产生的上下文切换次数;

(6)CPU 显示cpu的使用状态

us :显示了用户下所花费 cpu 时间的百分比;

sy :显示系统花费cpu时间百分比;

id :表示cpu处于空闲状态的时间百分比;

wa :表示I/O等待所占用cpu时间百分比;

st :表示被偷走的cpu所占百分比(一般都为0,不用关注);

以上所介绍的各个参数中,经常会关注r列,b列,和wa列,三列代表的含义在上边说得已经很清楚。IO部分的bi以及bo也是要经常参考的对象。如果磁盘io压力很大时,这两列的数值会比较高。另外当si, so两列的数值比较高,并且在不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响极大。

通常情况下我们这样使用vmstat,代码如下:

这样写表示的是,每隔一秒钟打印一次状态,共打印5次。

4.top显示进程所占系统资源,代码如下:

 其实就输入一个top就可以,这个命令每三秒变一次,别看这么多代码其实主要关注点应该是我红色笔画住的。重点说一下RES和%MEM,RES 这一项为进程所占内存大小, %MEM 为使用内存百分比。在 top 状态下,按 “shift + m”, 可以按照内存使用大小排序。按数字 ‘1’ 可以列出各颗cpu的使用状态。看完之后ctrl+c退出继续输入代码即可。

另外,经常用到的是top -bn1记住bn后面是1不是L,它表示非动态打印系统资源使用情况,和 top 命令唯一的区别就是,它一次性全部把所有信息输出出来而非动态显示。按住Ctrl+z是提出top继续输入代码。

5.free查看内存使用状况,代码如下:

第一列
Mem 内存的使用信息
Swap 交换空间的使用信息
第一行
total 系统总的可用物理内存大小
used 已被使用的物理内存大小
free 还有多少物理内存可用
shared 被共享使用的物理内存大小
buff/cache 被 buffer 和 cache 使用的物理内存大小
available 还可以被 应用程序 使用的物理内存大小
我们还可以加-m 或者-g选项分别以M或G为单位打印内存使用状况。
6.ps 查看系统进程,由于代码出现太多暂时不放入图片了。
sp -aux   //查看系统进程
还有好多人喜欢使用 ps -elf其实都一样。
ps aux |grep -c mingetty  显示结果如下:

第一个红色的明显不对,需要减掉1,因为使用grep命令时,grep命令本身也算作了一个。

7.netstat查看网络状况:

首先先下载netstat,下载代码是:yum -y install net-tools 

然后再使用呢stat代码,由于花花电脑没办法下载就先不演示了。

netstat -lntp  //是查看网络状况

netstat -an   //是打印网络连接状况 

二、网络相关

1.ifconfig重启某一个网卡,代码如下:

 

ifdown 即停掉网卡,ifup即启动网卡。

有一点要提醒你的是,如果我们远程登录服务器,当使用ifdown eth0这个命令的时候,很有可能后面的命令ifup eth0不会被运行,这样导致我们断网而无法连接服务器,所以请尽量使用 service  network restart 这个命令来重启网卡。

2.查看pci总线上网卡,代码如下:

 可以清晰可见我是开了俩个网卡。lspci | grep -i net 这个代码跟上一个是一样的。

 3.临时修改主机名字,代码如下:

hostname 是查看主机名字,hostname +要修改的名字就像上面图片上的就把huahua改成了hua。

hostnamectl set-hostname +主机名    //永久性的修改主机名

4.

防火墙的打开与关闭,代码如下:

systenctl start firewalld  //打开防火墙

systenctl stop firewalld  //关闭防火墙

systenctl status firewalld  //查看防火墙是否打开

 这是打开防火墙

 这是查看防火墙是开还是关着,紫色框住的就是开着的意思。

三、Linux系统任务计划

1.

实大部分系统管理工作都是通过定期自动执行某一个脚本来完成的,那么如何定期执行某一个脚本呢?这就要借助Linux的cron功能了。

关于cron任务计划功能的操作都是通过crontab这个命令来完成的。其中常用的选项有:

-u :指定某个用户,不加-u选项则为当前用户;

-e :制定计划任务;

-l :列出计划任务;

-r :删除计划任务。

crontab  -e

使用 crontab -e 来进行编写任务计划,这实际上是使用vim工具打开了crontab的配置文件,我们写下如下内容:

01 10 05 06 3 echo “ok” > /root/cron.log

每个字段的数字分表表示什么呢?从左到右,依次为:分,时,日,月,周,命令行。而上面的例子的含义是:在6月5日(这一天必须是星期3)的10点01分执行命令 echo “ok” > /root/cron.log

          crontab -e 实际上是打开了 “/var/spool/cron/username” (如果是root则打开的是/var/spool/cron/root)这个文件。使用的是vim编辑器,所以要保存的话则在命令模式下输入:wq即可。但是,你千万不要直接去编辑那个文件,因为可能会出错,所以一定要使用 crontab -e 来编辑。查看已经设定的任务计划使用 crontab  -l 命令,示例代码如下:

crontab  -l

01 10 05 06 3 echo “ok” > /root/cron.log

删除计划任务要用 crontab -r,,示例代码如下:

crontab  -r

crontab  -l

no crontab for root

cron的内容不算太难,但是需要你牢固掌握.

四、Linux系统备份

在Linux系统下数据备份的工具很多,但笔者就只用一种那就是rsync. 从字面上的意思你可以理解为remote sync (远程同步)这样可以让你理解的更深刻一些。Rsync不仅可以远程同步数据,当然还可以本地同步数据,rsync不像cp/scp一样会覆盖以前的数据(如果数据已经存在),它会先判断已经存在的数据和新数据有什么不同,只有不同时才会把不同的部分覆盖掉。如果你的Linux没有rsync命令请使用 yum install -y rsync 安装。

下面笔者先举一个例子,然后再详细讲解rsync的用法,示例代码如下:

rsync -av sync.txt  /tmp

sending incremental file list

sync.txt

 

sent 1799 bytes  received 31 bytes  3660.00 bytes/sec

total size is 1723  speedup is 0.94

上面例子表示把当前目录下的sync.txt同步到/tmp/目录下,也可以更改目标文件的名字, rsync -av sync.txt /tmp/newsync.txt, 如果是远程拷贝的话就是这样的形式了: IP:path (如:10.0.2.34:/root/),示例代码如下:

rsync -av sync.txt  118.89.199.110:/tmp/newsync.txt

root@118.89.199.110’s password:

sending incremental file list

 

sent 33 bytes  received 12 bytes  18.00 bytes/sec

total size is 1723  speedup is 38.29

rsync的命令格式

rsync [OPTION]… SRC DEST

rsync [OPTION]… SRC [USER@]HOST:DEST

rsync [OPTION]… [USER@]HOST:SRC DEST

rsync [OPTION]… [USER@]HOST::SRC DEST

rsync [OPTION]… SRC [USER@]HOST::DEST

          第一个例子即为第一种格式,第二个例子即为第二种格式,但不同的是,并没有加user@host 如果不加默认指的是root. 第三种格式是从远程目录同步数据到本地。第四种以及第五种格式使用了两个冒号,这种方式和前面的方式的不同在于验证方式不同,稍后详细介绍。

rsync常用选项

  1. -a 归档模式,表示以递归方式传输文件,并保持所有属性,等同于-rlptgoD, -a选项后面可以跟一个 –no-OPTION 这个表示关闭-rlptgoD中的某一个例如 -a–no-l 等同于-rptgoD
  2. -r 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项
  3. -v 打印一些信息出来,比如速率,文件数量等
  4. -l 保留软链结
  5. -L 向对待常规文件一样处理软链结,如果是SRC中有软连接文件,则加上该选项后将会把软连接指向的目标文件拷贝到DST
  6. -p 保持文件权限
  7. -o 保持文件属主信息
  8. -g 保持文件属组信息
  9. -D 保持设备文件信息
  10. -t 保持文件时间信息
  11. –delete 删除那些DST中SRC没有的文件
  12. –exclude=PATTERN 指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)
  13. –progress 在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等
  14. -u 加上这个选项后将会把DST中比SRC还新的文件排除掉,不会覆盖
  15. 选项确实有点多,不过不用担心,笔者工作这么多年,常用的选项页仅仅那么几个: (-a -v –delete –exclude), 请熟记他们吧。

五、Linux系统日记

日志重要吗?必须的,没有日志我们怎么知道系统状况?没有日志如何排查一个trouble?日志记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计和监测,还可以实时的监测系统状态,监测和追踪侵入者等等。

          笔者常查看的日志文件为/var/log/message, 它是核心系统日志文件,包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO错误、网络错误和其他系统错误都会记录到这个文件中。另外其他信息,比如某个人的身份切换为root以及用户自定义安装的软件(apache)的日志也会在这里列出。通常,/var/log/messages是在做故障诊断时首先要查看的文件。那你肯定会说了,这么多日志都记录到这个文件中,那如果服务器上有很多服务岂不是这个文件很快就会写的很大,没错,但是系统有一个日志轮询的机制,每星期切换一个日志,变成message.xxxxxxxx, message.xxxxxxxx, … messages.xxxxxxxx 连同messages一共有5个这样的日志文件。这里的xxxxxxxx就是按照日期的格式生成的文件,在CentOS5里,这个后缀并不是日期而是数字1,2,3,4. 这是通过logrotate工具的控制来实现的,它的配置文件是/etc/logrotate.conf如果没有特殊需求请不要修改这个配置文件。

          /var/log/messages是由syslogd这个守护进程产生的,如果停掉这个服务则系统不会产生/var/log/messages,所以这个服务不要停。Syslogd服务的配置文件为/etc/syslog.conf这个文件定义了日志的级别,具体详细的东西笔者不再阐述,因为若没有特殊需求是不需要修改这个配置文件的,请使用 man syslog.conf 获得更多关于它的信息。

除了关注/var/log/messages外,你还应该多关注一下 dmesg 这个命令,它可以显示系统的启动信息,如果你的某个硬件有问题(比如说网卡)用这个命令也是可以看到的.

关于安全方面的日志,笔者简单介绍几个命令或者日志。

 

命令 : last,示例代码如下

          last命令用来查看登录Linux历史信息,从左至右依次为账户名称、登录终端、登录客户端ip、登录日期及时长。last命令输出的信息实际上是读取了二进制日志文件/var/log/wtmp, 只是这个文件不能直接使用cat, vim, head, tail等工具查看。

另外一个和登陆信息有关的日志文件为/var/log/secure, 该日志文件记录验证和授权等方面的信息,比如ssh登陆系统成功或者失败,都会把相关信息记录在这个日志里。

          这一小节就介绍这么多,在结束之前,笔者给你一个小小的建议。以后在你日常的管理工总中要养成多看日志的习惯,尤其是一些应用软件的日志,比如apache, mysql, php等常用的软件,看它们的日志(错误日志)可以帮助你排查问题以及监控它们的运行状况是否良好。

六、Linux命令xargs与exec用法

在前面的例子中笔者曾经使用过这个命令,你是否有印象呢?现在就详细介绍一下它,平时笔者使用xargs还是比较多的,示例代码如下:

          它的作用就是把管道符前面的输出作为xargs后面的命令的输入。它的好处在于可以把本来两步或者多步才能完成的任务简单一步就能完成。xargs常常和find命令一起使用,比如,查找当前目录创建时间大于10天的文件,然后再删除, 示例代码如下:

find . -mtime +10 |xargs rm

          这种应用是最为常见的,xargs后面的rm 也可以加选项,当是目录时,就需要-r选项了。在笔者看来xargs的这个功能不叫什么,它的另一个功能才叫神奇。现在我有一个这样的需求,查找当前目录下所有.txt的文件,然后把这些.txt的文件变成.txt_bak。正常情况下,我们不得不写脚本去实现,但是使用xargs就一步,示例代码如下:

mkdir  test

cd test

touch 1.txt 2.txt 3.txt 4.txt 5.txt

ls

1.txt  2.txt  3.txt  4.txt  5.txt

ls *.txt |xargs -n1 -i {} mv {} {}_bak

ls

1.txt_bak  2.txt_bak  3.txt_bak  4.txt_bak  5.txt_bak

          xargs -n1 –i{} 类似for循环,-n1意思是一个一个对象的去处理,-i{}把前面的对象使用{}取代,mv {} {}_bak 相当于 mv 1.txt 1.txt_bak。你刚开始接触这个命令时也许有点难以理解,多练习一下你就会熟悉了,笔者建议你记住这个应用,很实用。

使用find命令时,经常使用一个选项就是这个-exec了,可以达到和xargs同样的效果。比如,查找当前目录创建时间大于10天的文件并删除,示例代码如下:

find . -mtime +10 -exec rm -rf {}\;

这个命令中也是把{}作为前面find出来的文件的替代符,后面的 \ 为 ; 的脱意符,不然shell会把分号作为该行命令的结尾。这个-exec有时候也挺实用的,它同样可以实现刚刚上面批量更改文件名的需求.

screen工具介绍

          有时候,我们也许会有这样的需求,要执行一个命令或者脚本,但是需要几个小时甚至几天。这就要考虑一个问题,就是中途断网或出现其他意外情况,执行的任务中断了怎么办?你可以把命令或者脚本丢到后台运行,不过也不保险。笔者下面就介绍两种方法来避免这样的问题发生。

  1. 使用nohup,示例代码如下:

cat  /usr/local/sbin/sleep.sh

#!/bin/bash

sleep 1000

nohup sh /usr/local/sbin/sleep.sh&

[1]19997

上列代码中直接加一个 ‘&’ 虽然丢到后台了,但是当退出该终端时很有可能这个脚本也会退出的,而在前面加上 nohup 就没有问题了,nohup的作用就是不挂断地运行命令。

  1. screen工具的使用

          简单来说,screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的SSH连接窗口那样。下面笔者介绍screen的一个简单应用。

  • 打开一个会话,直接输入screen命令然后回车,进入screen会话窗口。如果你没有screen命令,请用yum install -y screen 安装,示例代码如下:

screen

  • screen -ls 查看已经打开的screen会话,示例代码如下:

screen -ls

There is a screen on:

20990.pts-0.Linux       (Attached)

1 Socket in /var/run/screen/S-root.

3)Ctrl +a 再按d退出该screen会话,只是退出,并没有结束。结束的话输入Ctrl +d 或者输入exit

4)退出后还想再次登录某个screen会话,使用sreen -r [screen 编号],这个编号就是上例中那个20001. 当只有一个screen会话时,后面的编号是可以省略的。当你有某个需要长时间运行的命令或者脚本时就打开一个screen会话,然后运行该任务。按ctrl +a 再按d退出会话,不影响终端窗口上的任何操作。

posted @ 2021-05-25 19:43  花花de代码生活  阅读(172)  评论(0编辑  收藏  举报