每天2个Linux命令 crontab lsof


2017-08-08 每天2个Linux命令 crontab命令

crontab命令被用来提交和管理用户需要周期性执行的任务,与windows下的计划任务类似。

(1)用法:

用法: crontab  [-u user]  file

    crontab  [-u user]  [ -e | -l | -r ]

(2)功能:

功能:  当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,
如果有要执行的任务,则自动执行该任务。  

         在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。
    这个命令非常设合周期性的日志分析或数据备份等工作。

(3)选项参数:

  1) -l         列出当前计时器的设置,查看定时运行的程序

  2) -e             编辑该用户的计时器设置,设置计时器

  3) -r        删除该用户的计时器设置

  4) -u<用户名称>  指定要设定计时器的用户名称

(4)实例:(此命令用的不常,在此简要介绍)

  1)每1分钟执行一次command

* * * * * command
      2)每五分钟执行一次命令

 */5 * * * * command
     3)在每天的17:00执行这个命令

00 17 * * *  command
      4)在8:02,11:02,14:02,17:02,20:02 执行,在8点到20点的时间内,每三个小时执行一下命令

2 8-20/3 * * * command

以后会讨论crondtab的几个用法:

 *创建一个新的crontab文件:

  1.进入 /var/spool/cron目录下(目录为空表明当前系统内没有任何Linux计划任务需要执行)

[root@localhost /]# cd /var/spool/cron
[root@localhost cron]# ll
总用量 0

*列出crontab文件:

 2.用crontab自带的命令crontab -l 发现也是没有任何东西()

[root@localhost cron]# crontab -l
no crontab for root

*编辑crontab文件;

    3.如果目录已经存在指定的文件(文件名为当前用户名),则crontab -e 命令编辑它,否则创建新的文件。
    cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次 /etc/crontab,
    因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。

*/2 * * * * ls -l /home/sunjimeng/Documents > root.txt
*   * * * * echo "I am MenAngel" > root.txt


     *删除crontab文件;

     恢复丢失的crontab文件;  

(5)其他:

    1.什么是Windows的计划任务?

  在Windows中,系统有一项重要的“计划任务”功能,通过设置“计划任务”,你可以将每天或某一天的某个时间需要做的事拟成计划,
到约定的时间,不管你在电脑上进行什么工作,系统都会提醒你或者启动你设定好的任务程序。

    2.crontab的简介:

  crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,
并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρνο),原意是时间。
常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

    3.crontab文件:  

crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;
同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或者/etc之下的子目录中,
而这个文件只能由系统管理员来修改。crontab文件的每一行均遵守特定的格式,由空格或tab分隔为数个领域,
每个领域可以放置单一或多个数值。

    4.Linux下的任务调度

  Linux下的任务调度分为两类:系统任务调度和用户任务调度。

  系统任务调度:  系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,
这个就是系统任务调度的配置文件:


[root@localhost /]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
复制代码
      前三行是用来配置crond任务运行的环境变量。第一行SHELL变量指定了系统要使用哪个shell,这里是bash;
第二行PATH变量指定了系统执行命令的路径;第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,
如果MAILTO变量的值为空,则表示不发送任务执行信息给用户。

 *: 表示任何时刻
  ,: 表示分割
-:表示一个段,如第二端里: 1-5,就表示1到5点
 /n : 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1.
      用户任务调度:  用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。
所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致。

[root@localhost /]# cd /var/spool/cron
[root@localhost cron]# ll
总用量 0
/etc/cron.deny       该文件中所列用户不允许使用crontab命令 
/etc/cron.allow      该文件中所列用户允许使用crontab命令 
/var/spool/cron/      所有用户crontab文件存放的目录,以用户名命名

5.crond服务

   1)安装crontab:

  yum install crontabs

      服务操作说明:

复制代码
/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置
复制代码
  查看crontab服务状态:  service crond status

复制代码
[root@localhost sunjimeng]# service crond status
Redirecting to /bin/systemctl status  crond.service
crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)
   Active: active (running) since 五 2016-05-27 23:11:47 PDT; 1 weeks 5 days ago
 Main PID: 1303 (crond)
   CGroup: /system.slice/crond.service
           └─1303 /usr/sbin/crond -n

5月 27 23:11:47 localhost.localdomain systemd[1]: Started Command Scheduler.
5月 27 23:11:47 localhost.localdomain crond[1303]: (CRON) INFO (RANDOM_DELAY...
5月 27 23:11:48 localhost.localdomain crond[1303]: (CRON) INFO (running with...
Hint: Some lines were ellipsized, use -l to show in full.
复制代码
  手动启动crontab服务:  service crond start

[root@localhost sunjimeng]# service crond start
Redirecting to /bin/systemctl start  crond.service
    查看crontab服务是否已设置为开机启动,执行命令:  ntsysv

[root@localhost sunjimeng]# ntsysv

加入开机自动启动:  chkconfig –level 35 crond on(以后再介绍)

  *要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start即可。

2017-08-08 每天2个Linux命令 lsof命令

lsof命令用于查看你进程打开的文件,端口(TCP、UDP),找回/恢复删除的文件,打开文件的进程。

(1)用法:

用法:  lsof  [参数]  [文件]

(2)功能:

功能:  lsof 命令可显示系统打开的文件.(因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。)

在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,
无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。

 因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,
因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

(3)选项参数:

  1) +D<目录>      递归列出目录下被打开的文件 

  2) -u s         列出login name或UID为 s的程序

3) -c<进程名>      列出指定进程所打开的文件

  4) -i<条件>        列出符合条件的进程。(4、6、协议、:端口、 @ip )

  5) -n          -n<目录>  列出使用NFS的文件

(4)实例:

  1)[sunjimeng@localhost ~]$ lsof |more -20        无任何参数,显示当前系统已经打开的正在使用的所有文件

复制代码
[sunjimeng@localhost ~]$ lsof |more -20
COMMAND     PID         TID     USER   FD      TYPE             DEVICE  SIZE/OFF          NODE    NAME
进程名称     标志符      线程id  所有者 文件描述符 文件类型           磁盘名称 文件大小             索引节点 文件名称 
systemd       1                 root  cwd   unknown                                         /proc/1/cwd (readlink: Permission denied)
systemd       1                 root  rtd   unknown                                         /proc/1/root (readlink: Permission denied)
systemd       1                 root  txt   unknown                                         /proc/1/exe (readlink: Permission denied)
systemd       1                 root NOFD                                                   /proc/1/fd (opendir: Permission denied)
kthreadd      2                 root  cwd   unknown                                         /proc/2/cwd (readlink: Permission denied)
kthreadd      2                 root  rtd   unknown                                         /proc/2/root (readlink: Permission denied)
kthreadd      2                 root  txt   unknown                                         /proc/2/exe (readlink: Permission denied)
kthreadd      2                 root NOFD                                                   /proc/2/fd (opendir: Permission denied)
ksoftirqd     3                 root  cwd   unknown                                         /proc/3/cwd (readlink: Permission denied)
ksoftirqd     3                 root  rtd   unknown                                         /proc/3/root (readlink: Permission denied)
ksoftirqd     3                 root  txt   unknown                                         /proc/3/exe (readlink: Permission denied)
ksoftirqd     3                 root NOFD                                                   /proc/3/fd (opendir: Permission denied)
kworker/0     5                 root  cwd   unknown                                         /proc/5/cwd (readlink: Permission denied)
kworker/0     5                 root  rtd   unknown                                         /proc/5/root (readlink: Permission denied)
kworker/0     5                 root  txt   unknown                                         /proc/5/exe (readlink: Permission denied)
kworker/0     5                 root NOFD                                                   /proc/5/fd (opendir: Permission denied)
migration     7                 root  cwd   unknown                                         /proc/7/cwd (readlink: Permission denied)
migration     7                 root  rtd   unknown                                         /proc/7/root (readlink: Permission denied)  //是根目录到软连接
migration     7                 root  txt   unknown                                         /proc/7/exe (readlink: Permission denied)
--More--
复制代码
      FW的详解:

      1)cwd(current work dirctory):    应用程序的当前工作目录,应用程序启动的目录,除非它本身对这个目录进行更改。

      2)txt:                  该类型的文件是程序代码,如应用程序二进制文件本身或共享库

      3)rtd:                root directory

      4)0:                    表示标准输出

      5)1:                 表示标准输入

      6)2:                 表示标准错误

      TYPE:文件类型,如DIR、REG等,常见的文件类型:

  (1)DIR:表示目录

  (2)CHR:表示字符类型

  (3)BLK:块设备类型

  (4)UNIX: UNIX 域套接字

  (5)FIFO:先进先出 (FIFO) 队列

  (6)IPv4:网际协议 (IP) 套接字

    DEVICE:指定磁盘的名称

    SIZE:  文件的大小

    NODE: 索引节点(文件在磁盘上的标识)

    NAME:   打开文件的确切名称

2)[root@localhost root]# lsof /bin/bash        查看与指定文件相关的进程的信息,即找出使用此文件的进程

复制代码
[root@localhost root]# lsof /bin/bash
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND    PID      USER  FD   TYPE DEVICE SIZE/OFF     NODE NAME
ksmtuned   807      root txt    REG    8,3   960384 34340720 /usr/bin/bash
bash     35234 sunjimeng txt    REG    8,3   960384 34340720 /usr/bin/bash
bash     38651      root txt    REG    8,3   960384 34340720 /usr/bin/bash

3)[root@localhost /]# lsof +D /home/sunjimeng/.local/share    递归查看某个目录的文件信息

复制代码
[root@localhost /]# lsof +D /home/sunjimeng/.local/share
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND    PID      USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
nautilus  3387 sunjimeng  mem    REG    8,3    32768  71239928 /home/sunjimeng/.local/share/gvfs-metadata/home-ddf07f21.log
nautilus  3387 sunjimeng  mem    REG    8,3      764  71239927 /home/sunjimeng/.local/share/gvfs-metadata/home
nautilus  3387 sunjimeng   15r   REG    8,3      764  71239927 /home/sunjimeng/.local/share/gvfs-metadata/home
nautilus  3387 sunjimeng   16r   REG    8,3    32768  71239928 /home/sunjimeng/.local/share/gvfs-metadata/home-ddf07f21.log
evolution 3426 sunjimeng   11u   REG    8,3    14336 104003229 /home/sunjimeng/.local/share/evolution/addressbook/system/contacts.db
tracker-s 3447 sunjimeng   15w   REG    8,3   210635  71234252 /home/sunjimeng/.local/share/tracker/data/

4)[root@localhost dir1]# lsof |grep ‘/home/sunjimeng/Document/dir1’  不用+D参数得到与某个文件有关的进程信息的方法

复制代码
[root@localhost dir1]# lsof +D /home/sunjimeng/Document/dir1
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
bash    38651 root  cwd    DIR    8,3       30 36004773 /home/sunjimeng/Document/dir1
lsof    41562 root  cwd    DIR    8,3       30 36004773 /home/sunjimeng/Document/dir1
lsof    41563 root  cwd    DIR    8,3       30 36004773 /home/sunjimeng/Document/dir1
[root@localhost dir1]# lsof |grep '/home/sunjimeng/Document/dir1'
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
bash      38651                 root  cwd       DIR                8,3        30   36004773 /home/sunjimeng/Document/dir1
lsof      41628                 root  cwd       DIR                8,3        30   36004773 /home/sunjimeng/Document/dir1
grep      41629                 root  cwd       DIR                8,3        30   36004773 /home/sunjimeng/Document/dir1
lsof      41630                 root  cwd       DIR                8,3        30   36004773 /home/sunjimeng/Document/dir1tracker-store.journal

5)[root@localhost /]# lsof -u sunjimeng |more -20      列出某个用户打开的所有文件相关的进程信息

复制代码
[root@localhost /]# lsof -u sunjimeng |more -20
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND     PID      USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
gnome-key  2967 sunjimeng  cwd       DIR                8,3         6   71227180 /var/gdm
gnome-key  2967 sunjimeng  rtd       DIR                8,3      4096        128 /
gnome-key  2967 sunjimeng  txt       REG                8,3   1038688   35649707 /usr/bin/gnome-keyring-daemon
gnome-key  2967 sunjimeng  mem       REG                8,3     50496   68402049 /usr/lib64/gio/modules/libdconfsettings.so
gnome-key  2967 sunjimeng  mem       REG                8,3 106065056   34340715 /usr/lib/locale/locale-archive
gnome-key  2967 sunjimeng  mem       REG                8,3    153184   67393930 /usr/lib64/liblzma.so.5.0.99
gnome-key  2967 sunjimeng  mem       REG                8,3    398272   67393933 /usr/lib64/libpcre.so.1.2.0
gnome-key  2967 sunjimeng  mem       REG                8,3     44088   67328582 /usr/lib64/librt-2.17.so
gnome-key  2967 sunjimeng  mem       REG                8,3    110808   67328580 /usr/lib64/libresolv-2.17.so
gnome-key  2967 sunjimeng  mem       REG                8,3    147120   67393944 /usr/lib64/libselinux.so.1
gnome-key  2967 sunjimeng  mem       REG                8,3     90632   67393947 /usr/lib64/libz.so.1.2.7
gnome-key  2967 sunjimeng  mem       REG                8,3     32296   67394691 /usr/lib64/libffi.so.6.0.1
gnome-key  2967 sunjimeng  mem       REG                8,3     15616   67394699 /usr/lib64/libgmodule-2.0.so.0.4000.0
gnome-key  2967 sunjimeng  mem       REG                8,3   2107760   67328552 /usr/lib64/libc-2.17.so
gnome-key  2967 sunjimeng  mem       REG                8,3    141616   67328578 /usr/lib64/libpthread-2.17.so
gnome-key  2967 sunjimeng  mem       REG                8,3     19736   67394316 /usr/lib64/libcap-ng.so.0.0.0
gnome-key  2967 sunjimeng  mem       REG                8,3     19384   67394141 /usr/lib64/libgpg-error.so.0.10.0
gnome-key  2967 sunjimeng  mem       REG                8,3     19512   67328558 /usr/lib64/libdl-2.17.so
gnome-key  2967 sunjimeng  mem       REG                8,3    534488   67394280 /usr/lib64/libgcrypt.so.11.8.2
--More--

6)[root@localhost /]# lsof -c sleep        列出与程序有关的文件

复制代码
[root@localhost /]# lsof -c sleep
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND   PID USER   FD   TYPE             DEVICE  SIZE/OFF     NODE NAME
sleep   42253 root  cwd    DIR                8,3      4096      128 /
sleep   42253 root  rtd    DIR                8,3      4096      128 /
sleep   42253 root  txt    REG                8,3     33088 34268435 /usr/bin/sleep
sleep   42253 root  mem    REG                8,3 106065056 34340715 /usr/lib/locale/locale-archive
sleep   42253 root  mem    REG                8,3   2107760 67328552 /usr/lib64/libc-2.17.so
sleep   42253 root  mem    REG                8,3    164336 67328545 /usr/lib64/ld-2.17.so
sleep   42253 root    0r   CHR                1,3       0t0     1045 /dev/null
sleep   42253 root    1u  unix 0xffff880080995a00       0t0    18112 socket
sleep   42253 root    2u  unix 0xffff880080995a00       0t0    18112 socket
复制代码
复制代码
[root@localhost /]# lsof |grep sleep                          //等价
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
sleep     42993                 root  cwd       DIR                8,3      4096        128 /
sleep     42993                 root  rtd       DIR                8,3      4096        128 /
sleep     42993                 root  txt       REG                8,3     33088   34268435 /usr/bin/sleep
sleep     42993                 root  mem       REG                8,3 106065056   34340715 /usr/lib/locale/locale-archive
sleep     42993                 root  mem       REG                8,3   2107760   67328552 /usr/lib64/libc-2.17.so
sleep     42993                 root  mem       REG                8,3    164336   67328545 /usr/lib64/ld-2.17.so
sleep     42993                 root    0r      CHR                1,3       0t0       1045 /dev/null
sleep     42993                 root    1u     unix 0xffff880080995a00       0t0      18112 socket
sleep     42993                 root    2u     unix 0xffff880080995a00       0t0      18112 socket

7)[root@localhost /]# lsof -i      列出所有的网络连接

复制代码
[root@localhost /]# lsof -i
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
chronyd    787 chrony    1u  IPv4  16222      0t0  UDP *:ntp 
chronyd    787 chrony    2u  IPv6  16223      0t0  UDP *:ntp 
chronyd    787 chrony    3u  IPv4  16224      0t0  UDP localhost:323 
chronyd    787 chrony    5u  IPv6  16225      0t0  UDP localhost:323 
avahi-dae  790  avahi   12u  IPv4  17290      0t0  UDP *:mdns 
avahi-dae  790  avahi   13u  IPv4  17291      0t0  UDP *:44093 
sshd      1282   root    3u  IPv4  20803      0t0  TCP *:ssh (LISTEN)
sshd      1282   root    4u  IPv6  20805      0t0  TCP *:ssh (LISTEN)
master    2527   root   13u  IPv4  22473      0t0  TCP localhost:smtp (LISTEN)
master    2527   root   14u  IPv6  22474      0t0  TCP localhost:smtp (LISTEN)
cupsd     3269   root   11u  IPv6  27563      0t0  TCP localhost:ipp (LISTEN)
cupsd     3269   root   12u  IPv4  27564      0t0  TCP localhost:ipp (LISTEN)

列出使用指定协议的网络连接:

复制代码
[root@localhost /]# lsof -i TCP
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1282 root    3u  IPv4  20803      0t0  TCP *:ssh (LISTEN)
sshd    1282 root    4u  IPv6  20805      0t0  TCP *:ssh (LISTEN)
master  2527 root   13u  IPv4  22473      0t0  TCP localhost:smtp (LISTEN)
master  2527 root   14u  IPv6  22474      0t0  TCP localhost:smtp (LISTEN)
cupsd   3269 root   11u  IPv6  27563      0t0  TCP localhost:ipp (LISTEN)
cupsd   3269 root   12u  IPv4  27564      0t0  TCP localhost:ipp (LISTEN)

8)[root@localhost /]# lsof -n /home/sunjimeng      列出指定目录下使用NFS文件系统的所有文件

复制代码
[root@localhost /]# lsof -n /home/sunjimeng
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND     PID      USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
gnome-ses  2990 sunjimeng  cwd    DIR    8,3     4096  137 /home/sunjimeng
gnome-set  3168 sunjimeng  cwd    DIR    8,3     4096  137 /home/sunjimeng
gnome-she  3265 sunjimeng  cwd    DIR    8,3     4096  137 /home/sunjimeng
gsd-print  3282 sunjimeng  cwd    DIR    8,3     4096  137 /home/sunjimeng
nautilus   3387 sunjimeng  cwd    DIR    8,3     4096  137 /home/sunjimeng
vmtoolsd   3435 sunjimeng  cwd    DIR    8,3     4096  137 /home/sunjimeng
tracker-m  3442 sunjimeng  cwd    DIR    8,3     4096  137 /home/sunjimeng
tracker-s  3447 sunjimeng  cwd    DIR    8,3     4096  137 /home/sunjimeng
abrt-appl  3450 sunjimeng  cwd    DIR    8,3     4096  137 /home/sunjimeng
top       15226 sunjimeng  cwd    DIR    8,3     4096  137 /home/sunjimeng
gnome-ter 35226 sunjimeng  cwd    DIR    8,3     4096  137 /home/sunjimeng

(5)其他:

  lsof可以打开的文件的类型:

  1.普通文件

  2.目录

  3.网络文件系统的文件

  4.字符或设备文件

  5.(函数)共享库

  6.管道,命名管道

  7.符号链接

  8.网络文件(例如:NFS file、网络socket,unix域名socket)

  9.还有其它类型的文件,等等。

文章作者: 邓滔
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 邓滔 !
评论
  目录