Linux常用指令 4

来源:互联网 发布:美国对中国的误解知乎 编辑:程序博客网 时间:2024/05/20 22:37

Linux command

find指令
// pathname:待查找的目录路径// -print 将匹配的文件输出到标准输出// -exec 将匹配的文件执行该参数所给出的shell命令// -ok 和-exec类似,只是以一种更为安全的模式来执行$find pathname -options [-print -exec -ok]

find命令查找选项
-name 按照文件名查找

$find . -name "[A-Z]*.info" -print

-perm 按照文件权限来查找

$find ~ -perm 755 -print

-prune 可以使find命令不在当前指定的目录中查找,如果同时使用了-depth,那么-prune选项将被find命令忽略

$find /web -name "/web/log" -prune -o -print // 在web目录下查找,但忽略/web/log目录

-user 按照文件属主来查找文件

$find /bin -user test -print // 在/bin目录先查找文件属主为test的文件$find ~ -nouser -print // 查找属主账户已被删除的文件

-group 按照文件所属的组来查找文件
-nogroup 查找无有效所属组的文件,即该文件的属主在/etc/passwd中不存在

$find /web -group acount -print // 在web目录下查找属于acount用户组的文件 $find /web -nogroup -print // 查找没有有效所属用户组的所有文件

-mtime -n +n 按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前

$find / -mtime -6 -print // 在系统根目录下查找更改事件在6天以内的文件$find /var/tmp -mtime +3 -print // 在/var/tmp目录下查找更改事件在3天以前的文件

-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件

$find . -new new.log ! -newer old.log // 查找更改时间比new.log新但比old.log旧的文件

-type 查找某一类型的文件,如 b(块设备文件),d(目录),c(字符设备文件),p(管道文件),l(符号连接文件),f(普通文件)

$find /tmp -type d -print // 在tmp目录下查找所有的目录$find . ! -type d -print // 在当前目录下查找除目录以外的所有类型的文件$find /etc -type l -print  // 在/etc目录下查找所有的符号链接文件

-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计

$find . -size +1000000c -print // 在当前目录下查找文件长度大于1M字节的文件 $find /tmp -size 100c -print // 在tmp目录下查找文件长度为100字节的文件$find . -size +10 -print // 在当前目录下查找文件长度超过10块的文件(一块为512字节)

-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找

$find . -name "tmp" -depth -print // 从当前目录开始,查找名为tmp的文件,首先匹配所有的文件然后在进入子目录中查找

-fstype 查找文娱某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息
-mount 在查找文件时不跨越文件系统mount点

$find /var -name "*.log" -mount -print // 从/var 目录开始查找位于本文件系统中文件名以log结尾的文件

-follow 如果find命令遇到符号连接文件,就跟踪至链接所指向的文件
-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中

$find etc home -depth -print | cpio -o /dev/rmt0

当匹配到一些文件后希望对其进行某些操作时可以使用-exec选项,exec选项后面跟随着所要执行的命令,然后是一对儿{}, 一个空格和一个,最后是一个分号

find . type f -exec ls -l {} \; // 在当前目录下查找所有的普通文件,并列出文件的详细信息find /tmp -type f -mtime +6 -exec rm {} \; // 在tmp目录下查找更改日志在6天以前的普通文件并删除find /tmp -type f -mtime +6 -ok rm {} \; // 在tmp目录下查找更改日志在6天以前的普通文件并删除,在删除之前会先给出提示
xargs

xargs命令与find命令一起使用,find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样,它可以先处理最先获取的一部分文件,然后是下一批,如此往下执行。

$find / -type f -print | xargs file // 先在系统中查找普通文件,然后使用xargs来测试它们分别属于哪类文件$find /web -perm -7 -print | xargs chmod o-w // 在web目录下查找所有用户具有读写和执行权限的文件,并收回相应的写权限$find / -type f -print | xargs grep "error" // 在所有的普通文件查找error这个词语
cron和crontab

cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业,crontab命令允许用于提交、编辑或删除相应的作业,每一个用户都可以有一个crontab文件来保存调度信息,可以使用它运行任意一个shell脚本或某个命令,每小时运行一次,或一周几次,这取决于用户。crontab文件每个条目中各个域的意义和格式:第一列 分钟1~59;第二列 小时1~23(0子夜);第三列 日1~31;第四列 月1~12;第五列 星期0~6(0星期天);第六列 要运行的命令。在这些域中,可以用横杆来表示一个时间范围,例如要在周二到周五这个时间段运行某个作业,可以在星期域使用2-5来表示,还可以在域中使用逗号“,”,如只希望在周二和周五执行某个作业,就用2,5来表示,可以用星号来表示连续的时间段,如果对某个时间的域没有特别的界定可以在该域中填入,该文件中每一个条目必须含有5个时间域,而且每个域之间要用空格分开,文件中所有的注释行用#来表示。

50 13 * * * /web/build.sh // 每天1350运行build.sh0,30 13-20 * * 5 /web/build.sh // 在每周五13002030之间每隔30分钟运行build.sh

crontab命令选项:

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

-u 用户名
-e 编辑crontab文件
-l 列出crontab文件的内容
-r 删除crontab文件

创建一个新的crontab文件:
在考虑想cron进程提交一个crontab文件之前,首先要做的一件事就是设备环境变量EDITOR,cron进程根据它来确定使用哪个编辑器来编辑crontab文件,可以编辑$HOME目录下的.profile文件,在其中加入下面一行

EDITOR=vi;export EDITOR

保存并退出,如创建一个skycron文件,加入如下行:

0,30 13-15 * * * /bin/echo 'date' > /dev.console

系统在每天的13:00到15:30每个半个小时向控制台输出一次当前的时间,可以把skycron作为cron命令的参数:

$crontab skycron  // 这样该文件已经提交给cron进程,这样在指定的时间段内每隔半个小时运行一次

列出crontab文件:

$crontab -l > $HOME/skycron // 列出当前系统上crontab文件并备份到$HOME目录下

编辑crontab文件:

$crontab -e

删除crontab文件

$crontab -r

恢复丢失的crontab文件:

$crontab <filename>
at命令

at命令允许用于向cron守护进程提交作业,使其在稍后的时间运行,一旦一个作业被提交,at命令将会保留当前的环境变量,包括路径,不像crontab只提供缺省的环境,该作业的所有输出都将以电子邮件的形式发给用户,除非你对其输出进行了重定向,和crontab一样,根用户可以通过/etc目录下的at.allow和at.deny文件来控制哪些用户可以使用at命令,哪些用户不可以,at命令的基本形式为:

at [-f script] [-m -l -r] [time] [date]

-f script 为所要提交的脚本或命令
-l 列出当前所有等待运行的作业,atq命令具有相同的作用
-r 清除作业,为了清除某个作业,还要提供相应的作业标识(ID)
-m 作业完成后给用户发邮件
time at命令的时间格式非常灵活,可以是H、HH.HHHH、HH:MM或H:M,其中H和M分别是小时和分钟,还可以是a.m或p.m
date 日期格式可以是月份数或日起数,而且at命令还能够识别注入today、tomorrow这样的词

$at 7:30at> find / -name "log" -print // 在7:30系统将执行find命令at><EOT>  // ctl+D$at 7:30am tomorrow -f /chromium/build.sh // 在明天早上7:30 build.sh脚本会被执行

列出所提交的作业:

$at -l

清楚一个作业:

// atrm [job no] 或 at -r [job no]$at -l  // 获取所有作业标识$atrm job 1 // 删除id为1的作业
&命令

使用&命令把作业放到后台执行,这样终端可以做其他的事情,不至于被阻塞

//格式:命令 &$ find /tmp -name "log" -print>log.tmp 2>&1

这里写图片描述
在命令提交成功后,系统会给出对应的进程号,可以使用ps x|grep pid查看对应进程的信息

nohup命令

如果你正在运行一个进程,而且你觉得在退出账户时该进程还不会结束,那么可以使用nohup命令,该命令可以在你退出账户之后继续运行相应的进程,nohup是不挂起的意思

格式:nohup command &$nohup ./build.sh > build.out 2>1& // 退出终端重新打开后当前进程还会继续运行
0 0
原创粉丝点击