变量自增
a=1
a=$((a+1))
a=$(($a+1))
a=$[a+1]vim
a=$[$a+1]
grep
history
$grep程序, 在没有参数的情况下, 输出包含RE字符串的句子
$ grep 搜索的文字 文件或目录
$ grep -r 搜索的文字 文件或目录 # 以递归的方式查找符合条件的文件
$ grep -v 搜搜的文字 文件或目录 # 反向查找,找出不符合条件的文件
# 搜索含有文字1或者文字2的文件
$ grep -e 搜索的文字1 -e 搜索的文字2 文件或目录
$ grep -o 只输出符合RE的字符串.
head
$ head -n 1 test.txt # 输出前一行
$ head -c 20 test.txt # 输出前20字节
less
less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。
# less 与 more 类似
# less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。
ctrl + F # 向前移动一屏
ctrl + B # 向后移动一屏
ctrl + D # 向前移动半屏
ctrl + U # 向后移动半屏
j # 下一行
k # 上一行
G # 移动到最后一行
g # 移动到最前一行
h # 帮助
n p # 打开多个文件切换
wc
wc file # 等同于 wc -clw file
wc -c file # 显示文件字节数
wc -l file # 显示文件行数
wc -w file # 显示文件字数
tldr
tldr是简化版的使用手册,并不会像man一样把所有的使用参数和说明都列出来,而是只显示常用的几个使用Sample和说明。
# too long, didn't read
$ pip install tldr # 安装
uniq
sort | uniq # 排序后去重
find
find .
find . -name ".sh"
# 查找 test1.sh 和 test2.sh
find . -name "test1.sh" -o -name "test2.sh"
# 找出当前目录下不是以.png结尾的文件
find . ! -name "*.png"
# 按照路径查找: 找test目录下的文件和目录
find . -path "test"
# 高阶用法,查找结果 只获取文件名而去除路径
find /bin/ -name "b*" -exec basename {} \;
# 通过文件类型查找
find . -type
f 普通文件
l 符号连接
d 目录
c 字符设备
b 块设备
s 套接字
p Fifo
更多参考
xargs
find /sbin -perm +700 | ls -l #错误
find /sbin -perm +700 | xargs ls -l #正确
# 理解
xargs 把参数放在命令后面
管道把参数放在命令前面
# 命令格式
somecommand |xargs -item command
#########################指定每行参数个数###########################
# cat test.txt
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z
# cat test.txt | xargs
a b c d e f g h i j k l m n o p q r s t u v w x y z
# cat test.txt | xargs -n3
a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z
#####################指定分割符号##############################
# echo "nameXnameXnameXname" | xargs -dX
name name name name
#######################类似与python的print.format#############
# cat arg.txt
aaa
bbb
ccc
#!/bin/bash
#sk.sh命令内容,打印出所有参数。
echo $*
# cat arg.txt | xargs -I {} ./sk.sh -p {} -l
-p aaa -l
-p bbb -l
-p ccc -l
更多参考
tee
tee # 重定向,相当于 >
tee -a # 重定向,相当于 >>
# 重定向遇到的坑,shell脚本切换到/bin目录
# 然后在这个目录下重定向.....肯定没权限
重定向
# shell上:
0表示标准输入
1表示标准输出
2表示标准错误输出
# 理解 "1>&2" 和 "2>&1".
1>&2 正确返回值传递给2输出通道 &2表示2输出通道
如果此处错写成 1>2, 就表示把1输出重定向到文件2中.
2>&1 错误返回值传递给1输出通道, 同样&1表示1输出通道.
& 是一个描述符,如果1或2前不加&,会被当成一个普通文件。
1>&2 即>&2,意思是把标准输出重定向到标准错误.
2>&1 意思是把标准错误输出重定向到标准输出。
&>filename 意思是把标准输出和标准错误输出都重定向到文件filename中
[root@redhat box]# ls
a.txt
[root@redhat box]# ls a.txt b.txt
[root@redhat box]# ls a.txt b.txt
# 由于没有b.txt这个文件, 于是返回错误值, 这就是所谓的2输出
ls: b.txt: No such file or directory
# 而这个就是所谓的1输出
a.txt
[root@redhat box]# ls a.txt b.txt 1>file.out 2>file.err
[root@redhat box]# cat file.out
a.txt # 标准输出
[root@redhat box]# cat file.err
ls: b.txt: No such file or directory # 标准错误输出
sh -c
# 利用 "sh -c" 命令,它可以让 bash 将一个字串作为完整的命令来执行
# 这样就可以将 sudo 的影响范围扩展到整条命令。具体用法如下:
$ sudo sh -c 'echo "test" >> test.asc'
shell中没有true false
true is true
false is true
True is true
False is true
1 is true
0 is true
sort
# 默认升序
$ sort # 按字符排序 1 11 2
$ sort -n # 字符串数值进行排序 1 2 11
$ sort -g # general-numeric-sort,根据一般数值进行排序
$ sort -r # reverse,反向输出排序结果
$ sort -k 3 # 以指定列进行排序
$ sort -u # 排序结果去重
export
# Linux export 可新增,修改或删除环境变量
$ export -p # 列出当前的环境变量值
$ export MYENV # 定义环境变量
$ export MYENV=7 # 定义环境变量并赋值
paste
cat nums.txt | paste -sd+ | bc | factor
wget
# 下载单个文件
wget http://www.example.com/testfile.zip
# 下载并以不同的文件名保存
wget -O myfile.zip http://www.example.com/testfile.zip
# 断点续传
wget -c http://www.example.com/testfile.zip
curl 命令
- curl命令是一个利用URL规则在命令行下工作的文件传输工具。
- 它支持文件的上传和下载,所以是综合传输工具,
- 但按传统,习惯称curl为下载工具。作为一款强力工具,
- curl支持包括HTTP、HTTPS、ftp等众多协议,
- 还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。
wget是个专职的下载利器,简单,专一,极致;而curl可以下载,但是长项不在于下载,而在于模拟提交web数据,POST/GET请求,调试网页,等等。
在下载上,也各有所长,wget可以递归,支持断点;而curl支持URL中加入变量,因此可以批量下载。
个人用途上,我经常用wget来下载文件,加 -c选项不怕断网;使用curl 来跟网站的API 交互,简便清晰。
# 单个文件下载
curl [-o 自定义文件名|-O] http://www.example.com/index.html
-o 自定义文件名:把服务器响应输出到指定文件
-O:与-o选项作用一样,区别在于以 url 路径最后一个"/"之后的部分作为文件名