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 要快的文本搜索工具。
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
方便快速查询 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 块中其他输入,否则会被跳过到后面。