shell用法大全

getopt用法

#!/bin/bash
#echo $@
 
#-o或--options选项后面接可接受的短选项,如ab:c::,表示可接受的短选项为-a -b -c,其中-a选项不接参数,-b选项后必须接参数,-c选项的参数为可选的
#-l或--long选项后面接可接受的长选项,用逗号分开,冒号的意义同短选项。
#-n选项后接选项解析错误时提示的脚本名字
ARGS=`getopt -o ab:c:: --long along,blong:,clong:: -n 'example.sh' -- "$@"`
if [ $? != 0 ]; then
    echo "Terminating..."
    exit 1
fi
 
#echo $ARGS
#将规范化后的命令行参数分配至位置参数($1,$2,...)
eval set -- "${ARGS}"
 
while true
do
    case "$1" in
        -a|--along) 
            echo "Option a";
            shift
            ;;
        -b|--blong)
            echo "Option b, argument $2";
            shift 2
            ;;
        -c|--clong)
            case "$2" in
                "")
                    echo "Option c, no argument";
                    shift 2  
                    ;;
                *)
                    echo "Option c, argument $2";
                    shift 2;
                    ;;
            esac
            ;;
        --)
            shift
            break
            ;;
        *)
            echo "Internal error!"
            exit 1
            ;;
    esac
done
 
#处理剩余的参数
for arg in $@
do
    echo "processing $arg"
done

getopts用法

while getopts f:c:opts
do
	case $opts in
			f)
			file=“$OPTARG”;;
			c)
			cmd="$OPTARG";;
			*)
			echo "usage : `basename $0` -f -c";;
	esac
		

basename用法

basename命令格式:
basename [pathname] [suffix]
basename [string] [suffix]
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

用法示例:
 $ basename /usr/bin/sort       输出"sort"。
 $ basename ./include/stdio.h .h  输出"stdio"。
 为basename指定一个路径,basename命令会删掉所有的前缀包括最后一个slash(‘/’)字符,然后将字符串显示出来。

shift用法

1.shell脚本中的位置参数
shell脚本中的位置参数有两种:
一种是调用脚本时传给脚本的参数,另一种是调用脚本的函数时,传给函数的参数。

2.shift
shift可以用来向左移动位置参数。
使用方法:
shift num 将位置参数向左移动num个位置,默认情况下num为1.

位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。

非常有用的 Unix 命令:shift。我们知道,对于位置变量或命令行参数,其个数必须是确定的,或者当 Shell 程序不知道其个数时,可以把所有参数一起赋值给变量$*。若用户要求 Shell 在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在 $1 后为 $2,在 $2 后面为 $3 等。在 shift 命令执行前变量 $1 的值在 shift 命令执行后就不可用了。
示例如下:
#测试 shift 命令(x_shift.sh)
1 until [ $# -eq 0 ]
2 do
3 echo "第一个参数为: $1 参数个数为: $#"
4 shift
5 done
执行以上程序x_shift.sh:
$./x_shift.sh 1 2 3 4
结果显示如下:
第一个参数为: 1 参数个数为: 4
第一个参数为: 2 参数个数为: 3
第一个参数为: 3 参数个数为: 2
第一个参数为: 4 参数个数为: 1
从上可知 shift 命令每执行一次,变量的个数($#)减一,而变量值提前一位,下面代码用 until 和 shift 命令计算所有命令行参数的和。

exec用法

shell 中的 exec 两种用法:
1.exec 命令 ;命令代替shell程序,命令退出,shell 退出;比如 exec ls
2.exec 文件重定向,可以将文件的重定向就看为是shell程序的文件重定向 比如 exec 5</dev/null;exec 5<&-

=============================
shell的内建命令exec将并不启动新的shell,而是用要被执行命令替换当前的shell进程,并且将老进程的环境清理掉,而且exec命令后的其它命令将不再执行。 
因此,如果你在一个shell里面,执行exec ls那么,当列出了当前目录后,这个shell就自己退出了,因为这个shell进程已被替换为仅仅执行ls命令的一个进程,执行结束自然也就退出了。为了避免这个影响我们的使用,一般将exec命令放到一个shell脚本里面,用主脚本调用这个脚本,调用点处可以用bash a.sh,(a.sh就是存放该命令的脚本),这样会为a.sh建立一个sub shell去执行,当执行到exec后,该子脚本进程就被替换成了相应的exec的命令。 
source命令或者".",不会为脚本新建shell,而只是将脚本包含的命令在当前shell执行。 
不过,要注意一个例外,当exec命令来对文件描述符操作的时候,就不会替换shell,而且操作完成后,还会继续执行接下来的命令。 
    exec 3<&0:这个命令就是将操作符3也指向标准输入。 

另外,这个命令还可以作为find命令的一个选项,如下所示: 
(1)在当前目录下(包含子目录),查找所有txt文件并找出含有字符串"bin"的行 
find ./ -name "*.txt" -exec grep "bin" {} \; 
(2)在当前目录下(包含子目录),删除所有txt文件 
find ./ -name "*.txt" -exec rm {} \; 

ex
ec命令            作用
exec ls          在shell中执行ls,ls结束后不返回原来的shell中了
exec <file       将file中的内容作为exec的标准输入
exec >file       将file中的内容作为标准写出
exec 3<file      将file读入到fd3中
sort <&3         fd3中读入的内容被分类
exec 4>file      将写入fd4中的内容写入file中
ls >&4           Ls将不会有显示,直接写入fd4中了,即上面的file中
exec 5<&4        创建fd4的拷贝fd5
exec 3<&-        关闭fd3

blkid用法

获取磁盘的UUID 可以利用UUID挂载磁盘开机启动 vim /etc/fstab UUID=uuid号码 ...… … …

tcpdump用法

tcpdump常用命令:

#抓取所有经过 eth0,目的或源地址是 192.168.29.162 的网络数据
命令:tcpdump -n -i eth0 host 192.168.29.162

# 源地址
命令:tcpdump -i eth1 src host 192.168.29.162
# 目的地址
命令:tcpdump -i eth1 dst host 192.168.29.162

#抓取当前服务器eth0网卡端口8080的网络数据
命令:tcpdump -n -i eth0 port 8080

#抓取mysql执行的sql语句
命令:tcpdump -i eth1 -s 0 -l -w - dst port 3306 | strings

#抓取mysql通讯的网络包(cap用wireshark打开)
命令tcpdump -n -nn -tttt -i eth0 -s 65535 'port 3306' -w 20160505mysql.cap

#抓取SMTP 数据
命令:tcpdump -i eth1 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack != 0'

#抓取HTTP GET数据,"GET "的十六进制是 47455420
命令:tcpdump -i eth1 'tcp[(tcp[12]>>2):4] = 0x47455420'

#抓取SSH返回,"SSH-"的十六进制是 0x5353482D
命令:tcpdump -i eth1 'tcp[(tcp[12]>>2):4] = 0x5353482D'

#实时抓取端口号8080的GET包,然后写入GET.log
命令:tcpdump -i eth0 '((port 8080) and (tcp[(tcp[12]>>2):4]=0x47455420))' -nnAl -w /tmp/GET.log

#抓取指定SYN个数,-c 参数指定抓多少个包。
命令:time tcpdump -nn -i eth0 'tcp[tcpflags] = tcp-syn' -c 10

core文件的用法

1.Core文件简介
Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试。当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文件,默认生成位置与可执行程序位于同一目录下,文件名为core.***,其中***是某一数字。

2.开启或关闭Core文件的生成
关闭或阻止core文件生成:
$ulimit -c 0
打开core文件生成:
$ulimit -c unlimited
检查core文件的选项是否打开:
$ulimit -a

exit用法

用途说明
exit命令用于退出当前shell,在shell脚本中可以终止当前脚本执行
 
常用参数
格式:exit n
退出。设置退出码为n
 
格式:exit
退出。退出码不变,即为最后一个命令的退出码
 
格式:$?
上一个命令的退出码

退出码(exit status或exit code)的约定
0表示成功(Zero - Success)
非0表示失败(Non-Zero  - Failure)
2表示用法不当(Incorrect Usage)
127表示命令没有找到(Command Not Found)
126表示不是可执行的(Not an executable)
>=128 信号产生

find用法

Linux中find常见用法示例

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

find命令的参数;

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
#-print 将查找到的文件输出到标准输出
#-exec   command   {} \;      —–将查到的文件执行command操作,{} 和 \;之间有空格
#-ok 和-exec相同,只不过在操作前要询用户
例:find . -name .svn | xargs rm -rf

-name   filename             #查找名为filename的文件
-perm                        #按执行权限来查找
-user    username             #按文件属主来查找
-group groupname              #按组来查找
-mtime   -n +n                #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime    -n +n               #按文件访问时间来查GIN: 0px">
-ctime    -n +n              #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup                     #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                      #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer   f1 !f2              找文件,-n指n天以内,+n指n天以前 
-ctime    -n +n               #按文件创建时间来查找文件,-n指n天以内,+n指n天以前 
-nogroup                     #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                      #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer   f1 !f2               #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size      n[c]               #查长度为n块[或n字节]的文件
-depth                       #使查找在进入子目录前先行查找完本目录
-fstype                     #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size      n[c]               #查长度为n块[或n字节]的文件
-depth                       #使查找在进入子目录前先行查找完本目录
-fstype                      #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                       #查文件时不跨越文件系统mount点
-follow                      #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                %;      #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                       #查文件时不跨越文件系统mount点
-follow                      #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                        #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune                       #忽略某个目录


xargs用法

xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令
xargs的默认命令是echo,空格是默认定界符。  默认替换符号是{} 
find . -type f -print | xargs rm {} 

-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的
-p 参数会提示让你确认是否执行后面的命令,y执行,n不执行
-i xargs要处理的文件如果不是在结尾,需要加上 -i这个参数
-d xargs将其标准输入中的内容以空白(包括空格、Tab、回车换行等)分割成多个之后当作命令行参数传递给其后面的命令,-d 命令指定分隔符
-e 如果搜索到-e指定的命令行参数,则只会将-e指定的命令行参数之前的参数(不包括-e指定的这个参数)传递给xargs后面的命令

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部
xargs要处理的文件如果不是在结尾,需要加上 -i这个参数
find . -name "*.log" |xargs -p -i cp {} ../ltesig/

sort 用法

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出

参数列表

 -  b   忽略每行前面开始出的空格字符
 -  c   检查文件是否已经按照顺序排序
 -  d   排序时,处理英文字母、数字及空格字符外,忽略其他的字符
 -  f   排序时,将小写字母视为大写字母
 -  i   排序时,除了040至176之间的ASCII字符外,忽略其他的字符
 -  m   将几个排序好的文件进行合并
 -  M   将前面3个字母依照月份的缩写进行排序
 -  n   依照数值的大小排序
 -  o	<输出文件>   将排序后的结果存入指定的文件
 -  r   以相反的顺序来排序
 -  t<分隔字符>   指定排序时所用的栏位分隔字符
+<起始栏位>-<结束栏位>   以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位
 -  --help   显示帮助
 -   --version   显示版本信息

uniq 用法

报告或删除文件中重复的行
当重复的行并不相邻时,uniq 命令是不起作用的,即若文件内容为以下时,uniq 命令不起作用
所以一般与sort连用

-c或--count 在每列旁边显示该行重复出现的次数。
-d或--repeated 仅显示重复出现的行列。
-f<栏位>或--skip-fields=<栏位> 忽略比较指定的栏位。
-s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。
-u或--unique 仅显示出一次的行列。
-w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。
--help 显示帮助。
--version 显示版本信息。

head用法

- -n 显示文件的前n行
- -c 显示文件的前n个字节
- -c -n 显示文件除了最后n个字节的其他内容
- -q 隐藏文件名(当指定了多个文件时,在内容的前面会以文件名作为开头)
- -v 显示文件名(默认单个文件不显示,多个文件显示)

netstat用法

-a (all)显示所有选项,netstat默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。(重要)
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名(macOS中表示协议 -p protocol)
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计 (重要)
-c 每隔一个固定时间,执行该netstat命令

hexdump用法

查看二进制文件
hexdump file

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT界的希望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值