Skip to the content.

快捷工具

  1. SwitchyOmega 结合 Qv2ray 能够解决科学上网问题。在 SwitchyOmega 里配置端口信息,会将所有的数据通过设置的端口传输。将端口信息设置成和 Qv2ray 一致即可。https://github.com/FelisCatus/SwitchyOmega

  2. tldr 可以用来快速查询工具的用法,会给出一些常用,简单的变量信息,如 tldr git-config, tldr git-push 等。

  3. ocrmypdf 可以将图片形式的 pdf 转换成文字形式的 pdf。

    ocrmypdf                      # it's a scriptable command line program
       -l eng+fra                 # it supports multiple languages
       --rotate-pages             # it can fix pages that are misrotated
       --deskew                   # it can deskew crooked PDFs!
       --title "My PDF"           # it can change output metadata
       --jobs 4                   # it uses multiple cores by default
       --output-type pdfa         # it produces PDF/A by default
       input_scanned.pdf          # takes PDF input (or images)
       output_searchable.pdf      # produces validated PDF output
    
  4. qpdf 可以 remove the encryption

    qpdf --decrypt [--password=[password]] infilename outfilename
    
  5. uname 查看内核版本。

    - Print hardware-related information: machine and processor:
       uname -mp
     - Print software-related information: operating system, release number, and version:
       uname -srv
     - Print the nodename (hostname) of the system:
       uname -n
     - Print all available system information (hardware, software, nodename):
       uname -a
    
  6. xclip 可以复制标准输出到粘贴板,具体使用待探索。

  7. fish 能自动联想指令,安装过程很简单,sudo apt install fish,之后直接fish即可使用。亦可将其作为默认 shell。

  8. stat 查看文件的状态

    Display file and filesystem information.
     - Show file properties such as size, permissions, creation and access dates among others:
       stat 
     - Same as above but in a more concise way:
       stat -t 
     - Show filesystem information:
       stat -f 
     - Show only octal file permissions:
       stat -c "%a %n" 
     - Show owner and group of the file:
       stat -c "%U %G" 
     - Show the size of the file in bytes:
       stat -c "%s %n" 
    
  9. tar 文件解压,最常用的参数是-xvf

    - [c]reate an archive and write it to a [f]ile:
       tar cf    
     - [c]reate a g[z]ipped archive and write it to a [f]ile:
       tar czf    
     - [c]reate a g[z]ipped archive from a directory using relative paths:
       tar czf  --directory= .
     - E[x]tract a (compressed) archive [f]ile into the current directory [v]erbosely:
       tar xvf 
     - E[x]tract a (compressed) archive [f]ile into the target directory:
       tar xf  --directory=
     - [c]reate a compressed archive and write it to a [f]ile, using [a]rchive suffix to determine the compression program:
       tar caf    
     - Lis[t] the contents of a tar [f]ile [v]erbosely:
       tar tvf 
     - E[x]tract files matching a pattern from an archive [f]ile:
       tar xf  --wildcards ""
    
  10. tmux 工具可以用来分屏,常用的快捷键:

Ctrl+a %					划分左右两个窗格;
Ctrl+a "					划分上下两个窗格;
Ctrl+a <arrow key>			光标切换到其他窗格。<arrow key>是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓。
Ctrl+a x					关闭当前窗格。
Ctrl+a Ctrl+<arrow key>		按箭头方向调整窗格大小。
Ctrl+a z					当前窗格全屏显示,再使用一次会变回原来大小
Ctrl+a c					创建一个新窗口,状态栏会显示多个窗口的信息。
tmux swap-window -s 3 -t 1  交换 3 号和 1 号窗口
tmux swap-window -t 1       交换当前和 1 号窗口
tmux move-window -t 1       移动当前窗口到 1 号
tmux attach -t 0			重新接入某个已存在的会话
tmux kill-session -t 0		杀死某个会话
tmux switch -t 0			切换会话
Ctrl+q d					分离当前会话
Ctrl+q s					列出所有会话

tmux 的配置主要是修改~/.tmux/tmux.conf来完成的,修改完后用tmux source ~/.tmux/tmux.conf来更新配置。可以将 .tmux.conf 移到 ~/ 目录下,tmux 就会将其作为默认配置文件,下次开机使用 tmux 会默认读取这个配置文件。

按下 PREFIX+[快捷键进入复制模式,在复制模式下按下 q 字符退出复制模式。

复制模式类似于 Vim 的普通模式,键盘操作风格也类似,在复制模式下,按下 v 字符,进行待复制内容的选取,类似于进入 Vim 的可视模式,键盘操作风格也类似。

在复制模式下 crtl + s 进入查找模式,同样按 q 退出。

  1. termux: arm 中使用的终端。

  2. 输入输出重定向是

    missing:~$ echo hello > hello.txt
    missing:~$ cat hello.txt
    hello
    missing:~$ cat < hello.txt
    hello
    missing:~$ cat < hello.txt > hello2.txt
    missing:~$ cat hello2.txt
    hello
     通过“>” “<”完成的。
    
  3. history 程序可以查询所有用过的指令。

  4. split 可以将文件分为大小不同的块。如 split -l 1000000 latx_log -d -a 4 latx_log_,-l 表示每个文件多少行,也可以按比特分;-d 表示后缀用数字表示,-a 4 表示后缀是 4 位数字。

  5. rsync 可以用来在不同机器上同步文件,注意 host 和 target 文件名最后不加斜杠表示同步整个文件夹到目的文件夹中。

    rsync -avzP /home/guanshun/gitlab/latx/target guanshun:/home/guanshun/gitlab/latx-x64
    
  6. vim

    ​ v 字符选

    ​ shift v 行选

    ​ ctrl v 块选

    ​ 块选之后’d’批量删除,’I’ + ESC 批量添加。

    ​ visual 模式下:

    ​ d —— 剪切操作

    ​ y ——-复制操作

    ​ p ——-粘贴操作

    ​ ^ ——–选中当前行,光标位置到行首(或者使用键盘的 HOME 键)

    ​ $ ——–选中当前行,光标位置到行尾(或者使用键盘的 END 键)

  7. pkill:杀进程,-9 强制杀死

     - Kill all processes which match:
       pkill -9 ""
    
     - Kill all processes which match their full command instead of just the process name:
       pkill -9 --full ""
    
  8. kill -s 9 pid 也能直接杀死某个进程。

  9. diff 和 vimdiff 可以以行为单位对比两个文件的不同。

  10. lsblk - list block devices

  11. mmap, munmap - map or unmap files or devices into memory

  12. cat file1 file2 file3…… > file 将多个文件合并成同一个文件。

  13. truncate 可以设置文件的大小,如truncate --size 50M qemu_log,超过 50M 的就会截断。

  14. sed 可以删除文件的任意行,sed ‘n, md’ filename

    或者删除含有某个字符的行,将结果输出到指定文件,sed ‘/xxx/d’ filename1 > filename2

    删除不包含某一字符的行,sed ‘/xxx/!d’ filename1 > filename2

    删除某一字符 sed 's/a//g' filename1 > filename2

  15. sort - sort lines of text files

    - Sort a file in ascending order:
      sort 
    
    - Sort a file in descending order:
      sort --reverse 
    

    同时也能去除文件中相同的行 sort -n headpath1.md | uniq > headpath2.md

  16. du 查看文件大小

    - List the sizes of a directory and any subdirectories, in the given unit (B/KB/MB):
       du - 
    
     - List the sizes of a directory and any subdirectories, in human-readable form (i.e. auto-selecting the appropriate unit for each size):
       du -h 
    
     - Show the size of a single directory, in human readable units:
       du -sh 
    
     - List the human-readable sizes of a directory and of all the files and directories within it:
       du -ah 
    
  17. df 查看磁盘使用情况。

    - Display all filesystems and their disk usage:
       df
    
     - Display all filesystems and their disk usage in human readable form:
       df -h
    
     - Display the filesystem and its disk usage containing the given file or directory:
       df 
    
     - Display statistics on the number of free inodes:
       df -i
    
     - Display filesystems but exclude the specified types:
       df -x  -x 
    
  18. wc -l 查看文件行数。

  19. Loongarch 下的 gdb 不能查看浮点寄存器,将

    gdb/features/loongarch/lbt64.c
    gdb/features/loongarch/lbt32.c
    gdb/features/loongarch/lasx.c
    gdb/features/loongarch/lsx.c
    

    中的 lasx 等变量修改成 NULL,然后重新编译,记得修改环境变量。

  20. pkg-config

    pkg-config - Return metainformation about installed libraries
    - Get the list of libraries and their dependencies:
       pkg-config --libs 
    
     - Get the list of libraries, their dependencies, and proper cflags for gcc:
       pkg-config --cflags --libs 
    
  21. gdb 显示数据的不同格式:

    ​ x 按十六进制格式显示变量。

    ​ d 按十进制格式显示变量。

    ​ u 按十六进制格式显示无符号整型。

    ​ o 按八进制格式显示变量。

    ​ t 按二进制格式显示变量。

    ​ a 按十六进制格式显示变量。

    ​ c 按字符格式显示变量。

    ​ f 按浮点数格式显示变量。

  22. gdb 使用 examine 命令(简写是 x)来查看内存地址中的值。x 命令的语法如下所示:

    ​ x/<n/f/u> n、f、u 是可选的参数。

    ​ n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。

    ​ f 表示显示的格式,参见 44。

    ​ u 表示显示的单位,b 表示单字节,h 表示双字节,w 表示四字节,g 表示八字节。当我们指定了字节长度后,GDB 会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

    表示一个内存地址。

    ​ n/f/u 三个参数可以一起使用。例如:

    ​ 命令:x/8xb 0x54320 表示,从内存地址 0x54320 读取内容,b 表示以字节为一个单位,8 表示八个单位,x 表示按十六进制显示。

  23. sensor 能够查看硬件温度,psensor 能够 gui 显示。

  24. vscode 中 alt + 方向键能交换相邻行。

  25. 根据时间删除文件和文件夹

    sudo find . -mtime +2 -name "*" -exec rm -rf {} \;
    

    . :准备要进行清理的任意目录 -mtime:标准语句写法 +2:查找 2 天前的文件,这里用数字代表天数,+30 表示查找 30 天前的文件 “.“:希望查找的数据类型,”.jpg”表示查找扩展名为 jpg 的所有文件,”“表示查找所有文件 -exec:固定写法 rm -rf:强制删除文件,包括目录 {} \; :固定写法,一对大括号+空格+/+;

  26. vim 中能够画代码树的插件——DrawIt

    下载后用 vim 打开 DrawIt.vba.gz

    vim DrawIt.vba.gz
    

    然后使用 :so % 进行解压,最后 :q 退出 vimDrawIt 就安装完成。

    进入 vim 后用\di\ds即可进入,退出 DrawIt。

    \di to start DrawIt,
    \ds to stop  DrawIt.
    
    Supported Features
       <left>       move and draw left
       <right>      move and draw right, inserting lines/space as needed
       <up>         move and draw up, inserting lines/space as needed
       <down>       move and draw down, inserting lines/space as needed
       <s-left>     move left
       <s-right>    move right, inserting lines/space as needed
       <s-up>       move up, inserting lines/space as needed
       <s-down>     move down, inserting lines/space as needed
       <space>      toggle into and out of erase mode
       >            draw -> arrow
       <            draw <- arrow
       ^            draw ^  arrow
       v            draw v  arrow
       <pgdn>       replace with a \, move down and right, and insert a \
       <end>        replace with a /, move down and left,  and insert a /
       <pgup>       replace with a /, move up   and right, and insert a /
       <home>       replace with a \, move up   and left,  and insert a \
       \>           draw fat -> arrow
       \<           draw fat <- arrow
       \^           draw fat ^  arrow
       \v           draw fat v  arrow
       \a           draw arrow based on corners of visual-block
       \b           draw box using visual-block selected region
       \e           draw an ellipse inside visual-block
       \f           fill a figure with some character
       \h           create a canvas for \a \b \e \l
       \l           draw line based on corners of visual block
       \s           adds spaces to canvas
       <leftmouse>  select visual block
     <s-leftmouse>  drag and draw with current brush (register)
       \ra ... \rz  replace text with given brush/register
       \pa ...      like \ra ... \rz, except that blanks are considered
                    to be transparent
    
  27. objcopy

    将目标文件的一部分或者全部内容拷贝到另外一个目标文件中,或者实现目标文件的格式转换。

    SYNOPSIS
           objcopy [-F bfdname|--target=bfdname]
                   [-I bfdname|--input-target=bfdname]
                   [-O bfdname|--output-target=bfdname]
                   [-B bfdarch|--binary-architecture=bfdarch]
                   ...
    

    例如:

    objcopy -O binary test.o test.bin
    
  28. spacevim 快捷键
    space f t 		打开/关闭目录
    f3        		快捷键打开/关闭目录
    space f o 		打开当前文件所在目录
    >		  		放大文件树窗口宽度
    <		  		缩小文件树窗口宽度
    SPC f y	  		复制并显示当前文件的绝对路径
    SPC f Y	  		复制并显示当前文件的相对路径
    Ctrl-<Down>		切换至下方窗口
    Ctrl-<Up>		切换至上方窗口
    Ctrl-<Left>		切换至左边窗口
    Ctrl-<Right>	切换至右边窗口
    SPC 1~9			跳至窗口 1~9
    q				智能关闭当前窗口
    在目录窗口中
    N				新建文件
    .				切换显示隐藏文件
    yY				复制文件
    yy				复制文件路径
    P				粘贴文件
    i				显示文件夹历史
    sg				垂直分屏打开文件
    Ctrl+r			刷新文件树
    r				替换或者重命名
    
  29. 利用 voidkiss/folaterm 可以实现将终端以 float window 的形式打开,映射的快捷键分别为:
    Ctrl n : 创建新的 terminal window
    Ctrl p : 切换到 prev 的 terminal window
    Fn5 : 显示/隐藏窗口
    
  30. 利用 ‘telescope’ 快速搜索 file,buffer,function 等

    , o             		 在当前文件中搜索该符号
    , s             		 在整个工程中搜索该符号
    , f + 文件名       搜索文件
    , b + buffer 名 搜索buffer
    
  31. vim 替换

    :[addr]s/源字符串/目的字符串/[option]
    

    全局替换命令为:

    :%s/源字符串/目的字符串/g
    

    (1)[addr] 表示检索范围,省略时表示当前行。

    “1,20” :表示从第 1 行到 20 行;

    “%” :表示整个文件,同“1,$”;

    “. ,$” :从当前行到文件尾;

    (2)s : 表示替换操作

    (3)[option] : 表示操作类型

    g 表示全局替换;

    c 表示进行确认;

    p 表示替代结果逐行显示(Ctrl + L 恢复屏幕);

    省略 option 时仅对每行第一个匹配串进行替换;

    如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义 如 \t 。

  32. cloc - Count, or compute differences of, lines of source code and comments

    - Count all the lines of code in a directory:                                                             	cloc                                                                              - Count all the lines of code in a directory, displaying a progress bar during the counting process:
      cloc --progress=1 
    
  33. locate 查找文件比 find 快,配合 grep 使用很方便

    Find filenames quickly.
     - Look for pattern in the database. Note: the database is recomputed periodically (usually weekly or daily):
       locate 
     - Look for a file by its exact filename (a pattern containing no globbing characters is interpreted as *pattern*):
       locate */
     - Recompute the database. You need to do it if you want to find recently added files:
       sudo updatedb
    
    locate cpu.h|grep gitlab/bmbt
    /home/guanshun/gitlab/bmbt/.ccls-cache/@home@guanshun@gitlab@bmbt/include@hw@core@cpu.h
    /home/guanshun/gitlab/bmbt/.ccls-cache/@home@guanshun@gitlab@bmbt/include@hw@core@cpu.h.blob
    /home/guanshun/gitlab/bmbt/.ccls-cache/@home@guanshun@gitlab@bmbt/src@i386@cpu.h
    /home/guanshun/gitlab/bmbt/.ccls-cache/@home@guanshun@gitlab@bmbt/src@i386@cpu.h.blob
    /home/guanshun/gitlab/bmbt/include/hw/core/cpu.h
    /home/guanshun/gitlab/bmbt/src/i386/cpu.h
    
  34. alias 比 ln -s 更好用,例如:

    alias gc 'git commit'
    alias gs 'git status'
    alias lg lazygit
    

    之后就可以直接使用 gc, gs, lg 等等。

     - List all aliases:
       alias
     - Create a generic alias:
       alias =""
     - View the command associated to a given alias:
       alias 
     - Remove an aliased command:
       unalias 
    

    不过 alias 的生存期只是当前终端,终端关了就失效。

  35. ps 指令可以查看当前进程 ps -ejH | grep frp

    Information about running processes.
     - List all running processes:
       ps aux
     - List all running processes including the full command string:
       ps auxww
     - Search for a process that matches a string:
       ps aux | grep 
     - List all processes of the current user in extra full format:
       ps --user $(id -u) -F
     - List all processes of the current user as a tree:
       ps --user $(id -u) f
     - Get the parent pid of a process:
       ps -o ppid= -p 
     - Sort processes by memory consumption:
       ps --sort size
    
  36. Rsyncing directories through ssh tunnel

    通过 58 服务器穿透到公司内网的 la 机器,先开 frpc 代理,然后使用命令:

    ssh -f -N -L local_port_machineA:ip_machineC:remoteport_machineC user_machineB@ip_machineB
    

    具体到自己的机器就是

    ssh -L 16902:10.90.50.112:22 lx58
    

    然后就可以正常使用 rsync 同步文件

    rsync -avzP /home/guanshun/gitlab/bmbt ng5k:/home/niugen/lgs
    
  37. 自动换行是每行超过 n 个字的时候 vim 自动加上换行符用

    set textwidth=70 来设置 n

    自动折行是把长的一行用多行显示 , 不在文件里加换行符用 :set wrap 设置自动折行 :set nowrap 设置不自动折行

  38. xdg-open 能够自动使用对应的软件打开任意文件。

  39. 在脚本中使用 alias,这样就不用每次打开一个新的终端就敲一遍 alias。

    # custom alias
    alias gc="git commit"
    alias gs="git status"
    alias gl="git log"
    alias gsh="git stash"
    alias ga="git add"
    alias gp="git push -origin"
    
    funcsave gc
    funcsave gs
    funcsave gl
    funcsave gsh
    funcsave ga
    funcsave gp
    

    将这段脚本放到 /home/guanshun/.config/fish/config.fish 中重新运行 fish 即可。

    如果没有使用 fish 而是使用原来的 bash,那么将下面这段代码添加到 /home/guanshun/.bashrc 中即可。

    # custom alias
    alias gc='git commit'
    alias gs='git status'
    alias gl='git log'
    alias gsh='git stash'
    alias ga='git add'
    alias gp='git push -origin'
    
  40. vim 删除操作

    :%s/r//g                    删除 DOS 方式的回车 ^M
    :%s= *$==                   删除行尾空白
    :%s/^(.*)n1/1$/             删除重复行
    :sort u						删除重复行,这个更好用
    :%s/^.{-}pdf/new.pdf/       只是删除第一个 pdf
    :%s/<!--_.{-}-->//          又是删除多行注释(咦?为什么要说「又」呢?)
    :g/s*^$/d                   删除所有空行 :这个好用有没有人用过还有其他的方法吗?
    :g!/^dd/d                   删除不含字符串'dd'的行
    :v/^dd/d                    同上 (译释:v ==&nbspg!,就是不匹配!)
    :g/str1/,/str2/d            删除所有第一个含 str1 到第一个含 str2 之间的行
    :v/./.,/./-1join            压缩空行
    :g/^$/,/./-j                压缩空行
    ndw 或&nbspndW              删除光标处开始及其后的 &nbspn-1 个字符
    d0                          删至行首
    d$                          删至行尾
    ndd                         删除当前行及其后 &nbspn-1 行
    x 或&nbspX                  删除一个字符
    Ctrl+u                      删除输入方式下所输入的文本
    ^R                          恢复 u 的操作
    J                           把下一行合并到当前行尾
    V                           选择一行
    ^V                          按下 ^V 后即可进行矩形的选择了
    aw                          选择单词
    iw                          内部单词(无空格)
    as                          选择句子
    is                          选择句子(无空格)
    ap                          选择段落
    ip                          选择段落(无空格)
    D                           删除到行尾
    x,y                         删除与复制包含高亮区
    dl                          删除当前字符(与x命令功能相同)
    d0                          删除到某一行的开始位置
    d^                          删除到某一行的第一个字符位置(不包括空格或 TAB 字符)
    dw                          删除到某个单词的结尾位置
    d3w                         删除到第三个单词的结尾位置
    db                          删除到某个单词的开始位置
    dW                          删除到某个以空格作为分隔符的单词的结尾位置
    dB                          删除到某个以空格作为分隔符的单词的开始位置
    d7B                         删除到前面7个以空格作为分隔符的单词的开始位置
    d)                         删除到某个语句的结尾位置
    d4)                        删除到第四个语句的结尾位置
    d(                         删除到某个语句的开始位置
    d)                         删除到某个段落的结尾位置
    d{                         删除到某个段落的开始位置
    d7{                        删除到当前段落起始位置之前的第7个段落位置
    dd                         删除当前行
    d/text                     删除从文本中出现“text”中所指定字样的位置, 一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容
    dfc                        删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括该字符)之间的内容
    dtc                        删除当前行直到下一个字符“c”所出现位置之间的内容
    D                          删除到某一行的结尾
    d$                         删除到某一行的结尾
    5dd                        删除从当前行所开始的5行内容
    dL                         删除直到屏幕上最后一行的内容
    dH                         删除直到屏幕上第一行的内容
    dG                         删除直到工作缓存区结尾的内容
    d1G                        删除直到工作缓存区开始的内容
    
  41. taskset 能够将进程在指定的 CPU 上执行,例如要在所有的 CPU 上运行一个 kernel module,

    sudo insmod module-name.ko // 加载 kernel module
    sudo taskset -c 0 echo 1 > /sys/kernel/hamt/hamt_ctl // 注意要在 bash 中执行
    sudo taskset -c 0 cat /sys/kernel/hamt/hamt_ctl