文章

Linux常用命令备忘

command 备忘

Linux常用命令备忘

网络相关的命令

请参考:这里

命令说明示例
env查看环境变量env, env | grep PATH

常用命令

grep

grep(global regular expression), 全局正则表达式查找

基础语法:

1
2
3
$ grep [options] pattern [file]
# 或者
$ command | grep pattern

常用options:

  • -i: 忽略大小写
  • -v: 反向查找,只显示不匹配的行
  • -n: 显示行号
  • -c: 只显示匹配行的数量
  • -r: 递归查找

关于pattern:

  1. 常规用法:
1
2
3
$ grep "hello" file.txt
# 查找file.txt中包含hello的行,等价于
$ cat file.txt | grep hello
  1. 通配符:
    • .: 匹配任意一个字符
    • *: 匹配0个或多个字符
      1
      
        $ grep "he.*o" *.txt # 在txt文件中查找he和o之间有0个或多个字符的行
      
    • []: 匹配中括号中的任意一个字符
    • [^]: 匹配不在中括号中的任意一个字符
    • ^: 匹配行首
    • $: 匹配行尾
    • \: 转义字符
    • \b: 匹配单词边界
    • \B: 匹配非单词边界
    • \d: 匹配数字
    • \D: 匹配非数字
    • \s: 匹配空白字符
    • \S: 匹配非空白字符
    • \w: 匹配单词字符
    • \W: 匹配非单词字符
    • |: 或
    • (): 分组
    • ?: 匹配0个或1个字符
    • {n}: 匹配n个字符
    • {n,}: 匹配至少n个字符
    • {n,m}: 匹配n到m个字符
  2. 使用正则表达式:
1
2
  $ grep -e "he.*o" *.txt # 使用基本正则表达式
  $ grep -E "he.*o" *.txt # 使用扩展正则表达式

ps

ps(process status), 查看进程状态

基础语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ ps [options]
[options]:
  -e: 显示所有进程
  -f: 显示完整格式
  -l: 长格式显示
  -u: 显示用户信息
  -x: 显示没有控制终端的进程
  -a: 显示所有用户的进程
  -x: 显示没有控制终端的进程
  -r: 显示运行中的进程
  -a: 显示所有进程
  -u: 显示用户信息
  -x: 显示没有控制终端的进程
  -r: 显示运行中的进程
  -a: 显示所有进程
  -u: 显示用户信息
  -x: 显示没有控制终端的进程
  -r: 显示运行中的进程

ps -ef | grep process_name # 查找进程

alias

alias, 别名

基础语法:

1
2
3
4
5
6
$ alias [name]='command' # 设置别名
$ alias # 查看所有别名
$ unalias [name] # 删除别名

$ alias ll='ls -l' # 设置ll别名

nohup

no hang up, 使得命令在后台运行,不受终端影响,但是会将输出重定向到nohup.out文件 通常与&结合使用 例如:nohup <command> &

1
$ nohup <command> & # 使得command在后台运行

&

后台运行

1
$ <command> & # 使得command在后台运行, 但不会将输出重定向到nohup.out文件

scp

secure copy, 安全拷贝, 基于ssh的文件传输工具

基础语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ scp [options] source target

# 常用options:
-r: 递归拷贝
-P port: 指定端口,未指定则默认22
-p: 保留文件属性,包括修改时间、权限等
-v: 显示详细调试信息, verbose
-C: 启用压缩传输,减少传输时间
-F ssh_config: 指定ssh配置文件,会直接传递给ssh,默认为~/.ssh/config
-i identity_file: 指定私钥文件, 会直接传递给ssh,默认为~/.ssh/id_rsa
-l limit: 限制传输速度,单位为kbps

# 常用示例:

$ scp -P 11451 -rC /path/to/source user@host:/path/to/target # 从本地递归压缩拷贝到远程,指定端口11451;host为远程主机 
$ scp -P 11451 -rC user@host:/path/to/source /path/to/target # 从远程递归压缩拷贝到本地,指定端口11451

Shell脚本

基础格式

1
2
3
#! /bin/bash  # shebang 指定解释器

# other code ... 

注意:

  • 确保脚本有执行权限
  • 需要在当前shell下生效,可以使用source或者.执行脚本:

    1
    2
    
    $ source script.sh
    $ . script.sh
    

变量

赋值:

1
foo=bar # 注意等号两边不能有空格

使用:

1
2
3
$foo
# 或者
${foo} 

数组/字典

数组:

1
2
3
4
5
6
7
8
9
10
11
# 定义数组
arr=(1 2 3 4 5)

# 获取数组元素
echo ${arr[0]}

# 获取数组长度
echo ${#arr[@]}

# 获取数组所有元素
echo ${arr[@]}

字典:

1
2
3
4
declare -A dict=([key1]=value1 [key2]=value2)

# 获取字典元素
echo ${dict[key1]}

条件判断

hints: fi是if的倒写, esac是case的倒写

1
2
3
4
5
6
7
if [ condition ]; then
  # code
elif [ condition ]; then
  # code
else
  # code
fi

case语句:

1
2
3
4
5
6
7
8
9
10
11
case $var in
  pattern1)
    # code
    ;;
  pattern2)
    # code
    ;;
  *)
    # code
    ;;
esac

循环

for in:

1
2
3
4
for var in 1 2 3 4 5
do
  # code
done

while:

1
2
3
4
while [ condition ]
do
  # code
done
本文由作者按照 CC BY 4.0 进行授权