linux-cmd

Linux and Shell

Linux 常用命令总结

  • cd dir 切换目录
    • ~:回到 home 目录
  • pwd查看目录绝对路径
  • clear清屏命令
  • mkdir -m -p dir 创建目录 其中 -m 代表权限 -p 代表如果目录不存在则创建一个,不会报错。
  • ls [options] 列出目录
    • -a 列出所有文件包括 ···
    • -l 列出详细信息
    • -r 倒序显示
    • -t 按时间显示
  • rmdir dir 删除空目录
  • tree 以树状图列出文件
  • mv source dest 移动文件
  • 将源文件或目录移动到目标目录下,如果不存在,则为重命名源文件或目录
  • rm [options] 删除文件或目录
    • -i 删除文件时询问是否删除
    • -r 删除该目录下的所有文件
  • cp [options] [source] [dest] 复制文件和目录
    • cp source.txt dir/dest.txt
    • cp -r source_dir dest_dir/
    • -r 复制目录下的所有文件
    • -i 覆盖时候询问是否覆盖
    • f 强制删除
  • zip 压缩文件
    • zip -r out.zip source_dir
    • -r 递归处理压缩
    • -q 隐藏指令执行过程
  • unzip 解压文件
    • unzip file.zip -d path/to/directory
    • -d 解压后存储的目录
    • -v 查看压缩文件信息
    • -l 查看压缩文件包含的文件
  • tar [-czvf] compressname dir 压缩文件
  • tar [-xvf] compressname -C dir 解压文件
  • tar [-xzvf] compressname -C dir解压.gz文件
  • find [path] - name 查找文件
    • find directory -name test*.txt -maxdepth 2 -type d
    • name 指定查找的文件
    • type 文件类型(f: 普通文件;d: 目录文件)
  • df -h 查看挂载的磁盘信息
  • du -h --max-depth=1 查看一级子目录和文件的大小
  • sort 对目录和文件进行排序
  • top 实时监控系统资源使用情况
  • free -m 显示系统上可用的内存信息
  • xargs 连接两个命令
    • [source_command] | xargs -d '\n' [dest_command]
    • find . -name "*.py" | xargs -d '\n' rm

Shell

  • date

    1
    2
    3
    missing:~$ date
    Fri 10 Jan 2020 11:49:31 AM EST
    missing:~$

  • echo

    1
    2
    3
    4
    5
    6
    echo hello
    foo=bar # 变量赋值
    echo $foo # 引用变量输出
    echo "hello, $foo" # 双引号格式化输出字符串,会自动替换
    echo 'hello, $foo' # 单引号直接输出字符串,不执行格式化
    echo hello > hello.txt # 将输出重定向到 hello.txt

  • cat

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    missing:~$ echo hello > hello.txt
    missing:~$ cat hello.txt
    hello
    missing:~$ cat < hello.txt # 重定向输入为 hello.txt
    hello
    missing:~$ cat < hello.txt > hello2.txt # 重定向输入为 hello.txt,输出为 hello2.txt
    missing:~$ cat hello2.txt
    hello
    missing:~$ cat hello.txt >> hello2.txt # 使用 >> 追加内容
    missing:~$ cat hello2.txt
    hello
    hello

  • which

    1
    which echo # 定位程序所在的路径

  • man

    1
    man ls  # 用户手册,查看命令使用方法

  • tldr

    1
    tldr ls # 更好用的用户手册是 tldr

  • pipes

    1
    2
    3
    4
    missing:~$ ls -l / | tail -n1 # 使用 pipe 将一个
    drwxr-xr-x 1 root root 4096 Jun 20 2019 var
    missing:~$ curl --head --silent google.com | grep --ignore-case content-length | cut --delimiter=' ' -f2
    219

  • ps 显示所有的进程

  • jobs 显示所有的工作

  • bg %{job_id} 将 job_id 放入后台执行

  • fg %{job_id} 将 job_id 放到前台执行

  • kill 向进程发送命令

    1
    2
    3
    4
    kill -l # 列出所有可发送的信号
    kill 9 {porcess_id} # 发送信号 9 给 进程 process_id
    kill -9 {group_id} # 发送信号 9 给 group_id 中的所有进程
    kill -9 %{job_id} # 发送信号 9 给工作 job_id

  • tmux 终端多路复用器

    • 会话,每一个会话都是一个独立的工作区,其中可以包含多个窗口
      • tmux 开始一个新的会话
      • tmux new -s {name} 以指定名字开始一个新的会话
      • tmux ls 列出所有的会话
      • Ctrl-b d 在会话中输入 Ctrl-b d,将当前会话分离
      • tmux a 重新连接最后一个会话
      • tmux a -t {n} 连接指定的会话 n
    • 窗口
      • Ctrl-b c 创建一个新的窗口,使用 Ctrl-d 关闭
      • Ctrl-b N 跳转到第 N 个窗口
      • Ctrl-b p 切换到上一个窗口
      • Ctrl-b n 切换到下一个窗口
      • Ctrl-b , 重命名当前窗口
      • Ctrl-b w 列出当前所有窗口
    • 面板 分屏,使得一个屏幕显示多个shell
      • Ctrl-b " 水平分割
      • Ctrl-b % 垂直分割
      • Ctrl-b <方向> 切换到指定方向的面板
      • Ctrl-b z 切换当前面板的缩放
      • Ctrl-b <空格> 在不同面板布局间切换
  • 别名

    1
    alias ll="ls -l"

  • ssh 远程连接服务器

    • ssh foo@bar.mit.edu 使用域名
    • ssh foo@192.168.1.42 使用 ip
    • 使用密钥
      1
      2
      3
      4
      5
      6
      # 生成一对密钥
      ssh-keygen -o -a 100 -t ed25519.pub -f ~/.ssh/id_ed25519
      # 将公钥发送到远端
      cat ~/.ssh/id_ed25519 | ssh foo@bar.mit.edu 'cat >> ~/.ssh/authorized_keys'
      # 或者使用下面命令(如果支持的话)
      ssh-copy-id -i ~/.ssh/id_ed25519.pub foo@bar.mit.edu