提高工作效率?Shell&Linux&tmux常用命令分享

Linux备忘录

1.更改文件属组

chgrp [-R] 属组名 文件名

2.更改文件属主

chown [–R] 属主名 文件名chown [-R] 属主名:属组名 文件名

3.更改文件属性

rwx三种属性的权重分别是4,2,1;修改时的身份顺序是owner/group/other([-rwxrwxrwx])

chmod [-R] xyz 文件或目录

4.vi

1)0 或功能键[Home]:移动到这一行的最前面字符处

2)$ 或功能键[End]:移动到这一行的最后面字符处

3)G:移动到这个档案的最后一行

4)nG:n 为数字。移动到这个档案的第 n 行

5)gg:移动到这个档案的第一行

6)n:n 为数字。光标向下移动 n 行

7)dd:删除游标所在的那一整行

8)ndd:n 为数字。删除光标所在的向下 n 行

9)yy:复制游标所在的那一行

10)nyy:n 为数字。复制光标所在的向下 n 行

11)p, P:p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行

12)yG:复制游标所在行到最后一行的所有数据

13)y0:复制光标所在的那个字符到该行行首的所有数据

14)y$:复制光标所在的那个字符到该行行尾的所有数据

Shell基础

1.for循环的用法(code为打印etc目录下的所有文件名)

for word in `ls /etc`; doecho "This is $ !"done

2. 关于变量

string="orsonwan"readonly string #只读变量,不可更改unset string #删除变量

3.字符串

string1 = 'wan'echo "orson$" #字符串拼接echo ${#string1} #获取字符串长度echo $ #从字符串第2个字符开始截取4个字符echo `"$string1" wa` #索引string1字符串中第一个字符是w或a的位置

4.数组

array=(value0 value1 value2)echo $ #索引从0开始echo ${#array[*]}echo $[#array[@]] #输出数组元素个数

5.注释

:

6.if的用法与参数传递

if [ -n "$1" ]; then echo "包含第一个参数"else echo "没有包含第一参数"fi

*当传入的参数含有空格时,使用“”将变量括起来,使作为一个整体传入

* $*和$@的区别在于,如果不用双引号括起来,前者作为一个参数输出,后者分别输出

7.运算(awk/expr:这里只介绍expr)

1)数值运算

val=`expr 2 + 2` #注意运算的空格 或者val=$[2 + 2]echo "两数之和为 : $val"

2)关系运算

3)布尔运算

if [ $a -lt 5 -o $b -gt 100 ]then echo "$a 小于 5 或 $b 大于 100 : 返回 true"else echo "$a 小于 5 或 $b 大于 100 : 返回 false"fi

4)逻辑运算

if [[ $a -lt 100 && $b -gt 100 ]]then echo "返回 true"else echo "返回 false"fi

5)字符串运算

6)文件测试运算

8.显示结果定向至文件

echo "It is a test" > myfile

9.while

while conditiondo commanddone

10.case

case 值 in模式1) command1 command2 ... commandN ;;模式2) command1 command2 ... commandN ;;esac

echo '输入 1 到 4 之间的数字:'echo '你输入的数字为:'read aNumcase $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; *) echo '你没有输入 1 到 4 之间的数字' ;;esac

11.函数

[ function ] funname [()]{ action; [return int;]}

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数

funWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第十个参数为 $10 !" echo "第十个参数为 $ !" echo "第十一个参数为 $ !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !"}funWithParam 1 2 3 4 5 6 7 8 9 34 73

*$10 不能获取第十个参数,获取第十个参数需要$。当n>=10时,需要使用$来获取参数

12.输入/输出重定向

Here Document

Shell 中一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。将两个 delimiter 之间的内容(document) 作为输入传递给 command。

command

*结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进;

*开始的delimiter前后的空格会被忽略掉;

13.包含外部脚本

. filename # 注意点号(.)和文件名中间有一空格或source filename

***实用指令awk:请见https://www.cnblogs.com/xudong-bupt/p/3721210.html

Tmux

用于在terminal中创建多窗口(window -> session -> panel)掉线时再次连入服务器可以回到工作现场。一般只用多个session,每个session处理一类工作,每个session里多个panel

1.创建并指定session名字,一般tmux直接新建一个session,然后 + $ 进行改名

tmux new -s $session_name

2.进入已存在的session,一般tmux a先进入,然后 + s 寻找对应的session

tmux a -t $session_name

3.删除已存在的session

tmux kill-session -t $session_name

4.列出session

tmux ls

5.快捷键

快捷建需要先按 ctrl + b:

我常用的:

1)% 水平方向划分出panel

2)$ 重命名session

3)s 切换session

4)z 把当前panel最大化,如果当前已经处于最大化状态则还原。

5)左右方向键 光标切换到对应的panel

6)[ 进入鼠标模式,此时可以向上滚屏

7)d detach 回到shell, 但是不终止session,可以用tmux a再次进来

我不常用的:

1)” 垂直方向划分出panel(问号的上面,shift+’)

2)o 切换到下一个panel, 或者用方向键

3)x 删除该panel

4)w 切换window

5)? 帮助

一个非常有用的技巧:

在远程服务器的~/.profile中添加如下代码, 这样每次启动自动进入tmux, 断开连接不会丢失.

if [ -z "$TMUX" ]; then

tmux attach -t default || tmux new -s default

fi

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20190206G0KF8R00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券