一、监控系统状态

1. w、cpuinfo、vmstat

参数的使用方法

(1)W

  1. 第一行从左面开始显示的信息依次为:时间,系统运行时间,登录用户数,平均负载。<br /> load average:’ 后面的三个数值:<br /> 第一个数值表示1分钟内系统的平均负载值<br /> 第二个数值表示5分钟内系统的平均负载值 <br /> 第三个数值表示15分钟内系统的平均负载值<br /> 这个值的意义是,单位时间段内CPU活动进程数。当然这个值越大就说明你的服务器压力越大。一般情况下这个值只要不超过服务器的cpu数量就没有关系,如果服务器cpu数量为8,那么这个值若小于8,就说明当前服务器没有压力。 <br /> 第二行开始以及下面所有的行,告诉我们的信息是,当前登录的都有哪些用户,以及他们是从哪里登录的等等。

(2)cpuinfo

  1. cat /proc/cpuinfo | head -n 20 //查看服务器有几个cpu 记录了cpu的详细信息
  2. grep -c 'processor' /proc/cpuinfo //查看当前系统有几个cpu
  1. 上面使用的 w 查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力,但是具体是哪里(CPU, 内存,磁盘等)有压力就无法判断了。通过 vmstat 就可以知道具体是哪里有压力。

(3)vmstat

  1. vmstat //使用 vmstat 监控系统的状态
  2. vmstat 1 5 //每隔一秒钟打印一次状态,共打印5
  1. vmstat命令打印的结果共分为6部分:procs, memory, swap, io, system, cpu。其中 r b si so bi bo需要重点关注。 <br />①procs 显示进程相关信息<br /> r :表示运行和等待cpu时间片的进程数,如果长期大于服务器cpu的个数,则说明cpu不够用了;<br /> b :表示等待资源的进程数,比如等待I/O, 内存等,这列的值如果长时间大于1,则需要关注一下了;<br />②memory 内存相关信息<br /> swpd :表示切换到交换分区中的内存数量 ;<br /> free :当前空闲的内存数量;<br /> buff :缓冲大小,(即将写入磁盘的);<br /> cache :缓存大小,(从磁盘中读取的);<br />③swap 内存交换情况<br /> si :由交换区写入到内存的数据量;<br /> so :由内存写入到交换区的数据量;<br />④io 磁盘使用情况<br /> bi :从块设备读取数据的量(读磁盘);<br /> bo 从块设备写入数据的量(写磁盘);<br />⑤system 显示采集间隔内发生的中断次数<br /> in :表示在某一时间间隔中观测到的每秒设备中断数;<br /> cs :表示每秒产生的上下文切换次数;<br />⑥CPU 显示cpu的使用状态<br /> us :显示了用户下所花费 cpu 时间的百分比;<br /> sy :显示系统花费cpu时间百分比;<br /> id :表示cpu处于空闲状态的时间百分比;<br /> wa :表示I/O等待所占用cpu时间百分比;<br /> st :表示被偷走的cpu所占百分比(一般都为0,不用关注);<br /> IO部分的bi以及bo也是要经常参考的对象。如果磁盘io压力很大时,这两列的数值会比较高。另外当si, so两列的数值比较高,并且在不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响极大。<br /> 使用 vmstat 查看系统状态的时候,通常都是使用下面的形式来查看的。
  1. [root@VM_10_10_centos ~]# vmstat 1 5
  2. procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
  3. r b swpd free buff cache si so bi bo in cs us sy id wa st
  4. 0 0 0 180632 243168 1718188 0 0 13 16 3 3 1 1 99 0 0
  5. 0 0 0 180456 243168 1718188 0 0 0 0 893 2493 1 0 99 0 0
  6. 0 0 0 180124 243168 1718188 0 0 0 88 1193 2755 1 1 98 0 0
  7. 0 0 0 180556 243168 1718196 0 0 0 0 1062 2564 0 1 99 0 0
  8. 0 0 0 180704 243168 1718200 0 0 0 0 944 2534 0 0 99 0 0

上面的代码表示,每隔一秒钟打印一次状态,共打印5次,以上所介绍的各个参数中,要经常关注关注r列,b列,和wa列

2、top、free、ps、netstat

(1)top

  1. top //显示进程所占系统资源 top 状态下,按 shift + m”, 可以按照内存使用大小排序。按数字 1 可以列出各颗cpu的使用状态

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

  1. [root@VM_10_10_centos ~]# top
  2. top - 19:39:46 up 42 days, 3:53, 1 user, load average: 0.00, 0.00, 0.00
  3. Tasks: 189 total, 1 running, 188 sleeping, 0 stopped, 0 zombie
  4. Cpu(s): 0.4%us, 0.4%sy, 0.0%ni, 99.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
  5. Mem: 8059000k total, 7878848k used, 180152k free, 243384k buffers
  6. Swap: 0k total, 0k used, 0k free, 1718860k cached
  7. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  8. 9028 root 20 0 5655m 826m 5244 S 0.7 10.5 279:10.10 java
  9. 2068 rabbitmq 20 0 3261m 77m 1864 S 0.3 1.0 150:56.04 beam.smp
  10. 2230 mongod 20 0 487m 50m 16m S 0.3 0.6 182:30.69 mongod
  11. 2565 root 20 0 717m 10m 1464 S 0.3 0.1 253:46.21 barad_agent
  12. 3207 root 20 0 5700m 757m 4568 S 0.3 9.6 271:12.50 java
  13. 18619 999 20 0 2271m 336m 5500 S 0.3 4.3 112:13.84 mysqld
  14. 28909 root 20 0 15024 1404 1008 R 0.3 0.0 0:00.01 top
  15. 31640 root 20 0 5647m 683m 4600 S 0.3 8.7 338:10.21 java
  16. 1 root 20 0 19356 632 312 S 0.0 0.0 1:21.39 init
  17. 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
  18. 3 root RT 0 0 0 0 S 0.0 0.0 0:21.01 migration/0
  19. 4 root 20 0 0 0 0 S 0.0 0.0 0:11.48 ksoftirqd/0
  20. 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
  21. 6 root RT 0 0 0 0 S 0.0 0.0 0:03.55 watchdog/0
  22. 7 root RT 0 0 0 0 S 0.0 0.0 0:23.44 migration/1

重点关注的几项:%CPU, %MEM, COMMAND

  1. top -bn1 //使用top -bn1 非动态打印系统资源使用情况
  1. [root@VM_10_10_centos ~]# top -bn1
  2. top - 19:41:21 up 42 days, 3:54, 1 user, load average: 0.00, 0.00, 0.00
  3. Tasks: 189 total, 1 running, 188 sleeping, 0 stopped, 0 zombie
  4. Cpu(s): 0.6%us, 0.5%sy, 0.0%ni, 98.7%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st
  5. Mem: 8059000k total, 7880108k used, 178892k free, 243528k buffers
  6. Swap: 0k total, 0k used, 0k free, 1719324k cached
  7. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  8. 9028 root 20 0 5655m 826m 5244 S 2.0 10.5 279:10.61 java
  9. 18059 nobody 20 0 2403m 141m 23m S 2.0 1.8 37:25.14 httpd
  10. 1 root 20 0 19356 632 312 S 0.0 0.0 1:21.39 init
  11. 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
  12. 3 root RT 0 0 0 0 S 0.0 0.0 0:21.01 migration/0
  13. 4 root 20 0 0 0 0 S 0.0 0.0 0:11.48 ksoftirqd/0
  14. 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
  15. 6 root RT 0 0 0 0 S 0.0 0.0 0:03.55 watchdog/0
  16. 7 root RT 0 0 0 0 S 0.0 0.0 0:23.44 migration/1
  17. 8 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/1
  18. 9 root 20 0 0 0 0 S 0.0 0.0 0:16.03 ksoftirqd/1

和 top 命令唯一的区别就是,它一次性全部把所有信息输出出来而非动态显示。

(2)free

  1. free //使用free查看内存使用状况
  1. [root@VM_10_10_centos ~]# free
  2. total used free shared buffers cached
  3. Mem: 8059000 7808688 250312 22676 198580 1696644
  4. -/+ buffers/cache: 5913464 2145536
  5. Swap: 0 0 0
  1. free -m //还可以加-m 或者-g选项分别以MG为单位打印内存使用状况
  1. [root@VM_10_10_centos ~]# free -m
  2. total used free shared buffers cached
  3. Mem: 7870 7626 243 22 193 1657
  4. -/+ buffers/cache: 5775 2094
  5. Swap: 0 0 0

(3)ps

  1. 查看正在运行的系统进程,在windows下只要打开任务管理器即可查看。在Linux下,其实在上面介绍的top命令就可以,但是不容易看,当然还有专门显示系统进程的命令
  1. ps 查看系统进程
  2. ps aux ps -elf
  3. ps aux

下面是几个参数的意义:
PID :进程的id,这个id很有用,在Linux中内核管理进程就得靠pid来识别和管理某一个程,比如我想终止某一个进程,则用‘kill 进程的pid 有时并不能杀掉,则需要加一个-9选项了 kill -9 进程pid
STAT :表示进程的状态,进程状态分为以下几种(不要求记住,但要了解)
D 不能中断的进程(通常为IO)
R 正在运行中的进程
S 已经中断的进程,通常情况下,系统中大部分进程都是这个状态
T 已经停止或者暂停的进程,如果我们正在运行一个命令,比如说 sleep 10 如果我们按一下ctrl -z 让他暂停,那么我们用ps查看就会显示T这个状态
W 这个好像是说,从内核2.6xx 以后,表示为没有足够的内存页分配
X 已经死掉的进程(这个好像从来不会出现)
Z 僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。如果太多,就有问题了。一般不会出现。
< 高优先级进程
N 低优先级进程
L 在内存中被锁了内存分页
s 主进程
l 多线程进程
+ 代表在前台运行的进程
关于ps命令的使用,经常会连同管道符一起使用
看某个进程或者它的数量:

  1. ps -aux | grep -c mingetty
  2. ps -aux | grep mingetty
  1. [root@VM_10_10_centos ~]# ps aux |grep -c mingetty
  2. 7
  3. [root@VM_10_10_centos ~]# ps aux |grep mingetty
  4. root 2433 0.0 0.0 4060 92 tty1 Ss+ Feb12 0:00 /sbin/mingetty /dev/tty1
  5. root 2435 0.0 0.0 4060 88 tty2 Ss+ Feb12 0:00 /sbin/mingetty /dev/tty2
  6. root 2437 0.0 0.0 4060 88 tty3 Ss+ Feb12 0:00 /sbin/mingetty /dev/tty3
  7. root 2439 0.0 0.0 4060 92 tty4 Ss+ Feb12 0:00 /sbin/mingetty /dev/tty4
  8. root 2441 0.0 0.0 4060 88 tty5 Ss+ Feb12 0:00 /sbin/mingetty /dev/tty5
  9. root 2444 0.0 0.0 4060 88 tty6 Ss+ Feb12 0:00 /sbin/mingetty /dev/tty6
  10. root 31608 0.0 0.0 103324 892 pts/0 R+ 19:52 0:00 grep mingetty

(4)netstat

  1. 查看网络状况
  1. [root@cctv ~]# netstat -ntpl ##打印当前系统启动哪些端口
  2. Active Internet connections (only servers)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  4. tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 811/sshd
  5. tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1103/master
  6. tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1114/mysqld
  7. tcp6 0 0 :::80 :::* LISTEN 826/httpd
  8. tcp6 0 0 :::22 :::* LISTEN 811/sshd
  9. tcp6 0 0 ::1:25 :::* LISTEN 1103/master
  1. [root@cctv ~]# netstat ##打印网络连接状况
  2. Active Internet connections (servers and established)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State
  4. tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
  5. tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
  6. tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
  7. tcp 0 52 192.168.100.10:22 192.168.100.1:59341 ESTABLISHED
  8. tcp6 0 0 :::80 :::* LISTEN
  9. tcp6 0 0 :::22 :::* LISTEN
  10. tcp6 0 0 ::1:25 :::* LISTEN
  11. raw6 0 0 :::58 :::* 7

二、 网络相关

1. 配置与修改网络

  1. 查看网络有两种办法:<br /> ifconfig ip a(适用于centos7版本以上)
  1. ifconfig
  2. ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  3. inet 192.168.100.10 netmask 255.255.255.0 broadcast 192.168.100.255
  4. inet6 fe80::2aa2:5632:71fe:e5bb prefixlen 64 scopeid 0x20<link>
  5. ether 00:0c:29:f6:31:96 txqueuelen 1000 (Ethernet)
  6. RX packets 908 bytes 74221 (72.4 KiB)
  7. RX errors 0 dropped 0 overruns 0 frame 0
  8. TX packets 416 bytes 220219 (215.0 KiB)
  9. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  10. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
  11. inet 127.0.0.1 netmask 255.0.0.0
  12. inet6 ::1 prefixlen 128 scopeid 0x10<host>
  13. loop txqueuelen 1000 (Local Loopback)
  14. RX packets 0 bytes 0 (0.0 B)
  15. RX errors 0 dropped 0 overruns 0 frame 0
  16. TX packets 0 bytes 0 (0.0 B)
  17. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  18. ip a
  19. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  20. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  21. inet 127.0.0.1/8 scope host lo
  22. valid_lft forever preferred_lft forever
  23. inet6 ::1/128 scope host
  24. valid_lft forever preferred_lft forever
  25. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
  26. link/ether 00:0c:29:f6:31:96 brd ff:ff:ff:ff:ff:ff
  27. inet 192.168.100.10/24 brd 192.168.100.255 scope global noprefixroute ens33
  28. valid_lft forever preferred_lft forever
  29. inet6 fe80::2aa2:5632:71fe:e5bb/64 scope link noprefixroute
  30. valid_lft forever preferred_lft forever

修改网络配置文件

  1. vim /etc/sysconfig/network-scripts/ifcfg-ens33
  2. **修改内容如下**:
  3. BOOTPROTO=static ###
  4. ONBOOT=yes ###
  5. IPADDR=192.168.100.10 ###
  6. NETMASK="255.255.255.0" # centos7可以不配
  7. GATEWAY=192.168.100.2 ###
  8. DNS1=8.8.8.8 ###
  9. DNS2=114.114.114.114

2. 修改主机名

  1. hostnamectl set-hostname cctv
  2. su
  3. vim /etc/hosts 做一个映射
  4. cat /etc/hosts
  5. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  6. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  7. 192.168.100.10 localhost-wsn

3. 设置DNS

DNS是用来解析域名用的,平时我们访问网站都是直接输入一个网址,而dns把这个网址解析到一个IP。

  1. vim /etc/resolv.conf
  2. cat /etc/resolv.conf
  3. # Generated by NetworkManager
  4. nameserver 114.114.114.114
  5. resolv.conf有它固有的格式,一定要写成 nameserver IP 的格式

4. 关闭防火墙与selinux

seLinux是Redhat/CentOS系统特有的安全机制。不过因为这个东西限制太多,配置也特别繁琐所以几乎没有人去真正应用它。所以装完系统,我们一般都要把seLinux关闭,以免引起不必要的麻烦

(1)关闭防火墙

  1. systemctl stop firewalld && systemctl disable firewalld
  2. systemctl status firewalld

(2) 关闭selinux

  1. 临时关闭:
  2. setenforce 0
  3. getenforce
  4. Permissive
  5. 永久关闭:
  6. vim /etc/selinux/config
  7. # This file controls the state of SELinux on the system.
  8. # SELINUX= can take one of these three values:
  9. # enforcing - SELinux security policy is enforced.
  10. # permissive - SELinux prints warnings instead of enforcing.
  11. # disabled - No SELinux policy is loaded.
  12. SELINUX=enforcing ##改为 permissive
  13. # SELINUXTYPE= can take one of three values:
  14. # targeted - Targeted processes are protected,
  15. # minimum - Modification of targeted policy. Only selected processes are protected.
  16. # mls - Multi Level Security protection.
  17. SELINUXTYPE=targeted

三、任务计划

  1. 主要使用crontab工具来定时处理脚本或任务

1. crontab工具参数

  1. 关于cron任务计划功能的操作都是通过crontab这个命令来完成的。其中常用的选项有:<br /> -u :指定某个用户,不加-u选项则为当前用户;<br /> -e :制定计划任务;<br /> -l :列出计划任务;<br /> -r :删除计划任务。

2. crontab工具使用

  1. crontab -e //使用 crontab -e 来进行编写任务计划,这实际上是使用vim工具打开了crontab的配置文件
  2. cat /var/spool/cron/root //从左到右,依次为:分,时,日,月,周,命令行。而上面的例子的含义是:在65日(这一天必须是星期3)的1001分执行命令 echo "ok" > /root/cron.log
  3. crontab -l //查看已经设定的任务计划
  4. crontab -r //删除计划任务
  5. crontab -l
  6. no crontab for root

四、系统数据备份

  1. 使用rsync工具来备份数据<br /> 数据备份,毫无疑问很重要。rsync. 从字面上的意思你可以理解为remote sync (远程同步)这样可以让你理解的更深刻一些。Rsync不仅可以远程同步数据,当然还可以本地同步数据,rsync不像cp/scp一样会覆盖以前的数据(如果数据已经存在),它会先判断已经存在的数据和新数据有什么不同,只有不同时才会把不同的部分覆盖掉。
  1. [root@cctv ~]# rsync -av 123.txt /tmp/
  2. cat /tmp/123.txt
  3. 把当前目录下的sync.txt同步到/tmp/目录下,也可以更改目标文件的名字
  1. rsync 123.txt root@192.168.100.10:/root/
  2. root@192.168.100.10's password:
  3. 远程拷贝的话就是这样的形式了

1. rsync的命令格式

  1. rsync [OPTION]... SRC DEST<br /> rsync [OPTION]... SRC [USER@]HOST:DEST<br /> rsync [OPTION]... [USER@]HOST:SRC DEST<br /> rsync [OPTION]... [USER@]HOST::SRC DEST<br /> rsync [OPTION]... SRC [USER@]HOST::DEST<br /> 第一个例子即为第一种格式,<br /> 第二个例子即为第二种格式,但不同的是,并没有加user@host 如果不加默认指的是root. <br /> 第三种格式是从远程目录同步数据到本地。<br /> 第四种以及第五种格式使用了两个冒号,这种方式和前面的方式的不同在于验证方式不同

2. rsync常用选项

  1. -a 归档模式,表示以递归方式传输文件,并保持所有属性,等同于-rlptgoD, -a选项后面可以跟一个 --no-OPTION 这个表示关闭-rlptgoD中的某一个例如 -a--no-l 等同于-rptgoD<br /> -r 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项<br /> -v 打印一些信息出来,比如速率,文件数量等<br /> -l 保留软链结<br /> -L 向对待常规文件一样处理软链结,如果是SRC中有软连接文件,则加上该选项后将会把软连接指向的目标文件拷贝到DST<br /> -p 保持文件权限<br /> -o 保持文件属主信息<br /> -g 保持文件属组信息<br /> -D 保持设备文件信息<br /> -t 保持文件时间信息<br /> --delete 删除那些DSTSRC没有的文件<br /> --exclude=PATTERN 指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)<br /> --progress 在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等<br /> -u 加上这个选项后将会把DST中比SRC还新的文件排除掉,不会覆盖

五、Linux系统日记

  1. 使用Linux系统自带的日记系统来判定系统状况<br /> 日志记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计和监测,还可以实时的监测系统状态,监测和追踪侵入者等等。笔者常查看的日志文件为/var/log/message, 它是核心系统日志文件,包含了系统启动时的引导消息,以及系统运行时的其他状态消息。

1. logrotate.conf

(日志轮询的机制)

  1. [root@cctv ~]# tail /etc/logrotate.conf
  2. }
  3. /var/log/btmp {
  4. missingok
  5. monthly
  6. create 0600 root utmp
  7. rotate 1
  8. }
  9. system-specific logs may be also be configured here.
  10. 系统有一个日志轮询的机制,每星期切换一个日志,变成message.xxxxxxxx, message.xxxxxxxx, ... messages.xxxxxxxx 连同messages一共有5个这样的日志文件。这里的xxxxxxxx就是按照日期的格式生成的文件,在CentOS5里,这个后缀并不是日期而是数字1,2,3,4. 这是通过logrotate工具的控制来实现的,它的配置文件是/etc/logrotate.conf如果没有特殊需求请不要修改这个配置文件。

2. dmesg

(显示系统的启动信息)

  1. dmesg | less //dmesg 这个命令,它可以显示系统的启动信息,如果你的某个硬件有问题(比如说网卡)用这个命令也是可以看到的

3. last

(查看登录Linux历史信息)

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

4. /var/log/secure

(记录验证和授权等方面的信息)

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

六、Linux命令用法和工具

  1. xargsexec用法、screen工具<br />主要使用Linuxxargsexec工具结合其他命令来实现业务需求

1. xargs 、exec

  1. echo "1289371402" > aa.txt
  2. ls aa.txt | xargs cat
  3. 1289371402
  1. 它的作用就是把管道符前面的输出作为xargs后面的命令的输入。它的好处在于可以把本来两步或者多步才能完成的任务简单一步就能完成。
  1. find . -mtime +10 |xargs rm //查找当前目录创建时间大于10天的文件

现在我有一个这样的需求,查找当前目录下所有.txt的文件,然后把这些.txt的文件变成.txt_bak。正常情况下,我们不得不写脚本去实现,但是使用xargs就一步

  1. cd test/
  2. touch 1.txt 2.txt 3.txt 4.txt 5.txt
  3. ls出现1.txt 2.txt 3.txt 4.txt 5.txt
  4. ls *.txt | xargs -n1 -i{} mv {} {}_bak
  5. ls出现1.txt_bak 2.txt_bak 3.txt_bak 4.txt_bak 5.txt_bak
  6. ##xargs -n1 –i{} 类似for循环,-n1意思是一个一个对象的去处理,-i{}把前面的对象使用{}取代,mv {} {}_bak 相当于 mv 1.txt 1.txt_bak。

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

  1. find . -mtime +1 -exec ls {} \;
  2. ##这个命令中也是把{}作为前面find出来的文件的替代符,后面的 \ 为 ; 的脱意符,不然shell会把分号作为该行命令的结尾。

2. screen工具

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

(1)使用nohup

  1. cat /usr/local/sbin/sleep.sh
  2. #!/bin/bash
  3. sleep 1000
  4. nohup sh /usr/local/sbin/sleep.sh&
  5. ##上列代码中直接加一个 ‘&’ 虽然丢到后台了,但是当退出该终端时很有可能这个脚本也会退出的,而在前面加上 nohup 就没有问题了,nohup的作用就是不挂断地运行命令。

(2)screen工具

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

  1. yum install screen.x86_64 -y //打开一个会话,直接输入screen命令然后回车,进入screen会话窗口。
  2. screen
  3. screen -ls 查看已经打开的screen会话
  4. screen -ls
  5. Ctrl +a 再按d退出该screen会话,只是退出,并没有结束。
  6. 结束的话输入Ctrl +d 或者输入exit
  7. exit
  8. [screen is terminating]
  1. 退出后还想再次登录某个screen会话,使用sreen -r [screen 编号],这个编号就是上例中那个2306. 当只有一个screen会话时,后面的编号是可以省略的。当你有某个需要长时间运行的命令或者脚本时就打开一个screen会话,然后运行该任务。按ctrl +a 再按d退出会话,不影响终端窗口上的任何操作。