• Linux Shell常用命令学习(1)


    1.   find
           find pathname -options [-print -exec -ok]
           让我们来看看该命令的参数:
           pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
           -print find命令将匹配的文件输出到标准输出。
           -exec find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {} \;,注意{}和\;之间的空格,同时两个{}之间没有空格,
           注意一定有分号结尾。
           0) -ok 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行
           find . -name "datafile" -ctime -1 -exec ls -l {} \; 找到文件名为datafile*, 同时创建实际为1天之内的文件, 然后显示他们的明细.
           find . -name "datafile" -ctime -1 -exec rm -f {} \; 找到文件名为datafile*, 同时创建实际为1天之内的文件, 然后删除他们.

           find . -name "datafile" -ctime -1 -ok ls -l {} \; 这两个例子和上面的唯一区别就是-ok会在每个文件被执行命令时提示用户, 更加安全.
           find . -name "datafile" -ctime -1 -ok rm -f {} \;

           1) find . -name   基于文件名查找,但是文件名的大小写敏感.   
           find . -name "datafile*"
       
           2) find . -iname  基于文件名查找,但是文件名的大小写不敏感.
           find . -iname "datafile*"
       
           3) find . -maxdepth 2 -name fred 找出文件名为fred,其中find搜索的目录深度为2(距当前目录), 其中当前目录被视为第一层.
           
           4) find . -perm 644 -maxdepth 3 -name "datafile*"  (表示权限为644的, 搜索的目录深度为3, 名字为datafile*的文件)
       
           5) find . -path "./rw" -prune -o -name "datafile*" 列出所有不在./rw及其子目录下文件名为datafile*的文件。
           find . -path "./dir*" 列出所有符合dir*的目录及其目录的文件.
           find . \( -path "./d1" -o -path "./d2" \) -prune -o -name "datafile*" 列出所有不在./d1和d2及其子目录下文件名为datafile*的文件。
       
           6) find . -user ydev 找出所有属主用户为ydev的文件。
           find . ! -user ydev 找出所有属主用户不为ydev的文件, 注意!和-user之间的空格。
       
           7) find . -nouser    找出所有没有属主用户的文件,换句话就是,主用户可能已经被删除。
       
           8) find . -group ydev 找出所有属主用户组为ydev的文件。
       
           9) find . -nogroup    找出所有没有属主用户组的文件,换句话就是,主用户组可能已经被删除。
       
           10) find . -mtime -3[+3] 找出修改数据时间在3日之内[之外]的文件。
           find . -mmin  -3[+3] 找出修改数据时间在3分钟之内[之外]的文件。
           find . -atime -3[+3] 找出访问时间在3日之内[之外]的文件。
           find . -amin  -3[+3] 找出访问时间在3分钟之内[之外]的文件。
           find . -ctime -3[+3] 找出修改状态时间在3日之内[之外]的文件。
           find . -cmin  -3[+3] 找出修改状态时间在3分钟之内[之外]的文件。
       
           11) find . -newer eldest_file ! -newer newest_file 找出文件的更改时间 between eldest_file and newest_file。
           find . -newer file     找出所有比file的更改时间更新的文件
           find . ! -newer file 找出所有比file的更改时间更老的文件
           
           12) find . -type d    找出文件类型为目录的文件。
           find . ! -type d  找出文件类型为非目录的文件。
           b - 块设备文件。
           d - 目录。
           c - 字符设备文件。
           p - 管道文件。
           l - 符号链接文件。
           f - 普通文件。
           
           13) find . -size [+/-]100[c/k/M/G] 表示文件的长度为等于[大于/小于]100块[字节/k/M/G]的文件。
       
           14) find . -empty 查找所有的空文件或者空目录.
       
           15) find . -type f | xargs grep "ABC"
           使用xargs和-exec的区别是, -exec可能会为每个搜索出的file,启动一个新的进程执行-exec的操作, 而xargs都是在一个进程内完成, 效率更高.

           16)Find命令的一般形式为:

    Shell代码 复制代码 收藏代码
    1. # find pathname -options [-print -exec -ok]  
    # find pathname -options [-print -exec -ok]


    让我们来看看该命令的参数:
    pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
    -print find命令将匹配的文件输出到标准输出。
    -exec  find命令对匹配的文件执行该参数所给出的shell命令。
    -ok 和- exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行.
    find命令选项
    1. -name   按照文件名查找文件

    Java代码 复制代码 收藏代码
    1. find -name test.txt   
    2. # find ~ -name "xxx.txt" -print// ~ 表示$HOME目录   
    3. # find . -name "xxx.txt" -print// . 表示当前目录   
    4. # find /etc -name "host*" -print// / 在指定目录中查找  
    find -name test.txt
    # find ~ -name "xxx.txt" -print// ~ 表示$HOME目录
    # find . -name "xxx.txt" -print// . 表示当前目录
    # find /etc -name "host*" -print// / 在指定目录中查找
    


    2.-perm   按照文件权限来查找文件

    Java代码 复制代码 收藏代码
    1. find -perm 755  
    2. # find ~ -perm 755 -print // 意义同name属性   
    3. # find . -perm 755 -print   
    4. # find /home -perm 755 -print  
    find -perm 755
    # find ~ -perm 755 -print // 意义同name属性
    # find . -perm 755 -print
    # find /home -perm 755 -print
    


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

    Java代码 复制代码 收藏代码
    1. find -mtime -2  
     find -mtime -2


    如果想使用find命令的这一选项来查找更改时间在两个小时以内的文件,除非有一个现成
    的文件其更改时间恰好在两个小时以前,否则就没有可用来比较更改时间的文件,为了解决
    这一问题,可以首先创建一个文件并将其日期和时间戳设置为所需要的时间。这可以用touch
    命令来实现,假设现在的时间是21:40,希望查找更改时间在两个小时以内的文件,可以首先创建这样

    Java代码 复制代码 收藏代码
    1. # touch -t 02032140 dstamp   
    2. # ls -l dstamp   
    3. -rw-r--r--    1 root     root            0  2月  3 21:40 dstamp   
    4. # find . -newer dstamp  
    # touch -t 02032140 dstamp
    # ls -l dstamp
    -rw-r--r--    1 root     root            0  2月  3 21:40 dstamp
    # find . -newer dstamp


    一个文件
    4.-newer file1  查找更改时间比文件file1新的文件。

    Java代码 复制代码 收藏代码
    1. # find -newer test.txt  
    # find -newer test.txt


    5.-type   查找某一类型的文件
    b - 块设备文件。
    d - 目录。
    c - 字符设备文件。
    p - 管道文件。
    l - 符号链接文件。
    f - 普通文件。

    Java代码 复制代码 收藏代码
    1. # find -type d   
    2. # find . ! -type d //查找当前目录下不是目录文件的其他文件   
    3. # find ~ -type d//意义同name   
    4. # find /etc -type d//意义同name  
    # find -type d
    # find . ! -type d //查找当前目录下不是目录文件的其他文件
    # find ~ -type d//意义同name
    # find /etc -type d//意义同name
    


    6.使用size选项
    可以按照文件长度来查找文件,这里所指的文件长度既可以用块(block)来计量,也可以用字节来计量。以字节计量文件长度的表达形式为 Nc;以块计量文件长度只用数字表示即可。

    Java代码 复制代码 收藏代码
    1. # find . -size -1000000c//当前目录下查找文件长度小于1M字节的文件   
    2. # find . -size +100c  
    # find . -size -1000000c//当前目录下查找文件长度小于1M字节的文件
    # find . -size +100c


    7 find 和 xargs
    在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递
    给exee执行

    Java代码 复制代码 收藏代码
    1. # find . -name "core" -print | xargs echo "" >/tmp/core.log//整个系统中查找内存信息转储文件然后把结果保存到/tmp/core.log 文件中   
    2. # find /apps/audit -perm -7 -print | xargs chmod o-w//在/apps/audit目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限   
    3. # find / -type f -print | xargs grep "device"//用grep命令在所有的普通文件中搜索device这个词  
    # find . -name "core" -print | xargs echo "" >/tmp/core.log//整个系统中查找内存信息转储文件然后把结果保存到/tmp/core.log 文件中
    # find /apps/audit -perm -7 -print | xargs chmod o-w//在/apps/audit目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限
    # find / -type f -print | xargs grep "device"//用grep命令在所有的普通文件中搜索device这个词
    


       
    2.   crontab:
           文件格式如下(每个列之间是使用空格分开的):
           第1列分钟1~59
           第2列小时1~23(0表示子夜)
           第3列日1~31
           第4列月1~12
           第5列星期0~6(0表示星期天)
           第6列要运行的命令
       
           分 时 日 月 星期 要运行的命令
       
           30 21* * * /apps/bin/cleanup.sh
           上面的例子表示每晚的21:30运行/apps/bin目录下的cleanup.sh。
           45 4 1,10,22 * * /apps/bin/backup.sh
           上面的例子表示每月1、10、22日的4:45运行/apps/bin目录下的backup.sh。
           10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
           上面的例子表示每周六、周日的1:10运行一个find命令。
           0,30 18-23 * * * /apps/bin/dbcheck.sh
           上面的例子表示在每天18:00至23:00之间每隔30分钟运行/apps/bin目录下的dbcheck.sh。
           0 23 * * 6 /apps/bin/qtrend.sh
           上面的例子表示每星期六的11:00pm运行/apps/bin目录下的qtrend.sh。
       
           -u 用户名。
           -e 编辑crontab文件。
           -l 列出crontab文件中的内容。
           -r 删除crontab文件。
           系统将在/var/spool/cron/目录下自动保存名为<username>的cron执行脚本.
           cron是定时完成的任务, 在任务启动时,一般来讲都是重新启动一个新的SHELL, 因此当需要使用登录配置文件的信息,特别是环境变量时,是非常麻烦的.
           一般这种问题的使用方法如下:
           0 2 * * * ( su - USERNAME -c "export LANG=en_US; /home/oracle/yb2.5.1/apps/admin/1.sh"; ) > /tmp/1.log 2>&1
           如果打算执行多条语句, 他们之间应使用分号进行分割. 注: 以上语句必须在root的帐户下执行.
       
    3.   nohup:
           nohup command &
           如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户之后继续运行相应的进程。
           Nohup就是不挂起的意思(no hang up)。
       
    4.   cut:
           1) cut一般格式为:cut [options] file1 file2
           -c list 指定剪切字符数。
           -f field 指定剪切域数。
           -d 指定与空格和tab键不同的域分隔符。
           -c 用来指定剪切范围,如下所示:
           -c1,5-7 剪切第1个字符,然后是第5到第7个字符。
           -c2- 剪切第2个到最后一个字符
           -c-5 剪切最开始的到第5个字符
           -c1-50 剪切前50个字符。
           -f 格式与-c相同。
           -f1,5 剪切第1域,第5域。
           -f1,10-12 剪切第1域,第10域到第12域。
           2) 使用方式:
           cut -d: -f3 cut_test.txt (基于":"作为分隔符,同时返回field 3中的数据) *field从0开始计算。
           cut -d: -f1,3 cut_test.txt (基于":"作为分隔符,同时返回field 1和3中的数据)
           cut -d: -c1,5-10 cut_test.txt(返回第1个和第5-10个字符)
       
    5.   sort:    
           1) 对文件内容进行排序,缺省分割符为空格,如果自定义需要使用-t选择,如-t:
           2) 使用分隔符分割后,第一个field为0,awk中为1
           3) 具体用法如下:
           sort -t: sort_test.txt(缺省基于第一个field进行排序,field之间的分隔符为":")
           sort -t: -r sort_test.txt(缺省基于第一个field进行倒序排序,field之间的分隔符为":")
           sort -t: +1 sort_test.txt(基于第二个field进行排序,field之间的分隔符为":")
           sort +3n sort_test.txt(基于第三个field进行排序,其中n选项提示是进行"数值型"排序)
           sort -u  sort_test.txt(去除文件中重复的行,同时基于整行进行排序)
           sort -o output_file -t: +1.2[n] sort_text.txt(基于第二个field,同时从该field的第二个字符开始,这里n的作用也是"数值型"排序,并将结果输出到output_file中)
           sort -t: -m +0 filename1 filename2(合并两个文件之后在基于第一个field排序)

    6.   pgrep和pkill:

           查找和杀死指定的进程, 他们的选项和参数完全相同, 这里只是介绍pgrep
           /> sleep 100&
           1000
           /> sleep 100&
           1001
       
           /> pgrep sleep
           1000
           1001
           /> pgrep -d: sleep    # -d定义多个进程之间的分隔符, 如果不定义则使用newline
           1000:1001
           /> pgrep -n sleep    # -n表示如果该程序有多个进程,查找最新的.
           1001
           /> pgrep -o  sleep    # -o表示如果该程序有多个进程,查找最老的.
           1000   
           /> pgrep -G root,oracle sleep # -G 表示进程的group id在-G后面的组列表中的进程会被考虑
           1000
           1001
           /> pgrep -u root,oracle sleep # -u 表示进程的effetive user id在-u后面的组列表中的进程会被考虑
           1000
           1001
           /> pgrep -U root,oracle sleep # -U 表示进程的real user id在-u后面的组列表中的进程会被考虑
           1000
           1001
           /> pgrep -x sleep # -x 表示进程的名字必须完全匹配, 以上的例子均可以部分匹配
           1000
           1001
           /> pgrep -x sle
       
           /> pgrep -l sleep # -l 将不仅打印pid,也打印进程名
           1000 sleep
           1001 sleep
           /> pgrep -lf sleep # -f 一般与-l合用, 将打印进程的参数
           1000 sleep 100
           1001 sleep 100
       
           /> pgrep -f sleep -d, | xargs ps -fp
           UID        PID  PPID  C STIME TTY          TIME CMD
           root      1000  2138  0 06:11 pts/5    00:00:00 sleep 1000
           root      1001  2138  0 06:11 pts/5    00:00:00 sleep 1000

    7.   fuser:
           fuser -m /dev    # 列出所有和/dev设备有染的进程pid.
           fuser testfile    # 列出和testfile有染的进程pid
           fuser -u testfile # 列出和testfile有染的进程pid和userid
           fuser -k testfile # 杀死和testfile有染的进程pid

    8.   mount:

       如何在unix下面mount一个windows下面的共享目录
           mount -t smbfs -o username=USERNAME,password=PASSWORD //windowsIp/pub_directory  /mountpoint  
           /> mkdir -p /mnt/win32
           /> mount -o username=administrator,password=1234 //10.1.4.103/Mine /mnt/win32
           /> umount /mnt/win32        # 卸载该mount.

    9.   netstat:

       -a 表示显示所有的状态
       -l 则只是显示listen状态的,缺省只是显示connected
       -p 显示应用程序的名字
       -n 显示ip、port和user等信息
       -t 只显示TCP的连接
       /> netstat -apnt
       /> netstat -lpnt      #如果只是显示监听端口的状态,可以使用该命令

    10. tune2fs:

       调整ext2/ext3文件系统特性的工具

       -l 查看文件系统信息
       /> tune2fs -l /dev/sda1  #将会列出所有和该磁盘分区相关的数据信息,如Inode等。
       /> tune2fs -l /dev/sda1 | grep -i "block size"      #查看当前文件系统的块儿尺寸
       /> tune2fs -l /dev/sdb1 |grep -i "mount count"   #查看 mount count 挂载次数

    11.  开启或关闭Linux(iptables)防火墙
          重启后永久性生效:
          /> chkconfig iptables on         #开启
          /> chkconfig iptables off         #关闭
        
          即时生效,重启后还原:
          /> service iptables start        #开启
          /> service iptables stop         #关闭  


    12.  tar 分卷压缩和合并
          以每卷500M为例
          />tar cvzpf - somedir | split -d -b 500m    #tar分卷压缩
          />cat x* > mytarfile.tar.gz                      #tar多卷合并


    13.  把man或info的信息存为文本文件
          /> man tcsh | col -b > tcsh.txt
          /> info tcsh -o tcsh.txt -s


    14.  查看正在执行进程的线程数
          />ps -eo "args nlwp pid pcpu" 

    15.  使用md5sum计算文件的md5
          /> md5sum test.c
          07af691360175a6808567e2b08a11724  test.c

          /> md5sum test.c > hashfile
          /> md5sum –c hashfile     # 验证hashfile中包含的md5值和对应的文件,在执行该命令时是否仍然匹配, 如果此时test.c被修改了,该命令将返回不匹配的警告.

    16.  在ps命令中显示进程的完整的命令行参数
          />ps auwwx

  • 相关阅读:
    JS判断对象中是否存在某参数
    JS通过url下载文件
    .NET CORE LinQ查询中计算时间差
    C# 判断某个时间是星期几
    C#数组去重
    python Tank
    kubeflannel.yml Tank
    片言只语 Tank
    other Tank
    ERROR大集合 Tank
  • 原文地址:https://www.cnblogs.com/ljf181275034/p/2276431.html
Copyright © 2020-2023  润新知