概述
平时总是会在 Linux 上执行一些操作,经常使用的还比较熟悉,偶尔总有一些几个命令用的比较少,因此就会比较容易忘记,这里简单记录下来,方便自己查阅。
screen
个人感觉使用 screen 最大的好处有 2 条:
- 可以同时操作多个 Terminal Tabs,切换很方便;
- 远程登陆关闭后,下次再连接 screen 还在;
安装 screen
yum -y install screen
screen 基本操作。
screen -ls #列出当前所有的session
screen -R myScreenName #先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
screen -r myScreenName #回到yourname这个session
screen -d myScreenName #远程detach某个session
screen -d -r myScreenName #结束当前session并回到yourname这个session
screen -wipe #检查目前所有的screen作业,并删除已经无法使用的screen作业。
screen -X -S PID quit #使用(PID)删除myScreenName
screen 内部操作,内部操作基本都是先执行 Ctrl + A,然后再输入其他命令(因此下面的命令,开头都会带上 Ctrl + A ,->
后面的部分,才是具体命令)。
Ctrl + A -> W # 显示所有窗口列表
Ctrl + A -> Ctrl + A # 在两个最近使用的 窗口间切换
Ctrl + A -> N # Next,切换到下一个窗口
Ctrl + A -> P # Previous,切换到上一个窗口
Ctrl + A -> C #创建一个新的运行shell的窗口并切换到该窗口
Ctrl + A -> D #detach,暂时离开当前session
C-a [ -> #进入 Copy mode,操作类似 vim
C-a ] -> #进入 Paste
Screen 加密操作
如果是多人使用一台 虚拟化,还是会面临安全问题,此时你也可以考虑加密Session,具体操作如下:
screen -R myScreenName #先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
Ctrl + A -> :password #设置Screen密码
Ctrl + A -> D #detach, 暂时离开当前session
screen -r myScreenName #回到yourname这个session
此时屏幕会提示你要输入
Screen password:
Screen 无法恢复情况
有时候,会出现 screen -ls 查询到状态为 Attached,但是执行 screen -r 连接不上的情况。
此时可以向踢掉之前的用户,然后再回到自己的Session中去,命令如下:
screen -D -r myScreenName #先踢掉之前登录的用户,然后回到Session
screen -D -r myScreenId #先踢掉之前登录的用户,然后回到Session
find
在 Linux 中查找自己需要的文件时候,是比较常用的。
find . -type -f # 在当前路径,查找所有文件
find . -name xXxfile # 在当前路径,查找xXxfile 文件,区分大小写。
find . -iname XXXfile # 在当前路径,查找xXxfile、xxxfile、XXXfile文件,不区分大小写。
find . -name xxx1File -o -name xxx2File # -o是 or,表示在当前路径,同时查找文件 xxx1File 和 xxx2File。
find 命令支持正则表达式
find . -iname "xxx.*" # 在当前路径,查找 “xxx” 开头的文件。
sed
sed 常常作用于行
的处理。
sed 支持同时修改源文件。
sed -i 's/^HISTSIZE=1000/HISTSIZE=200/' /etc/profile
sed -i '3a\This is an new line.' /tmp/log.txt # 加\是为了便于肉眼区分
#匹配行前加
sed -i '/searchLine/i\my new line' /tmp/log.txt
#匹配行前后
sed -i '/searchLine/a\my new line' /tmp/log.txt
下面比较少见的用法,用于获取文件总行数。
LineNum=`sed -n '$=' /tmp/log.txt` #获取文件的函数,并传递为参数LineNum
sed -n '=' /tmp/log.txt #Print the current line number.
sed -n '$=' /tmp/log.txt #Match the last line.
完整的例子参考如下:
#!/bin/sh
#Read a log file, assign each line to an array variable,
#and print all the log file out.
##################################
# main function define
##################################
main()
{
local param=0
local FileName="/tmp/log.txt" #文件名称/tmp/log.txt
local LineNums=`sed -n '$=' ${FileName}` #计算log.txt文件的总行数
echo "The $FileName line num. is $LineNums"
i=0
while read line
do
arr[$i]="$line"
i=`expr $i + 1`
done < $FileName
echo "$i"
for i in `seq $LineNums` ;do
echo "${arr[$i]}"
done
}
main $@
awk
awk 是好用的数据处理工具,比较倾向于一行当中分成数个“字段”来处理。多用于处理一行中的列
,awk 通常运行的模式是这样的:
awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
awk 的内置变量:
常用实例:
awk -F"," '{ print $3,$4 }' /tmp/log.txt
awk -F"." '{ print "Myadd1: "$3, "\Myadd2: "$4 }' /tmp/log.txt
last -n 5 | awk '{print $1 "\t lines: " NR "\t columns: " NF}'
Reference
参考是一些针对某个单个命令,写的比较好的,也列出来,方便大家学习。