Linux 常用指令

前言

本文记录了一些Linux指令,用于备忘和查找,无序排列。

指令

查看系统内核版本(多条可用指令)

1
2
$ cat /proc/version
$ uname -srm

在本地和远程之间复制文件

  • scp指令
    1
    2
    $ scp username@servername:/path/filename local_dir # 从远程机器下载文件
    $ scp /local_path/filename username@servername:/path # 上传本地文件到远程机器
  • rsync 指令
    1
    2
    3
    4
    5
    6
    rsync -av -e ssh --exclude='*.pth' username@servername:/path/filename local_dire # 从远程机器下载文件
    rsync -av -e ssh --exclude='*.pth' /local_path/filename username@servername:/path # 上传本地文件到远程机器
    -a:递归目录
    -v:详细输出
    -e ssh:使用ssh作为远程shell,保证传输过程加密
    --exclude='*.pth':排除匹配文件

zip 压缩/解压缩文件

1
2
3
4
5
6
7
8
9
$ zip -r filename.zip filename filedir/ # 压缩指定文件和文件目录
$ zip -d filename.zip filename # 从指定压缩包中删除指定文件
$ zip -u filename.zip filename # 追加指定文件到指定压缩包中
$ zip -f filename.zip filename # 更新指定压缩包中指定文件
$ zip -e filename.zip filename # 加密压缩文件,密码会提示输入
$ unzip filename.zip -d filedir # 解压缩文件到指定目录
$ unzip -o filename.zip # 不必询问用户,unzip后覆盖原有的文件
$ unzip -t filename.zip # 检查压缩文件是否正确
$ unzip -l filename.zip # 显示压缩文件内所包含的文件

tar 压缩/解压缩文件

1
2
$ tar -zcvf filename.tar.gz filename # 压缩指定文件或文件目录
$ tar -zxvf filename.tar.gz -C filedir # 解压缩文件到指定目录

常用参数选项

1
2
3
4
5
6
7
8
9
10
-z --gzip, --gunzip, --ungzip   :通过 gzip 来归档压缩,压缩后的文件为*.tar.gz
-j --bzip2 :通过 bzip2 来归档压缩文件,压缩后的文件为*.tar.bz2
-J : 通过 xz 压缩工具归档压缩文件,压缩后的文件为*.tar.xz,压缩率最高,也最慢
-c --create :创建新的归档文件,压缩文件
-x --extract :解压文件
-v --verbose :可视化,显示tar处理文件的输出信息
-f --file :要操作的文件名
-t --list :查看文件中的内容
-C --directory=DIR :解压文件至指定的目录
--exclude=DIR :压缩时排除某目录/文件

进程

1
$ ps aux|grep python # 显示所有与python相关的进程

ps常用参数选项

1
2
3
4
5
6
-a 显示现行终端机下的所有程序,包括其他用户的程序
-A 显示所有程序
-u 以用户为主的格式来显示进程状况
-x 显示所有进程,不以终端机来区
-H 显示树状结构,表示进程间的关系
-f 用ASCII字符显示树状结构,表示进程间的关系
1
2
3
4
5
6
$ kill -l # 查看linux下所有信号
$ kill -9 PID_NUM # SIGKILL 强制杀死进程PID_NUM
$ kill -1 PID_NUM # SIGHUP 重新加载或者杀死PID_NUM
$ kill -2 PID_NUM # SIGINT 键盘输入中断(Ctrl+C)
$ kill -3 PID_NUM # SIGQUIT 键盘输入退出(Ctrl+|)
$ kill -6 PID_NUM # SIGABRT 根据abort(3)杀死进程(非正常中止)

fuser

fuser 功能:显示出当前哪个程序在使用磁盘上的某个文件、挂载点、甚至网络端口,并给出程序进程的详细信息。更多参考见Linux fuser 命令详解

1
2
$v fuser -v /dev/nvidia* # 显示当前有哪些占用GPU资源的pid

文件查找

  • find
    1
    $ find / -name filename # 在指定目录(/)下寻找指定文件
    fidn的常用参数
    1
    2
    3
    4
    5
    -name s     #寻找文件名带s的文件
    -name *s #寻找以s结尾的文件
    -name s* #寻找以s开头的文件
    find -amin 10 #寻找过去10分钟访问过的文件
    find -mtime 1 #寻找过去24小时修改过的文件
  • locate
    1
    $ locate filename # 定位文件位置
    该方法从Linux文件数据库中查找,效率更高。但该数据库默认一天更新一次,最近新建文件无法找到,可用如下指令更新该数据库
    1
    sudo updatedb
  • 全面搜索正则表达式
    1
    2
    $ grep xxx # 在输出中查找带有xxx的行
    $ grep -v xxx # 滤掉输出中带有xxx的行
  • 全面搜索正则表达式配合使用的指令
    1
    $ cut -c 9-16 # 在输出的每行中选取9到16行(不包含第16行)返回

    ssh密钥生成

    1
    $ ssh-keygen -t rsa
    生成的密钥存放在~/.ssh文件夹下。

    watch

watch 提供了周期性的方式执行给定的命令的功能。

1
$ watch -n 1 nvidia-smi # 每隔一1秒查看一次显存信息

磁盘大小统计

1
2
$ df -h # 统计磁盘分区大小和使用情况
$ du -sh # 统计当前目录大小

建立软链接

1
$ ln -s source target-symbol # 将source 软连接到target-symbol目录下/target-symbol文件

注:使用target-symbol软链接时,若出现报错Too many levels of symbolic links,将source和target-symbol改为绝对路径即可。

文件查看

1
2
$ ls|wc –l # 查看当前目录文件数量
$ ls -hl filename # 查看文件详细信息,大小换成用户可读单位

命令二次解释

1
$ eval command_with_param # 将参数连接在一起构造指令,并执行

例如:eval echo '$'$# 会先将 指令翻译为echo ${param_num},然后执行指令echo ${param_num}

Bash $+x 含义

此处方便起见,省去代表bash指令的$

1
2
3
4
5
6
$0 # 执行脚本的文件名
${number>=1} # 脚本的第 number 个参数
$# # 传入脚本的参数个数
$@ # 传入脚本的所有参数,不包括$0表示的文件名,得到一个字符串数组
$* # 传入脚本的所有参数,不包括$0表示的文件名,合并成一个字符串
$? # 执行脚本的返回值,没有主动exit/return时,默认返回0

identify

查看图像参数信息

1
identify image_name # 查看图像具体信息

指令用例

1
tmux ls | grep -oP '^\S+' | grep wm | sed 's/://g' | xargs -I {} tmux kill-session -t {}

提取tmux中以wm开头的会话名称,并kill这些会话。