relay相关ssh配置

免密登录relay跳板机,只是无需输入密码,仍需手动验证

  1. #!/usr/bin/expect -f
  2. set ip relay.baidu-int.com
  3. set username 你的用户名
  4. set password 你的密码
  5. spawn ssh $username@$ip
  6. expect {
  7. "*yes/no*" {
  8. send "yes\n";
  9. exp_continue;
  10. }
  11. "*password:" {
  12. send "$password\r";
  13. }
  14. }
  15. 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 选项可以递归跟随给出文件名的所有符号链接以标准化,除最后一个外所有组件必须存在

常用linux命令组合