relay相关ssh配置
免密登录relay跳板机,只是无需输入密码,仍需手动验证
#!/usr/bin/expect -f
set ip relay.baidu-int.com
set username 你的用户名
set password 你的密码
spawn ssh $username@$ip
expect {
"*yes/no*" {
send "yes\n";
exp_continue;
}
"*password:" {
send "$password\r";
}
}
interact
ssh信道共享,登录一次跳板机,之后无需再次验证
vim ~/.ssh/config
host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
ServerAliveInterval 80
查看文件/文件夹大小
df -hl
du -h file
du -h --max-depth=0 dir
du -sh */dir
打包下载命令
.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
———————————————
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
———————————————
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2 或tar –bzip xvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
———————————————
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
———————————————
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
———————————————
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
压缩一个目录使用 -r 参数,-r 递归。例: $ zip -r FileName.zip DirName
———————————————
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
看看你要解压的文件的具体路径
tar -ztf xx.tar.gz | grep file_you_want_to_get
假设为 path/to/file
tar -zxf xx.tar.gz path/to/file
环境变量
# 可以将自己的环境封装在source_myhome.sh里,每次登陆后使其生效
vi source_myhome.sh
export PATH=$other_path/bin:$PATH
source source_myhome.sh
# 临时:直接用export命令
export PATH=$PATH:/home/xyz/Tesseract/bintesseract可执行文件目录
export BERT_BASE_DIR=/home/lili/data/uncased_L-12_H-768_A-12
# 永久
修改~/.bashrc文件
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
# 查看所有环境变量
env
# 显示所有本地定义的Shell变量
set
# 清除环境变量
unset $TEST
vim退出后仍显示文本情况
vim ~/.bash_profile
export TERM=xterm
source ~/.bash_profile
文本处理
find/which/whereis/locate
# 在指定目录下查找文件;不设置任何参数时,则 find 命令将在当前目录下查找子目录与文件
find | grep test # 查看当前目录下名字为test的目录的文件
# 直接搜索整个文件目录,默认直接从根目录开始搜索,建议在以上命令都无法解决问题时才用它,功能最强大但速度超慢。
# 除非你指定一个很小的搜索范围。通过 -name 选项指定要查找的文件名,支持通配符。
find
# 查看可执行文件的位置。只能查找可执行文件,该命令基本只在$PATH路径中搜索,查找范围最小,查找速度快。
# 默认只返回第一个匹配的文件路径,通过选项 -a 可以返回所有匹配结果。
which
# 不只可以查找命令,(只能查命令、源文件和man文件),在$PATH路径基础上增加了一些系统目录的查找,查找范围比which稍大,查找速度快。
# 可以通过 -b 选项,限定只搜索二进制文件。
whereis:
# 超快速查找任意文件。它会从linux内置的索引数据库查找文件的路径,索引速度超快。
# 刚刚新建的文件可能需要一定时间才能加入该索引数据库,可以通过执行updatedb命令来强制更新一次索引,这样确保不会遗漏文件。
# 该命令通常会返回大量匹配项,可以使用 -r 选项通过正则表达式来精确匹配。
locate
cat/nl
# 查看文件行数(带行数)
cat -n file
# 查看文件行数(带行数)
nl file
tail
查看文件尾部信息
tail -f filename
会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,
只要 filename 更新就可以看到最新的文件内容。
grep
文本搜索工具,用于查找文件里符合条件的字符串。
-v
反向搜索,返回除参数外的其他结果
-r
grep -r word file以递归的方式查找符合条件的文件。
-i
不区分大小写匹配
-c
输出匹配行数
-E(支持多个表达式)
根据正则表达式匹配
-F
将样式视为固定字符串的列表
-o
只显示匹配部分
sed
利用脚本来处理文本文件
# 替换
cat test.py | sed 's:/home/user:repl:g'
-n
默认不输出信息,除非使用了p命令或者是s命令的p标志符
可以配合p打印指定行:sed -n '10p' test.txt
# d删除,删除第8行
8d
# p打印,只打印那些包含"test"的行(使用-n选项).
/test/p
# s替换
# 在每个输入行中,将第一个ee替换为r
s/ee/r
# 在每个输入行中,将全部ee替换为r
s/ee/r/g
awk
awk用于更加细致处理划分文本,功能更强大(主要是对每行中的列做处理)
# 指定输入文件折分隔符
- F
# 从脚本文件中读取awk命令
-f
NF代表的是一个文本文件中一行(一条记录)中的字段个数
NR代表的是这个文本文件的行数(记录数)
$NF表示最后一列
# 举例
# 打印出test.log文件中**ms大于100的行数(其中**ms为最后一列)
cat test.log | sed 's/ms//g' | awk '{if ($NF>100){print $0}}' | wc -l
# 查看高耗时行数
cat test.log | grep cost_time | awk -F "ms" '{print $1}' | awk -F "\"" '{print $NF}' | awk '{if ($NF > 500) {print $0}}'
# 打印出服务器当前占用的端口号
netstat -ntulp | awk '{print $4}' | awk -F ':' '{print $NF}'
uniq
用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
默认无参数时,为将文件的不重复行显示出来(重复的只显示一行)
-c 或 --count
在每列旁边显示该行重复出现的次数(注意是连续出现,所以一般在uniq前先sort)。
-d
仅显示重复出现的行列
-u
仅显示出现一次的列
xargs
xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数
# 后面加次数,表示命令在执行的时候一次用的argument个数,默认是用所有的。
-n
# 通过制定字符,控制变量传递的位置
-i/-I
cat test.py | xargs -I p echo p
ps aux | grep "wxchat_startScene_online_run.sh" | grep -v "grep" | grep -v "$1" | awk -F ' ' '{print $2}' |xargs -n 1 kill
tr
用于转换或删除文件中的字符。
# 删除指令字符
-d
# 缩减连续重复的字符成指定的单个字符
-s
sort
将文本文件内容加以排序。
-r 以相反的顺序来排序
-n 依照数值的大小排序。
-u 意味着是唯一的(unique),输出的结果是去完重了的。
进程
ps
#显示所有包含其他使用者的行程
ps -aux
#挂起程序
ctrl + z
#查看正在运行的任务
jobs
#将程序调度到后台执行
bg + 作业号
#将程序调回到前台运行
fg + 作业号
#用在一个命令的最后,可以把这个命令放到后台执行
&
变量
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
大于 -gt (greater than)
小于 -lt (less than)
大于或等于 -ge (greater than or equal)
小于或等于 -le (less than or equal)
不相等 -ne (not equal)
编码
iconv
转换文件编码
-f encoding :把字符从encoding编码开始转换。
-t encoding :把字符转换到encoding编码。
-l :列出已知的编码字符集合
-o file :指定输出文件
-c :忽略输出的非法字符
-s :禁止警告信息,但不是错误信息
--verbose :显示进度信息
-f和-t所能指定的合法字符在-l选项的命令里面都列出来了。
iconv -c -f utf-8 -t gbk output.txt > new.xls
iconv -c -f utf-8 -t gbk output.txt -o new.xls
注释
#
单行注释
:<<!
!
多行注释
日期
date
-d 显示指定字符串所描述的时间,而非当前时间
%Y 年份
%m 月份(01-12)
%d 按月计的日期(例如:01)
%H 小时(00-23)
%M 分(00-59)
%S 秒(00-60)
%s 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数
# example
date -d "20200706" "+%s"
date -d @12353424
-d @ 将时间戳转化为格式化时间
#! /bin/bash
#循环日期
start_date=20151101
end_date=20151103
start_sec=`date -d "$start_date" "+%s"`
end_sec=`date -d "$end_date" "+%s"`
for((i=start_sec;i<=end_sec;i+=86400)); do
day=$(date -d "@$i" "+%Y-%m-%d")
echo $day
done
定时任务
crontab
-e 执行文字编辑器来设定时程表
-r 删除目前的时程表
-l 列出目前的时程表
f1 f2 f3 f4 f5 cmd
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
重定向
# 将 stdout 和 stderr 合并后重定向到 file
command > file 2>&1
readlink
# 主要用来找出符号链接所指向的位置
-f 选项可以递归跟随给出文件名的所有符号链接以标准化,除最后一个外所有组件必须存在