`

Shell编程--基础-02-常用命令

阅读更多

 

出处:http://www.cnblogs.com/stephen-liu74/archive/2011/11/07/2202034.html

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都是在一个进程内完成, 效率更高.

    

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

 

17. chkconfig:

 

    1). 编辑chkconfig操作的Shell文件头。

    #!/bin/bash

    #

    # chkconfig: 2345 20 80

    # description: Starts and stops the Redis Server

    这个注释头非常重要,否则chkconfig命令无法识别。其中2345表示init启动的级别,即在2、3、4、5这四个级别中均启动该服务。20表示该脚本启动的优先级,80表示停止的优先级。这些可以在chkconfig的manpage中找到更为详细的说明。

    

    2). 编译Shell文件的内容:

    case "$1" in

    start)

        #TODO: 执行服务程序的启动逻辑。

        ;;

    stop)

        #TODO: 执行服务程序的停止逻辑。

        ;;

    restart)

        ;;

    reload)

        ;;

    condrestart)

        ;;

    status)

        ;;

    上面列出的case条件必不可少,如果确实没有就当做占位符放在那里即可,如上例。

    

    3). 添加和删除服务程序:

    #--add选项表示添加新的服务程序。

    /> chkconfig --add redis_6379

    #查看是否删除或添加成功

    /> chkconfig | grep redis_6379

    redis_6379      0:off   1:off   2:on    3:on    4:on    5:on    6:off

    #--del选项表示删除已有的服务程序。

    /> chkconfig --del redis_6379

分享到:
评论

相关推荐

    UNIX命令及SHELL编程

    这是一套完整的Unix培训教材,包括Unix常用命令及SHELL编程基础与高级技巧,PDF格式,共30个文件。另有2个Word文档。包内文件清单如下: 01_Shell-文件安全与权限.PDF 02_Shell-使用find和xargs.PDF 03_Shell-...

    Linux零基础学习笔记 Shell编程-菜鸟入门(超详细)

    本文将深入浅出地介绍Linux的基础知识,特别是Shell编程,为初学者提供一个全面的学习路径。 首先,我们需要理解Linux的核心概念。Linux是一种类Unix操作系统,它的核心是一个内核,负责管理硬件资源,而用户通过...

    常用SHELL命令--shell编程

    常用SHELL命令,适合初学者,很多常用命令,有简单的Shell命令实例。

    shell编程-shell编程

    ### Shell编程知识点详解 #### 一、Shell编程简介与概述 **Shell编程**是指使用Shell语言来编写程序的过程。Shell是一种用于与操作系统交互的命令行界面。在Unix和类Unix系统(包括Linux)中,Shell不仅是用户与...

    SHELL编程---初学者

    - 命令别名简化常用命令,如`alias ll='ls -l'`。 - 自定义函数可扩展SHELL功能,如上面提到的`myFunction`。 8. **数组与关联数组** - 数组用于存储多个值,如`arr=(value1 value2)`。 - Bash 4及以上版本支持...

    shell编程基础--

    Shell编程基础是Linux或Unix系统中进行自动化任务和批处理操作的重要工具。它允许用户创建脚本,通过这些脚本来执行一系列命令、决策和逻辑控制。以下是对标题和描述中涉及的知识点的详细说明: 1. **脚本开头**: ...

    常用shell编程命令

    shell编程命令详解 shell编程是 Linux 和 Unix 操作系统中一种强大的编程语言,可以用来编写脚本以自动执行各种任务。下面是 shell 编程命令的详解。 一、基本语法 * `#!/bin/bash`:这是一个约定的标记,告诉...

    Linux下Shell编程---很全哦

    Linux下的Shell编程是一种强大的工具,它允许用户与操作系统进行交互,执行各种命令和脚本,以实现自动化任务和系统管理。Shell本质上是一个命令解释器,它接收用户输入的指令,将其解析并转化为操作系统可理解的...

    shell编程-1

    ### Shell编程基础知识详解 #### Shell概念与作用 Shell,在计算机科学领域中,特指一种用于与操作系统进行交互的用户界面。它如同一个“壳”,包裹在操作系统的核心层(即内核)之外,作为用户与内核之间的桥梁。...

    运维技术课程 Linux学习教程 Shell编程-2 共31页.pptx

    通过以上详细说明,我们可以看到Shell编程-2这一部分涵盖了Shell编程的基础知识,包括条件测试、基本控制结构以及函数的使用。这些知识点对于理解和编写有效的Shell脚本至关重要,也是Linux运维人员必备的技能之一。

    Shell编程-正则表达式

    本篇文章将详细介绍Shell编程中的正则表达式的基本概念、常用元字符及其使用方法,并通过具体示例加深理解。 #### 二、正则表达式与通配符的区别 在Shell环境中,正则表达式和通配符虽然都是用于模式匹配的技术,...

    Shell编程-2.ppt

    Shell编程是Linux操作系统中一种强大的命令行脚本语言,...以上内容概述了Shell编程中的基础概念,包括输出命令、输入/输出重定向以及函数的使用。熟练掌握这些知识点,可以大大提高Linux系统的操作效率和自动化能力。

    Linux从零入门实战-Shell编程-b64_c3VuJTIwYm95-it720.pdf

    学习Shell编程的关键在于掌握基础语法并结合实际场景进行练习。遵循2-8原则,即集中精力掌握最重要的20%知识点,不必过分纠结于每一个细节。开发流程包括需求分析、问题建模、编写伪代码、逻辑实现和代码运行。在...

    Shell编程-1.ppt

    本篇文章将详细讲解Shell编程的基础知识,包括不同类型的Shell、Shell的特点以及变量管理。 首先,Shell有多种类型,主要包括Bourne Shell(sh, ksh, bash)、C Shell(csh, tcsh)以及Korn Shell(ksh)和Bourne ...

    运维技术课程 Linux学习教程 Shell编程-1 共31页.pptx

    #### 一、Shell编程基础 **1.1 Shell的作用和历史** - **作用**: Shell作为用户与Linux操作系统之间的接口,主要承担着命令解释器的角色,即用户通过Shell输入命令,Shell负责解释这些命令并将它们传递给操作系统...

    shell编程--用户信息管理(模拟).doc

    【shell编程--用户信息管理(模拟)】 shell编程在Linux操作系统中扮演着重要角色,它是一种解释型的脚本语言,常用于自动化任务和系统管理。在这个课程设计中,学生被要求模拟用户信息管理,这涉及到对Linux系统中...

    shell编程入门经典--LINUX与UNIX Shell编程指南 (中文pdf版)

    通过阅读《LINUX与UNIX Shell编程指南》,你可以系统性地学习和掌握Shell编程基础,从而提升在Linux或UNIX环境中工作的能力。无论你是系统管理员、开发人员还是普通用户,学习Shell编程都能让你的工作变得更加轻松和...

    linux的常用命令及shell编程

    Linux操作系统以其开源、稳定和强大的特性受到广大用户的喜爱。...总的来说,掌握Linux的常用命令和Shell编程是高效使用Linux系统的关键,它能帮助用户深入理解系统的运作机制,并实现个性化的系统管理和自动化任务。

Global site tag (gtag.js) - Google Analytics