Linux 命令行小工具

Table of Contents

1. bat

cat 的克隆版,用法和 cat 差不多,有些我比较喜欢的特点:

  • 显示的文件超过一屏时,默认带类似 less 自动分页;
  • 常见语言的源文件可以高亮代码;
  • 主题可以定制。

安装:

sudo dnf install bat

2. iconv

编码转换

-t 目标编码
-f 原编码

如:

iconv -t utf8 -f gbk index.html > index.htm

3. import

import 是一个命令行版的屏幕截图工具。

import 文件名

截图后自动生成文件名,并保存到 home 目录中:

#!/bin/sh
filename=date +%Y%m%d%H%M%S
savepath=$HOME

exec import $savepath'/'$filename'.jpg'

4. zenity

使用 zenity 命令,可以弹出一个提示框,提示的文本内容可以自定义。如下例子是一个提示是否关机或重启的脚本:

#! /bin/bash

case $1 in
"down")
zenity --question --text "关机?" && sudo shutdown -h now
;;
"reboot")
zenity --question --text "重启?" && sudo shutdown -r now
;;
esac

5. pdfunite

合并 PDF 文件

pdfunite file1.pdf file2.pdf output.pdf

6. convert

格式转换

例,合并多张图片到一个 PDF 文件:

convert 1.jpg 2.jpg 3.jpg out.pdf

7. gs

合并多个 PDF:

$ gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=输出的独立文件.pdf -dBATCH file1.pdf file2.pdf

8. ack

比 grep 要快的文本搜索工具。

官网:https://beyondgrep.com/

9. xclip

命令行使用粘贴板数据。如下,把 echo 的内容复制到粘贴板:

echo hello | xclip -selection clipboard

从粘贴板中读取数据:

xclip -i

10. cloc

统计目录中源码文件的行数。

$ cloc .
    3769 text files.
    3713 unique files.
     586 files ignored.

github.com/AlDanial/cloc v 1.82  T=9.12 s (351.9 files/s, 176310.3 lines/s)
---------------------------------------------------------------------------------------
Language                             files          blank        comment           code
---------------------------------------------------------------------------------------
Python                                1823         111987         137183         520054
C                                      315          49176          44958         304067
C/C++ Header                           350          13996          10373         118865
reStructuredText                       483          71697          83814          90178
Bourne Shell                            18           2982           2633          19408
m4                                       3            524            150           5463
C++                                      5            717            258           3170
HTML                                    10            107             11           2017
WiX source                              51            162             41           1725
make                                     4            276            292           1613
Assembly                                 7            258            395           1481
DOS Batch                               29            288             88           1376
Windows Module Definition                8             23             14           1360
MSBuild script                          27             44              4            680
Objective C                              7             98             61            635
Lisp                                     1            109             81            502
YAML                                     8            112              4            452
Pascal                                   3            111            261            339
JavaScript                               3             37             58            315
Windows Resource File                    7             40             47            295
WiX string localization                 11             28              0            188
PowerShell                               5             27             58            156
CSS                                      2             42              4            154
INI                                      1             42             27            102
XML                                      6             56              2             77
D                                        5              8              1             73
JSON                                     6              3              0             65
Fish Shell                               1             13             15             47
IDL                                      2              1              0             35
C Shell                                  1              9              7             21
SVG                                      8              0              0              8
Visual Basic                             1              0              1              0
---------------------------------------------------------------------------------------
SUM:                                  3211         252973         280841        1074921
---------------------------------------------------------------------------------------

11. tldr

仓库:https://tldr.sh/

方便快速查询 Linux 命令使用示例。

12. exa

exa - a modern replacement for ls

相比传统的 ls 命令来说,exa 有更直观的列目录功能:

exa -l:显示文件详细信息,并且权限等字段用了不同的颜色做区分

exa -T:代替 tree 命令,可以树状列出子目录中文件

exa -R:递归显示子目录中文件

13. expect

expect 可以模拟用户键盘输入,比如写的脚本里用到了 scp、ssh 需要输入密码时。简单的语法如下:

expect -c "
           set timeout -1;
           spawn scp ${tar_name} root@host:/data;
           expect {
               yes/no { send \"yes\r\"; exp_continue }
               *assword* { send \"123456g\r\" }
           } ;
           expect 100% ;
           expect eof ;
       "

-c 参数表示接受字符串形式的 expect 语法。

spawn 是对 shell 进行了一层“包装”,spawn 不是系统自带的命令,注意。

expect {} 用来匹配,匹配到后的 send 表示模拟用户输入(记得 \r 换行)。其中 expcontinue 表示匹配后继续当前 expect 块中其他输入,否则会被跳过到后面。