加载中…
个人资料
LavenLiu
LavenLiu
  • 博客等级:
  • 博客积分:0
  • 博客访问:60,356
  • 关注人气:2
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

Gnu/Linux基本命令及使用方法

(2013-06-14 23:31:08)
标签:

教育

分类: Gnu/Linux
1 crontab
2 cut
3 diff
4 dpkg
5 find
6 grep
7 info
8 patch
9 rpm
10 sort
11 stat
12 su
13 sysctl
14 tcpdump
15 traceroute
16 uniq
17 wget
18 yum
19 lsof





1 crontab
═════════

  ╭────
  │ # service crond status
 
  │ 每个系统用户都可以有自己的crontab(在/var/spool/cron/下)
 
  │ 查看当前用户的crontab
  │ # crontab -l
 
  │ 编辑crontab
  │ # crontab -e
 
  │ 删除crontab
  │ # crontab -r
 
  │ 如当前是root身份,要查看/编辑/删除/某用户的crontab,只需在相应的命令后
  │ 加上 -u USERNAME (如 crontab -e -u lavenliu) 即可。
 
  │ cron服务每分钟不仅要读一次/var/spool/cron目录内的所有文件,还需要读
  │ 一次/etc/crontab文件。配置这个文件也能让cron去执行任务。使用crontab
  │ 命令编辑是对用户级任务的配置,而编辑/etc/crontab文件是对系统级任务的
  │ 配置。
 
  │ crontab语法:
  │   field          allowed values
  │   -----          --------------
  │   minute         0-59
  │   hour           0-23
  │   day of month   1-31
  │   month          1-12 (or names, see below)
  │   day of week    0-7 (0 or 7 is Sun, or use names)
 
  │ 分  时  日  月  星期  用户  带绝对路径的命令  脚本或PHP详细路径
 
  │ 细心的你发现没有, crontab最小执行时间为分钟,如果要求任务是以秒
  │ 为级别的怎么办,其实是有办法的,我等会以实例说明下;服务器我建议
  │ 也以 /etc/crontab 为主,它更方便控制用户管理;建议服务器上的
  │ 计划任务时间错开,不要同时并行任务,不然会在某时间段造成系统
  │ 负载 过大,搞得你的Nagios狂发报警邮件。
 
  │ EXAMPLE CRON FILE
  │        The following lists an example of a user crontab file.
 
  │        # use /bin/bash to run commands, instead of the default /bin/sh
  │        SHELL=/bin/bash
  │        # mail any output to `paul', no matter whose crontab this is
  │        MAILTO=paul
  │        #
  │        # run five minutes after midnight, every day
  │        5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
  │        # run at 2:15pm on the first of every month -- output mailed to paul
  │        15 14 1 * *     $HOME/bin/monthly
  │        # run at 10 pm on weekdays, annoy Joe
  │        0 22 * * 1-5    mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
  │        23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"
  │        5 4 * * sun     echo "run at 5 after 4 every sunday"
  │        # Run on every second Saturday of the month
  │        0 4 8-14 * *    test $(date +%u) -eq 6 && echo "2nd Saturday"
 
  │ EXAMPLE SYSTEM CRON FILE
  │        The following lists the content of a regular system-wide crontab  file.
  │        Unlinke  a user's crontab, this file has the username field, as used by
  │        /etc/crontab.
 
  │        # /etc/crontab: system-wide crontab
  │        # Unlike any other crontab you don't have to run the `crontab'
  │        # command to install the new version when you edit this file
  │        # and files in /etc/cron.d. These files also have username fields,
  │        # that none of the other crontabs do.
 
  │        SHELL=/bin/sh
  │        PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
  │        # m h dom mon dow user command
  │         17 *    root   cd / && run-parts --report /etc/cron.hourly
  │         25 6    root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
  │         47 6    root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
  │         52 6    root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
  │        #
  ╰────


2 cut
═════

  ╭────
  │ # Displays the unix login names for all the users
  │ in the system
  │ # cut -d: -f1 /etc/passwd
 
  │ -d 指定区分列的定界,默认是tab
  │ -f 指定要显示的列
  │ -c 按字符来切割,如
  │ # cut -c1-6 file (取文件第一行的前6个字符)
 
  │ 实验:取IP地址
  │ # ifconfig wlan0 | grep 'inet addr' | cut -d: -f2 | cut -d' ' -f1
  │ # hostname -i[I]
 
  │ # Displays the total memory available on the system
  │ # free |tr -s'' |sed '/^Mem/!d' |cut -d" " -f2
  ╰────


3 diff
══════

  ╭────
  │ 判断文件之间的不同,以行为单位
  │ diff [-bBi] from-file to-file
  │ -b 忽略一行中有多个空白的差异
  │ -B 忽略空白行的不同
  │ -i 忽略大小写的不同
  │ -u 输出统一的unified的diff格式补丁文件
  │ exam:
  │ # diff file1 file2
  │ # diff -u file1 file2 > foo.patch
  ╰────


4 dpkg
══════

  ╭────
  │ 1. 查看某个软件包是否已经安装: dpkg -l <package>
  │ 2. 查看某个软件包中都包含哪些文件: dpkg -L <package>
  │ 3. 查看系统中的某个文件是由哪个软件包提供的: dpkg -S /path/to/file
  │ 4. 查看哪些软件包未完成安装: dpkg -C
 
  │ 更多信息请使用: $ man dpkg
  ╰────


5 find
══════

  ╭────
  │ 基本的语法规则是:
  │ find [path] -option [-print] [ -exec -ok command] {} \;
 
  │ 参数总的说明:
  │ #-print 将查找到的文件输出到标准输出
  │ #-exec    command    {} \;       -----将查到的文件执行command操作,{} 和 \;之间有空格
  │ #-ok 和-exec相同,只不过在操作前要询用户
 
  │ 命令参数简单的说明:
  │ -type      b/d/c/p/l/f      #查是块设备、目录、字符设备、管道、符号链接、普通文件
  │ -perm                       #按执行权限来查找
  │ -depth                      #使查找在进入子目录前先行查找完本目录
  │ -follow                     #如果遇到符号链接文件,就跟踪链接所指的文件
  │ -cpio                       #对匹配的文件使用cpio命令,将他们备份到磁带设备中
  │ -prune                      #忽略某个目录
 
 
 
  │ 实例:
  │   $ find . -type d -print   打印目录结构
  │   $ find . ! -type d -print  打印非目录文件
  │   $ find /usr/include -name '*.h' -exec grep AF_INEF6 {} \;
  │   (因grep无法递归搜索子目录,故可以和find相结合使用。 在/usr/include 所有子目录中的.h文件中找字串AF_INEF6)
  │   $ find . -type l -print (查找文件类型为符号链接的)
  │   $ find . -size +10 -print  #查长度超过期作废10块的文件(1块=512字节)
  │   $ find /etc -name "passwd*"    -exec grep    "cnscn"    {}    \;    #看是否存在cnscn用户
  │   $ find . -name "yao*" |xargs file 执行命令显示文件类型
  │   $ find . -name "yao*" |xargs echo "" > /tmp/core.log 将find查找的文件名称写入到指定的文件里
  │   $ find -name april*    fprint file   在当前目录下查找以april开始的文件,并把结果输出到file中
  │   $ find -name ap* -o -name may*    查找以ap或may开头的文件
  │   $ find /home -mtime    -2         在/home下查最近两天内改动过的文件
  │   $ find /home -mtime    +2         在/home下查最近两天前改动过的文件
  │   $ find /home -mmin     +60        在/home下查60分钟前改动过的文件
  │   $ find /home -amin    +30         查最近30分钟前被存取过的文件
  │   $ find /home -mmin     +60        在/home下查60分钟前改动过的文件
  │   $ find /home -amin    +30         查最近30分钟前被存取过的文件
  │   $ find /home -uid    +501         列出/home目录内用户的识别码大于501的文件或目录
  │   $ find /home -nouser              列出/home内不属于本地用户的文件或目录
  │   $ find /home -nogroup             列出/home内不属于本地组的文件或目录
  │   $ find /home -name tmp.txt     -maxdepth     列出/home内的tmp.txt 查时深度最多为3层
  │   $ find /home -name tmp.txt    -mindepth      从第2层开始查
  │   $ find /home -empty               查找大小为0的文件或空目录
  │  
  │ find总结
  │ 1. 基本用法:
  │    find / -name 文件名
  │    find ver1.d ver2.d -name '*.c' -print    查找ver1.d,ver2.d *.c文件并打印
  │    find . -type d -print 从当前目录查找,仅查找目录,找到后,打印路径名。可用于打印目录结构。
  │ 2. 无错误查找:
  │     find / -name access_log 2 >/dev/null
  │ 3. 按尺寸查找:
  │     find / -size 1500c (查找1,500字节大小的文件,c表示字节)
  │     find / -size +1500c (查找大于1,500字节大小的文件,+表示大于)    
  │     find / -size +1500c (查找小于1,500字节大小的文件,-表示小于)    
  │ 4. 按时间:
  │     find / -amin n 最后n分钟
  │     find / -atime n 最后n天
  │     find / -cmin n 最后n分钟改变状态
  │     find / -ctime n 最后n天改变状态
  │ 5. 其它:
  │     find / -empty 空白文件、空白文件夹、没有子目录的文件夹
  │     find / -false 查找系统中总是错误的文件
  │     find / -fstype type 找存在于指定文件系统的文件,如type为ext2
  │     find / -gid n 组id为n的文件
  │     find / -group gname 组名为gname的文件
  │     find / -depth n 在某层指定目录中优先查找文件内容
  │     find / -maxdepth levels 在某个层次目录中按递减方式查找
  │ 6. 逻辑
  │     -and 条件与 -or 条件或
  │ 7. 查找字符串
  │     find . -name '*.html' -exec grep 'mailto:'{}
 
 
 
  │ 来看一个简单的例子:
  │ find /tmp/ -name 'galeki*'
  │ 意思就是在/tmp目录下找出以“galeki”开头的文件,-name指出是对文件名进行筛选,
  │ 是不是很简单明了?除了文件名,find还有更强大的筛选条件:
  │ 1.时间:
  │ 参数
  │ 意义
  │ -atime n
  │ 上一次存取时间在n*24小时前以内的文件
  │ -ctime n
  │ 上一次状态改变在n*24小时前以内的文件
  │ -mtime n
  │ 上一次修改时间在n*24小时前以内的文件
  │ -newer file
  │ 比file所指的文件还要新的文件
  │ 2.大小:
  │ 参数
  │ 意义
  │ -size n[bkMG]
  │ 大小为n(b为比特,k为KB,M为MB,G为GB)的文件
  │ 3.所有者:
  │ 参数
  │ 意义
  │ -user name
  │ 所有者用户名称是name的文件
  │ -group name
  │ 所有者用户组群名称是name的文件
  │ 例子:
  │ find /tmp/ -name 'sess*' -mtime 1   #在/tmp目录下找到所有以'sess'开头
  │                                     #并且在一个小时以内修改过的文件
  │ find ./ -name '*.zip' -size 546k    #在当前目录下找到所有546KB的zip压缩包文件
  │ find /tmp/ -user 'galeki'           #在/tmp目录下找到所有所有者为galeki的文件
  │ 另外,还可以用"+"、"-"来进一步修饰时间和大小的条件:
  │ find src/ -mtime +2                 #找出src目录下上一次修改时间在2天以前的文件
  │ find download/ -size +50M           #在download目录下找出大于50M的文件
  │ 光找出文件还不够,我们还要对找出的文件进行处理才有意义,一般来讲可以把find的查找结果
  │ 传递给其他的命令做进一步处理。find本身也提供了许多处理动作的选项。
  │ 常用的处理动作:
  │ 参数
  │ 意义
  │ -print
 
  │ 打印出找出文件的完整地址,一个文件一行
  │ -delete
 
  │ 删除找出的文件
  │ -exec command {} \;
 
  │ 对每一个找到的文件执行command命令,
  │ 并用文件替换"{}",“\;”是固定的结束符。
 
 
  │ 例子:
  │ find /tmp/ -ctime +7 -delete            #删除/tmp目录下一周以前创建的文件
  │ find ./ -name '*.unk' -exec file {} \;  #找出当前文件夹下后缀是unk的文件,
  │                                         #并用file命令显示每个文件的文件类型
  ╰────


6 grep
══════

  ╭────
  │ -A NUM 打印出紧随匹配的行之后的下文NUM行
  │ -B NUM 打印出匹配的行之前的上文NUM行
  │ -C NUM 打印出匹配的行的上下文前后各NUM行
  │ -b 在输出的每行前面同时打印出当前行在输入文件中的字节偏移量
  │ -c 显示匹配的行数
  │ -f <file> 从文件file中获取模式,每行一个
  │ -H 为每个匹配的文件打印文件名
  │ -I 不搜索二进制文件
  │ -i 忽略大小写
  │ -l 只显示有匹配的文件的文件名
  │ -L 只显示未匹配的文件的文件名
  │ -n 输出行号
  │ -o 只显示匹配字段
  │ -q quiet静默模式
  │ -v 只显示不匹配的行
 
  │ 去掉文件里的注释行和空白行
  │ # cat filename | grep -v ^$ | grep -v ^# | sudo tee squid.conf
  ╰────


7 info
══════

  ╭────
  │ n 移动到下一节点
  │ p 上一节点
  │ u 上一层
  │ TAB 下一个超链接
  │ alt+TAB 上一个超链接
  │ Enter 进入节点
 
  │ /usr/share/doc
  ╰────


8 patch
═══════

  ╭────
  │ 打补丁
  │ -b 自动备份改变了的文件
  │ -R 撤销补丁
  │ exam:
 
  │ # patch -b foo.patch file1
  │ 会创建一个源文件的备份orig的后缀
  ╰────


9 rpm
═════


10 sort
═══════

  ╭────
  │ 排序
  │ -r 反方向整理
  │ -n 按数字大小写整理
  │ -f 忽略大小写
  │ -u 删除输出中的重复行
  │ -t c 'C'作为字符定界符
  │ -k X 使用C字符分割的字段X来整理
  │ exam:
  │ # sort -t : -k 3 -n /etc/passwd
  │ [ # sort -t: -k3 -n /etc/passwd ]
  │ 让系统里用户的uid从大到小排列
 
  │ 1. Sort a text file in ascending order
  │   $ sort names.txt
 
  │ 2. Sort a text file in descending order
  │   $ sort -r names.txt
 
  │ 3. Sort a colon delimited text file on 2nd field
  │   $ sort -t: -k 2 names.txt
 
  │ 4. Sort a tab delimited text file on 3rd field and
  │  suppress duplicates
  │   $ sort -t: -u -k 3 names.txt
 
  │ 5. Sort the passwd file by the 3rd field(numeric userid)
  │   $ sort -t: -k 3n /etc/passwd
 
  │ 6. sort /etc/hosts file by ip-address
  │   $ sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts
  ╰────


11 stat
═══════


12 su
═════


13 sysctl
═════════

  ╭────
  │ # sysctl -w net.ipv4.tcp_synack_retries="3"
  │ # sysctl -w net.ipv4.tcp_syncookies="1"
  ╰────


14 tcpdump
══════════

  ╭────
  │ a)第一种是关于类型的关键字,主要包括host, net, port,例如host 210.27.38.1,指明
  │ 210.27.38.1是一台主机,net 202.0.0.0指明202.0.0.0是一个网络地址,port 23指明
  │ 端口是23。如果没有指定类型,缺省的类型是host。
 
  │ # 想要截获所有210.27.38.1的主机收到的和发出的所有的数据包:
  │ $ tcpdump host 210.27.38.1
 
  │ # 对本机的udp 123端口进行监视,123为ntp的服务端口
  │ $ tcpdump udp port 123
 
  │ # 如果想要获取主机210.27.38.1接收或发出的telnet包,使用如下命令:
  │ $ tcpdump tcp port 23 host 210.27.38.1
 
  │ # 想要获取主机210.27.38.1和主机210.27.38.2或210.27.38.3的通信,使用命令:
  │ # 在命令行中使用括号时,一定要转义
  │ $ tcpdump host 210.27.38.1 and \(210.27.38.2 or 210.27.38.3\)
 
  │ # 如果想要获取主机210.27.38.1除了和主机210.27.38.2之外所有主机通信的ip包,则:
  │ $ tcpdump ip host 210.27.38.1 and ! 210.27.38.2
  ╰────


15 traceroute
═════════════


16 uniq
═══════

  ╭────
  │ 将重复的数据仅显示一次
  │ -i 忽略大小写
  │ -c 进行次数
  ╰────


17 wget
═══════


18 yum
══════


19 lsof
═══════

  这个工具首先出现在Unix系统中,后来才移植到Linux平台下。平时我们用得最多
  的是lsof -i,用来查看特定端口的情况,比如,可以用losf -i:22查看22端口
  是由哪些程序占用的,如下所示:
  ╭────
  │ [root@localhost ~]# lsof -i:22  
  │ COMMAND  PID USER  FD  TYPE DEVICE SIZE NODE NAME  
  │ sshd 2934 root3u IPv68903  TCP *:ssh (LISTEN)  
  │ sshd 20573 root3u IPv6 2158289  TCP 43.93.226.246:ssh
  │ ->xxx.xxx.xxx.xxx:22357 (ESTABLISHED)8.Socketstat
  ╰────

  在FreeBSD中,可以使用sockstat查看打开的套接字的情况,包括端口相应进程的
  进程名、PID、用户等。用得最多的是sockstat -4l(它非常好用,也可以用在
  Jail虚拟机上)。

  Socket的参数说明如下所示:
  ╭────
  │ NAME  
  │ sockstat -- list open sockets  
  │ SYNOPSIS  
  │ sockstat [-46clu] [-p ports]  
  │ DESCRIPTION  
  │ The sockstat command lists open Internet or UNIX domain
  │ sockets.The following options are available:  
  │ -4 Show AF_INET (IPv4) sockets.  
  │ -6 Show AF_INET6 (IPv6) sockets.  
  │ -c Show connected sockets.  
  │ -l Show listening sockets
  ╰────

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有