shell随记

echo -n 不输出最后的换行符
echo -e "1\t2\t3" 实用转义
echo -e "\e[1;31mThis si red text \e[0m" 打印彩色输出

pgrep 获取程序的pid

let result=$no1+$no2
let $no1--
let $no1+=6

result=$[ no1 + no2 ]
result=$(( no1 + 50 ))
result=`expr 3 + 4`
result=$(expr $no1 + 4)

浮点数运算
echo "4 * 0.56" | bc
echo "scala=2;3/8" | bc 设定小数精度
echo "obase=2;ibase=2;$no" | bc
echo "sqrt(100)" | bc
echo "10^10" | bc

cmd 2>&1 output.txt
cmd &> output.txt

cat a* | tee -a out.txt | cat -n 标准输出显示在终端并且写入文件,-a是追加
echo who is this | tee - 写出到标准输出
exec 3<input.txt 创建文件描述符3打开并读取文件
cat <&4
exec 4>input.txt 创建文件描述符4打开并写入文件
echo new line >&4
exec 5>>input.txt 创建文件描述符5用于写入(追加模式)
echo appended line >&5
array_var=(1 2 3 4 5 6) 定义数组
array_var[0]="test"
echo ${array_var[0]}
echo ${array_var[*]} 打印数组中所有的值
echo ${#array_var[*]} 打印数组长度

declare -A ass_array 定义关联数组
ass_array=([index1]=val1 [index2]=val2)
ass_array[index1]=val1
ass_array[index2]=val2
echo ${ass_array[index1]}
echo ${!ass_array[*]},echo ${!fruit_value[@]} 列出索引数组
\command 实用原始命令,忽略别名
date +%s
export -f fname 导出函数,作用域扩散到子进程

out=$(cat text.txt)
echo $out 失去了换行符
out="$(cat text.txt)"
echo $out 保留了换行符

read -n 2 var 读取两个字符
read -s var 不回显的方式读取密码
read -p "Enter input:" var 显示提示信息
read -t timeout var 特定时间内读取(秒)
read -d ";" var 设置输入定界符

[ $var1 -ne 0 -a $var2 -gt 2 ] 实用罗辑与-a
[ $var1 -ne 0 -o $var2 -gt 2 ] 实用罗辑或-o
[ -f $file_var ] 文件或目录是否存在
[ -x $var ] 文件是否可执行
[ -d $var ] 是否是目录
[ -e $var ] 文件是否存在
[ -c $var ] 是否是字符设备文件
[ -b $var ] 是否是块设备文件
[ -w $var ] 是否可写
[ -r $var ] 是否可读
[ -L $var ]  是否是符号链接

[[ -z $str1 ]] 字符串比较用双方括号,是否为空
[[ -n $str1 ]] 是否不为空

if [[ -n $str1 ]] && [[ -z $str2 ]]
if [ $var -eq 0 ]; then echo "True"; fi
if test $var -eq 0; then echo "True"; fi 使用test

cat -n 加上行号
cat -s 多个空行压缩成一行
cat stty.sh | tr -s '\n' 去掉空白行
cat -T  显示制表符

find . -print 打印文件和目录列表
find . -print0 '\0'作为定界符
find . -name *.txt -print 按文件名查找
find . -iname *.txt -print 忽略大小写
find . \( -name "*.txt" -o -name "*.pdf" \) -print
find . -path "*slynux*" -print 匹配文件路径或文件名
find . -regex "*slynux*" -print 匹配文件路径或文件名(正则表达式匹配)
find . -iregex "*slynux*" -print 匹配文件路径或文件名(忽略大小写的正则表达式匹配)
find . -maxdepth 1 -type [f|d|l|c|b|s|p] -print
f 普通文件
d 目录
l 符号链接
c 字符设备
b 块设备
s 套接字
p Fifo
-atime 访问时间(天
-mtime 修改时间(天
-ctime 变化时间(天
-amin 访问时间(分钟
-mmin 修改时间(分钟
-cmin 变化时间(分钟

find . -type f -atime -7 -print 打印七天内访问过的文件
find . -type f -user root -exec chown slynux {} \;
find . -type f \( -name "*.git" -prune \) -o \( -type f -print \)

xargs -n 3 每次3个参数,定界符默认为空格
xargs -d X 指定定界符为X
cat args.txt | xargs ./ccat.sh 一次性提供所有参数
cat args.txt | xargs -I {} ./cecho.sh -p {} -1 -I指定替换字符串为{}
find . -type f -name "*.txt" -print0 | xargs -0 rm -f -0以'\0'作为定界符
cat files.txt | ( while read arg; do cat $arg; done)

echo "Hello 123 world 456" | tr -d '0-9' 删除
echo hello 1 char 2 next 4 | tr -d -c '0-9 \n' 删除文本中不在补集中的字符echo "GNU  is    not  Unix. Recirsive right ?" | tr -s ' ' 压缩了连续多个空格
tr '[:lower:]' '[:upper:]'

md5sum filename
md5sum file1 file2 > file.md5 md5文件中包含每个文件的校验信息
md5sum -c file.md5 检查文件是否和校验和匹配
类似的还有sha1sum

sort -n file.txt 按数字排序
sort -r file.txt 按逆序排序
sort -M months.txt 按月份排序
sort -C file 检查文件是否已经排序
sort -m sorted1 sorted2 合并文件,不再进行排序
sort -k 1 data.txt 按第几列排序
sort -nk 2,3 data.txt 用第2到3个字符作为键
sort -z data.txt | xargs -0
sort -bd unsorted.txt -b忽略前导空格,-d按字典排序
sort -u unsorted.txt
sort unsorted.txt | uniq 消除重复行

uniq -c 统计每行出现的次数
uniq -d 找出重复行
uniq -s 跳过前N个字符
uniq -w 指定用于比较的最大字符数

dd if=/dev/zero bs=100k count=1 of=data.file
split -b 10k data.file 分割文件,分割大小为10k
split -b 10k data.file -d -a 4 指定后缀为4位
split -b 10k data.file -d -a 4 split_file 指定前缀
split -l 10 data.file 每个文件10行

csplit server.log /SERVER/ -n 2 -s {*} -f server -b "%02d.log" ; rm server00.log

${file_jpg%.*} 去掉扩展名

${file_jpg#*.} 提取扩展名

${#var} 获得变量值长度


diff -u version1.txt version2.txt > version.patch 比较并生成补丁文件
patch -pl version1.txt < version.patch 给version1.txt打补丁
patch -pl -R version1.txt < version.patch 撤消补丁做出的修改,-R非交互
diff -Naur dir1 dir2 递归的形式作用于目录
-N 将所有缺失的文件视为空
-a 将所有文件视为文本文件
-u 生成一体化输出
-r 遍历目录下的所有文件
wc -l file 统计行数
wc -w file 统计单词数
wc -c file 统计字符数

grep -E "[a-z]+" --color auto 实用扩展正则表达式
egrep --color auto
grep -v match_pattern file 排除匹配行
grep -c "text" file 统计匹配行数
grep "main()" . -r --include=*.{java,xml}
grep "main()" . -r --exclude=*.{properties}
grep "main()" . -r --exclude-dir=dir1
grep "main()" . -r --exclude-from=file 从文件中获取排除文件
grep "test" file* -lz | xargs -0 rm
seq 10 | grep 5 -A 3 打印匹配行和之后的三行
seq 10 | grep 5 -B 3 打印匹配行和之前的三行
seq 10 | grep 5 -C 3 打印匹配结果之前和之后的三行

cut -f 2,3 -d ":" filename 显示第2列和第3列,指定定界符为:

sed -i 's/text/replace/' file 直接修改原文件
 
${word:i:1} 提取变量word从i开始的1个字符
${var/line/REPLACEED} 用REPLACED替换变量中的line

wget ftp://example_domain.com/somefile.img -O dloaded_file.img -o log -t 5 指定文件名dloaded_file.img,信息写入log文件,指定重复尝试次数5
--limit-rate 20k 限速20k
-Q 100m 配额100m
-c 端点续传
--mirror 搜索网页上的所有url链接(网络爬虫)
-r -N -1 指定页面层级为1,-r递归下载,-N允许对文件实用时间戳
wget --username username --password pass URL 认证,--ask-passwd提示输入密码
wget URL -post-data "name=value"

curl http://slynux.org > index.html
curl http://slynux.org -o filename 将下载内容写入文件
--silent 不显示进度信息
--progress 显示进度信息
curl -C -url 端点续传
--referer Referer_URL 参照页
--cookie "user=slynux;pass=hack" 指定cookie
--cookie-jar cookie_file 指定cookie文件
--user-agent "Mozilla/5.0" 指定用户代理
-H "Host: www.slynux.org" -H "Accept-language: en" 指定头部信息
--limit-rate 20k 限速20k
--max-filesize 指定可下载的最大文件大小
-u username:password 指定用户名密码
-I|-head 只打印头部信息
curl URL -d "postvar=postdata2&postvar2=postdata2"
curl URL --data "postvar=postdata2&postvar2=postdata2" 发送POST请求

tar -cvf file.tar file1 file2 --exclude "*.txt" 创建tar文件,并排除部分文件
--exclude-vcs 排除版本控制相关目录
--totals 打印总归档字节数
tar -rvf file.tar file3 向tar文件中添加文件
tar -tf file.tar 查看归档文件中的内容
tar -xvf file.tar -C /path/to/extraction_dir 解压tar包到指定目录
tar -xvf file.tar file1 file3 提取指定的文件
tar -Af file1.tar file2.tar 拼接两个tar归档文件
tar -uvf filt.tar filea 更新filea
tar -f file.tar --delete file1 file2 
tar --delete -file file.tar filea 从归档文件中删除文件

zip -r archiva.zip folder1 file1 创建zip文件
zip file.zip -u newfile 更新文件
zip -d file.zip file.txt 删除文件
unzip -l archiva.zip 查看文件

rsync -avz SOURCE DESTINEATION --delete 删除目的端存在源端不存在的文件

host google.com 查看google.com的所有ip地址
nslook google.com 列出dns资源记录

route -n 以数字形式查看路由表
route add default gw IP_ADDRESS INTERFACE_NAME

traceroute google.com

ping google.com -c 2 ping两次

ssh user@host 'cmd1;cmd2;cmd3'

sshfs user@host:/home/path /mnt/mountpoint 挂载远程文件系统

lsof -i 查看端口及服务的详细信息

netstat -tnp 查看开放端口与服务

du -a dir 递归统计指定目录下的文件大小
-c 显示统计信息
--exclude "*.txt" 排除指定文件
--exclude-from exclude.txt 从文件中获取排除文件
--max-depth N 指定最大搜索路径


#host google.com

获取google.com的ip地址,再用ip访问google.com


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值