多命令
多个命令用;
分割,可以一起执行
curl
参数
-X
请求方法-X POST
-d
请求报文-d '{"name":"li"}'
-H
请求头-H "Content-type:application/json"
显示请求详情
1 | curl -v http://example.com |
示例
1 | ~$ curl -v http://centos7:8888 |
重定向
当使用curl
或者在 java 中请求一个远程接口时,当服务器将请求转发即redirect
时,将无法得到返回报文。 服务器的返回头中,会有 redirect 的目标地址。 若使用 curl,我们可以使用curl -iL --max-redirs 1 http://example.com
,将返回头打印出来
1 | HTTP/1.1 301 Moved Permanently |
返回头中的Location
,即重定向的地址。我们再次请求重定向的地址,即可得到想要的结果
获取 http 返回码
1 | response=$(curl --write-out %{http_code} --silent --output /dev/null servername) |
死循环
无线循环并睡眠 1 秒
1 |
|
后台进程
nohup
可以用来将脚本在后台运行,默认会将脚本的输出信息打印到nohup.out
中
若需要不输出日志信息可以使用
1 | nohup ./program >/dev/null 2>&1 & |
ls
按文件大小顺序显示
ls -LS
nl
将输出的每一行加上行号。例如:'cat 1.txt | nl'
,输出1.txt
的文件并加上行号
rm
在使用cd dir && rm -rf file
时需要注意,当dir
不存在时,rm
会直接删除当前目录的文件,因此rm
后跟文件绝对路径
向远程服务器文件写入
使用管道符基本用法如
1 | <command> | ssh user@remote-server "cat > output.txt" |
例如
1 | echo "qwerty" | ssh user@Server-2 "cat > output.txt" |
ssh免密及执行远程命令
操作机上生成秘钥ssh-keygen -t rsa
,将会生成一对秘钥,将公钥内容追加到服务器的~/.ssh/authorized_keys
中, 可通过远程命令cat ~/.ssh/id_rsa.pub |ssh user@example.com 'cat >> ~/.ssh/authorized_keys'
去执行,可以简单的使用ssh-copy-id user@example.com
,这种方式 采用的是默认的22
端口,拷贝的公钥是默认的id_rsa.pub
确保服务器的文件及目录权限
- 设置 authorized_keys 权限
chmod 600 authorized_keys
- 设置.ssh 目录权限
chmod 700 -R .ssh
- 设置用户目录权限
chmod go-w ~
检查 AuthorizedKeysFile 配置是否启用 authorized_keys
1
2cat /etc/ssh/sshd_config |egrep AuthorizedKeysFile
AuthorizedKeysFile .ssh/authorized_keys把下面几个选项打开
1
AuthorizedKeysFile .ssh/authorized_keys
后续再执行ssh
操作,或者scp
等操作,则不需要再输入密码
通过系统日志文件我们可以查看无法登陆远程服务器的原因
1 | tail /var/log/secure -n 20 |
默认情况下,ssh 去~/.ssh/
目录下去找私钥,有时候无法,可以使用ssh-agent
将私钥加载到内存中
1 | 启动ssh代理 |
XARGS
传递参数
1 | ls *.jar|xargs -I {} jadx {} -d src |
top
使用top
命令查看进程占用情况,可配合grep
来实现查看想要的信息 top|grep java
svn
通过 svn info
判断服务器和本地的版本号是否相同,可使用grep
和awk
组合
WGET
用wget
递归下载
wget -r -np --reject=html www.download.example
或者可以把reject
换做 --accept
=iso,c,h
,表示只接受以此结尾的文件,分隔符为逗号(comma-separated)
AWK
默认情况下awk
以空格进行分割字符串,-F
,可以指定分割符
‘{print $1}’
,输出第几个分割字符
截取除第一位之后的所有元素
1 | echo 1 2 3 4 5|awk '{first = $1; $1 = ""; print $0 }' |
示例:
1 | more 1.txt|awk -F ',' '{print $2}' |
使用条件判断筛选数据
1 | awk 'length($2) ==12 && $2 > 20190101 && $2 <= 20191212 {print $0}' |
history
设置历史记录不重复
1 | export HISTIGNORE='ls:bg:fg:history' |
uniq
去重uniq
,uniq
默认仅会比较相邻的字符串
会统计重复的次数
1 | uniq -c |
显示所有系统变量
1 | env |
显示内存占用较多的进程
1 | ps -aux --sort=-rss|head 10 |
type
查看命令的详情
- -a 列出包含别名(alias)在内的指定命令名的命令
- -p 显示完整的文件名称
- -t 显示文件类型,其文件类型主要有两种,一种是 builtin,为 bash 的内置命令;另一种是 file,为外部命令
计算 shell 执行时间
time [command]
读取文件内容到变量
1 | content=`cat file.txt` |
echo
不换行输出
1 | `echo -n 'hello:' |
判断当前是否为 root 用户执行
1 | !/bin/bash |
获取时间戳
使用date --help
查看具体语法
节选部分
1 | p locale's equivalent of either AM or PM; blank if not known |
1 | timestamp() { |
mktemp
可以使用 mktemp 命令创建临时文件,文件名会自动生成
1 | 根据后面的X个数随机生成n个字符的名称 |
判断是否连接网络
1 | ping -o -t 2 www.baidu.com >&/dev/null; |