Linux命令快查
Ddpkg-deb查看.deb包内容及目标安装路径# dpkg-deb -c .deb文件 $ dpkg-deb -c libcudnn7-dev_7.6.5.32-1cuda10.0_amd64.deb drwxr-xr-x root/root 0 2019-10-28 07:06 ./ drwxr-xr-x root/root 0 2019-10-28 07:06 ./usr/ drwxr-xr-x root/root 0 2019-10-28 07:06 ./usr/include/ drwxr-xr-x root/root 0 2019-10-28 07:06 ./usr/include/x86_64-linux-gnu/ -rw-r--r-- root/root 134857 2019-10-28 07:06 ./usr/include/x86_64-linux-gnu/cudnn_v7.h drwxr-xr-x root/root 0 2019-10-28 07:06 ./usr/lib/ drwxr-xr-x root/root 0 2019-10-28 07:06 ./usr/lib/x86_64-linux-gnu/ -rw-r--r-- root/root 390446312 2019-10-28 07:06 ./usr/lib/x86_64-linux-gnu/libcudnn_static_v7.a drwxr-xr-x root/root 0 2019-10-28 07:06 ./usr/share/ drwxr-xr-x root/root 0 2019-10-28 07:06 ./usr/share/doc/ drwxr-xr-x root/root 0 2019-10-28 07:06 ./usr/share/doc/libcudnn7-dev/ -rw-r--r-- root/root 158 2019-10-28 07:06 ./usr/share/doc/libcudnn7-dev/changelog.Debian.gz -rw-r--r-- root/root 0 2019-05-17 07:51 ./usr/share/doc/libcudnn7-dev/copyright drwxr-xr-x root/root 0 2019-10-28 07:06 ./usr/share/lintian/ drwxr-xr-x root/root 0 2019-10-28 07:06 ./usr/share/lintian/overrides/ -rw-r--r-- root/root 53 2019-10-28 07:06 ./usr/share/lintian/overrides/libcudnn7-devFffmpeg.wav转.mp3ffmpeg -i input.wav -codec:a libmp3lame -qscale:a 2 output.mp3.mp3转.wav# -ac : set number of audio channels # -ar : set audio sampling rate (in Hz) ffmpeg -i input.mp3 -ac 1 -ar 32000 output.wav从视频文件中抽取音频# -vn : disable video # -ac : set number of audio channels # -ar : set audio sampling rate (in Hz) # -c:a : 同-acodec, 选择音频的encoder/decoder # 可以通过 ffmpeg -encoders 查询有哪些encoder ffmpeg -i video -vn -c:a copy audio.aac ffmpeg -i video -vn -ac 1 -ar 24000 -c:a aac audio.aac ffmpeg -i video -vn -ac 1 -ar 24000 -c:a pcm_s16le -f wav audio.wavGgdb带参数调试# 格式 gdb --args excutable-file args # 样例 gdb --args ./bin/ttsdemo-lstm -i input.txt -o output -t 4git撤消已push到远端的commits# 查看提交历史 git log # commit 3c074f72876c25c215cc96646cd68a4f3b1ee55d # Merge: 0f21d05 bcbfad1 # Author: tanxingjun tanxingjunxiaomi.com # Date: Tue Nov 24 19:04:42 2020 0800 # # conflict resoved # # commit 6b17765adddb61fd22a05db60fdbd3dfe4dd7bd4 # Author: tanxingjun tanxingjunxiaomi.com # Date: Fri Nov 20 12:45:08 2020 0800 # # Release of ptts_v0.5.0 # 恢复本地分支到目标commit git reset --hard 6b17765adddb61fd22a05db60fdbd3dfe4dd7bd4 # push到远端 git push origin dev-ptts --force # 如果不加 --force 会被 reject因为 push 的 commit 比远端的 HEAD 时间上更早git-lfs常规操作# 索引一个文件 git lfs track file # 取消索引 git lfs untrack file # 查看索引模式 git lfs track # 查看已索引文件 git lfs ls-files通过 git-lfs 上传大文件git lfs install git lfs track *.psd git add .gitattributes git add file.psd git commit -m Add design file git push origin main # 如果一同 push 未通过 lfs track 的文件此 push 可能失败Hhead相关命令: tail打印文件前N行$ cat test.txt 第1行 倒数第10行 第2行 倒数第9行 第3行 倒数第8行 第4行 倒数第7行 第5行 倒数第6行 第6行 倒数第5行 第7行 倒数第4行 第8行 倒数第3行 第9行 倒数第2行 第10行 倒数第1行 # 取前 N 行 # 格式: # head -n N [FILE] # 如果不加 -n 选项则默认 N10 # 样例: $ head -n 3 test.txt 第1行 倒数第10行 第2行 倒数第9行 第3行 倒数第8行 # 从第 1 行开始取到倒数第 N 行不含倒数第 N 行 # 格式: # head -n -N [FILE] # 样例: $ head -n -3 test.txt 第1行 倒数第10行 第2行 倒数第9行 第3行 倒数第8行 第4行 倒数第7行 第5行 倒数第6行 第6行 倒数第5行 第7行 倒数第4行LlameMP3的解码器很多但优秀且开源的编码器几乎只有lame了也有很多将lame二次封装的工具。操作系统不自带lame需要另外安装# 格式 lame [options] infile [outfile] # 样例1 lame -m m -v 000001.wav 000001.mp3 # -m m 表示单声道 # -v 表示可变比特率(variable bitrate)加此选项音频保真度高一些但占用存储空间也大一些 # 样例2 lame --cbr -b 16 -q 2 000001.wav 000001.mp3 # --cbr 表示固定比特率(constant bitrate) # -b 表示采样率(sampling frequencies)此参数可控制压缩率参数越小产生的mp3文件越小但音质也越差 # -q 表示品质(qual)值为[0-9]值越小生成的mp3品质越高但压缩速度越慢 # 样例3 lame --resample 16 000001.wav 000001.mp3 # --resample 表示重新采样16 表示采样率16KHzlocale查看和设置语言环境。可通过命令 locale -v 查看系统语言英文系统默认为POSIX此时中文显示为乱码$ locale -v LANG LANGUAGE LC_CTYPEPOSIX LC_NUMERICPOSIX LC_TIMEPOSIX LC_COLLATEPOSIX LC_MONETARYPOSIX LC_MESSAGESPOSIX LC_PAPERPOSIX LC_NAMEPOSIX LC_ADDRESSPOSIX LC_TELEPHONEPOSIX LC_MEASUREMENTPOSIX LC_IDENTIFICATIONPOSIX LC_ALL通过设置环境变量的方式可将系统语言改为UTF8以支持中文。其中LANG是默认字符集当LC_*未设置时取该默认值LC_*为每个类别设置字符集LC_ALL是强制字符集不管LANG和LC_*设了什么只要设置了LC_ALLLC_*都会强制使用该字符集。即优先级LC_ALL LC_* LANG。另外LANGUAGE是设置应用程序的界面语言。export LC_ALLzh_CN.utf8结果如下$ locale -v LANG LANGUAGE LC_CTYPEzh_CN.utf8 LC_NUMERICzh_CN.utf8 LC_TIMEzh_CN.utf8 LC_COLLATEzh_CN.utf8 LC_MONETARYzh_CN.utf8 LC_MESSAGESzh_CN.utf8 LC_PAPERzh_CN.utf8 LC_NAMEzh_CN.utf8 LC_ADDRESSzh_CN.utf8 LC_TELEPHONEzh_CN.utf8 LC_MEASUREMENTzh_CN.utf8 LC_IDENTIFICATIONzh_CN.utf8 LC_ALLzh_CN.utf8以上是没有root权限时的设置方式这个时候显示中文ok但每次进入新界面都要设置一次。如果有root权限可以通过修改 /etc/default/locale 设置默认语言# File generated by update-locale LANGzh_CN.utf8 LANGUAGEzh_CN.utf8 LC_ALLzh_CN.utf8 # 补充说明 # 通常系统中并没有安装zh_CN.utf8字符集但默认都自带C.UTF-8字符集即POSIX标准的UTF-8字符集 # 如果只需要在操作界面正常显示中文字符直接使用C.UTF-8就可以了 # zh_CN.utf8支持中国大陆本地化标准如时间、货币等格式字符排序方式等 #如果修改后报以下错误则可能是没有安装该语言通过locale-gen安装即可。发现locale-gen安装时需要将字符集字母大写如 zh_CN.GBK而不是zh_CN.gbkbash: warning: setlocale: LC_ALL: cannot change locale (zh_CN.utf8): No such file or directory$ locale locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory $ locale-gen zh_CN.UTF-8 Generating locales (this might take a while)... zh_CN.UTF-8... done Generation complete. # 补充说明 # 执行以上命令如果报错 bash: locale-gen: command not found # 则需要先执行命令 apt-get install locales #还有一个问题如果你不知道有哪些有效字符集可以通过 locale -a 查看建议执行前先将所有字符集清单装上$ locale -a C C.UTF-8 POSIX # 发现系统默认只有3个字符集 # 通过以下命令将字符集列表装上 $ sudo apt-get install -y locales locales-all # 再次查看 # locale -a C C.UTF-8 POSIX . . . zh_CN zh_CN.gb18030 zh_CN.gbk zh_CN.utf8 zh_HK zh_HK.utf8 . . .ls只列出子目录目录本身$ mkdir dir{1..3} $ touch file{1..3} $ ls dir1 dir2 dir3 file1 file2 file3 $ ls -d . $ ls -d * dir1 dir2 dir3 file1 file2 file3 $ ls -d */ dir1/ dir2/ dir3/Nncnc (netcat)它可以用来完成很多的网络功能特别是在公司设有跳板机/堡垒机/虚拟机和一此安全策略时sftp、scp、sz等都不好用此时nc或许是一种很好的数据传输方式。Linux 系统默认没有安装 nc可以用下面的方法安装# centos yum install nc # ubuntu apt-get install netcat假设远端为linux虚拟机(或无密码认证)本地为linux(win10可以用WSL)。其中 10.100.100.1 为本地IP地址。9995 为端口可随便设空闲的端口1. 本地传远端(文件)# 本地 nc -l 9995 file_name # 远端 nc 10.100.100.1 9995 file_name2. 远端传本地(文件)# 本地 nc -l 9995 file_name # 远端 nc 10.100.100.1 9995 file_name3. 本地传远端(目录)# 本地 tar cfz - dir_name | nc -l 9995 # 远端 nc 10.100.100.1 9995 | tar xfvz -4. 远端传本地(目录)# 本地 nc -l 9995 | tar xfvz - # 远端 tar cfz - dir_name | nc 10.100.100.1 9995Ppippython的软件包安装工具很多包直接安装下载很慢、超时导致安装失败可以指定国内镜像# -i 选项指定国内镜像 pip install package -i https://pypi.tuna.tsinghua.edu.cn/simpleps查看当前用户的所有任务进程ps -aux | grep usr按内存占用量排序ps aux --sort -rss | head -n 100 # 如果不加后面的 head 命令则可能显示非常多行查看某个任务进程线程数ps hH p pid | wc -l例查看当前用户 “./bin/ttsdemo” 任务的线程数tanxingjunc5-tts-train-g4p4-02mitts-release$ ps -aux | grep tanxing tanxing 20780 123 0.1 9408408 551220 pts/14 Sl 17:12 0:47 ./bin/ttsdemo -i test/TestSets/TS040_HealthMonitoringASR.txt -t 1 -log log.t16 tanxing 21663 0.0 0.0 110260 2344 pts/14 S 17:13 0:00 less 20190628.t16.log tanxingjunc5-tts-train-g4p4-02mitts-release$ ps hH p 20780 | wc -l 338除此外也可以通过 cat 或 top 查看cat/proc/pid/statusRrename批量改文件名rename s/regex/replacement/ files例批量加前缀1$ ls 001.wav 002.wav 003.wav 004.wav 005.wav $ rename s/^/pword_5frames_/ *.wav $ ls pword_5frames_001.wav pword_5frames_003.wav pword_5frames_005.wav pword_5frames_002.wav pword_5frames_004.wav例批量加前缀2$ ls 1.wav 10.wav 11.wav 12.wav 2.wav 3.wav 4.wav $ rename s/^([0-9])\./00$1\./ *.wav $ rename s/^([0-9]{2})\./0$1\./ *.wav $ ls 001.wav 002.wav 003.wav 004.wav 010.wav 011.wav 012.wavrsync跨机器同步# 从本地往远端同步 # 格式: # rsync [OPTION]... SRC [SRC]... [USER]HOST:DEST # 样例: rsync -av *.txt root192.168.10.2:/mnt/data/nlp_corpus/nmt/ # 通过ssh指定端口号: rsync -e ssh -p 60006 -av *.txt root192.168.10.2:/mnt/data/nlp_corpus/nmt/Ssedsed 的参数意义(参考https://blog.csdn.net/weixin_35834894/article/details/110874917)-n :使用安静(silent)模式。在一般 sed 的用法中所有来自 STDIN 的数据一般都会被列出到屏幕上。 但如果加上 -n 参数后则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。 -e :直接在命令行界面上进行 sed 的动作编辑; -f :直接将 sed 的动作写在一个文件内 -f filename 则可以执行 filename 内的 sed 动作; -r :sed 的动作支持的是延伸型正则表达式的语法。(默认是基础正则表达式语法) -i :直接修改读取的文件内容而不是由屏幕输出。 动作说明: [n1[,n2]]function n1, n2 :不见得会存在一般代表“选择进行动作的行数”举例来说如果我的动作 是需要在 10 到 20 行之间进行的则“ 10,20[动作行为] ” function 有下面这些咚咚: a :新增 a 的后面可以接字串而这些字串会在新的一行出现(目前的下一行)~ c :取代 c 的后面可以接字串这些字串可以取代 n1,n2 之间的行! d :删除因为是删除啊所以 d 后面通常不接任何咚咚; i :插入 i 的后面可以接字串而这些字串会在新的一行出现(目前的上一行); p :打印亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~ s :取代可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式! 例如 1,20s/old/new/g 就是啦!原位查找替换 sed -i reg-exp file# ------ # 样例01 # ------ $ head -n 5 input.txt 118174 music 好的 42903 video 小爱没有找到呢为您推荐其他精彩的内容吧 24647 music 我们一起来听一听儿歌吧 19035 music 好啊享受音乐时光吧 18369 video 没问题 $ # 删除每行行首的部分只留下后面的文本 # -E 表示使用扩展正则sed默认使用基本正则 $ sed -E -i s/^[[:digit:]][[:space:]](music|video)[[:space:]]//g input.txt $ head -n 5 input.txt 好的 小爱没有找到呢为您推荐其他精彩的内容吧 我们一起来听一听儿歌吧 好啊享受音乐时光吧 没问题 # # ------ # 样例02 # ------ $ head -n 2 sentences.txt 21070001 抱歉打扰到您了再见 21070002 抱歉打扰到您再见 $ # 对每个句子编号加后缀 $ sed -E -i s/^([0-9])/\1-00/g sentences.txt $ head -n 2 sentences.txt 21070001-00 抱歉打扰到您了再见 21070002-00 抱歉打扰到您再见 # # ------ # 样例03 # ------ $ head sentences.txt 21070001-00 抱歉打扰到您了再见 21070002-00 抱歉打扰到您再见 $ # 只编辑特定行在命令前填上行号或行业范围 # 本例将第2行的‘再见’改为‘拜拜’ $ sed -e 2s/再见/拜拜/ sentences.txt 21070001-00 抱歉打扰到您了再见 21070002-00 抱歉打扰到您拜拜 #soxmp3 转 wavsox 001.mp3 001.wav批量转换for file in $(find . -name *.mp3); do sox $file ${file%.*}.wav; done需要安装mp3解码包否则会出现以下错误sox默认不支持mp3sox FAIL formats: no handler for file extension mp3sudo apt-get install libsox-fmt-mp3查询采样率sox --i infile | grep -oP Sample Rate\s:\s\K\dstrings在对象文件.o或二进制文件.a, .so, .bin中查找可打印的字符串查看libc/libstdc版本及其兼容版本列表# 确认当前环境所使用的库文件 $ ldconfig -p | grep libc.so.6 libc.so.6 (libc6,x86-64, OS ABI: Linux 3.2.0) /lib/x86_64-linux-gnu/libc.so.6 # 用strings提取版本信息 $ strings /lib/x86_64-linux-gnu/libc.so.6 | grep LIBC GLIBC_2.2.5 GLIBC_2.2.6 GLIBC_2.3 GLIBC_2.3.2 GLIBC_2.3.3 GLIBC_2.3.4 GLIBC_2.4 GLIBC_2.5 GLIBC_2.6 GLIBC_2.7 GLIBC_2.8 GLIBC_2.9 GLIBC_2.10 GLIBC_2.11 GLIBC_2.12 GLIBC_2.13 GLIBC_2.14 GLIBC_2.15 GLIBC_2.16 GLIBC_2.17 GLIBC_2.18 GLIBC_2.22 GLIBC_2.23 GLIBC_2.24 GLIBC_2.25 GLIBC_2.26 GLIBC_2.27 GLIBC_2.28 GLIBC_2.29 GLIBC_2.30 GLIBC_2.31 GLIBC_2.32 GLIBC_2.33 GLIBC_2.34 GLIBC_2.35 GLIBC_PRIVATE # 确认当前环境所使用的库文件 $ ldconfig -p | grep libstdc.so.6 libstdc.so.6 (libc6,x86-64) /lib/x86_64-linux-gnu/libstdc.so.6 # 用strings提取版本信息 $ strings /lib/x86_64-linux-gnu/libstdc.so.6 | grep LIBCXX GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBCXX_3.4.15 GLIBCXX_3.4.16 GLIBCXX_3.4.17 GLIBCXX_3.4.18 GLIBCXX_3.4.19 GLIBCXX_3.4.20 GLIBCXX_3.4.21 GLIBCXX_3.4.22 GLIBCXX_3.4.23 GLIBCXX_3.4.24 GLIBCXX_3.4.25 GLIBCXX_3.4.26 GLIBCXX_3.4.27 GLIBCXX_3.4.28 GLIBCXX_3.4.29 GLIBCXX_3.4.30 GLIBCXX_DEBUG_MESSAGE_LENGTHTtail相关命令: head打印文件末尾N行$ cat test.txt 第1行 倒数第10行 第2行 倒数第9行 第3行 倒数第8行 第4行 倒数第7行 第5行 倒数第6行 第6行 倒数第5行 第7行 倒数第4行 第8行 倒数第3行 第9行 倒数第2行 第10行 倒数第1行 # 取后 N 行 # 格式: # tail -n N [FILE] # 如果不加 -n 选项则默认 N10 # 样例: $ tail -n 3 test.txt 第8行 倒数第3行 第9行 倒数第2行 第10行 倒数第1行 # 从第 N 行开始取后面所有行含第 N 行 # 格式: # tail -n N [FILE] # 样例: $ tail -n 3 test.txt 第3行 倒数第8行 第4行 倒数第7行 第5行 倒数第6行 第6行 倒数第5行 第7行 倒数第4行 第8行 倒数第3行 第9行 倒数第2行 第10行 倒数第1行tensorboard通过ssh远程登录到服务器上的docker容器中启动TensorBoard并在本地PC的浏览器中查看# 【本地命令行】建立 SSH 隧道 # 其中 6000 是服务器管理员分配的 ssh 端口 # 其中 6006 是为 TensorBoard 自定义的服务端口可以换 ssh -p 6000 -L 6006:localhost:6006 user10.200.0.20 # 【容器内】启动 TensorBoard # --host0.0.0.0 表示允许外部访问默认的 localhost 或 127.0.0.1 则不支持外部访问 tensorboard --logdir./logs --host0.0.0.0 --port6006 # 【本地浏览器】查看结果 http://localhost:6006top查看某个任务进程线程数# 格式 top -p pid # 样例 top -p 174263 # 再敲 H # top - 10:40:23 up 195 days, 18:12, 3 users, load average: 159.17, 154.68, 133.39 # Threads: 3176 total, 421 running, 2755 sleeping, 0 stopped, 0 zombie # %Cpu(s): 33.7 us, 66.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st # KiB Mem : 52800934total, 22407752 free, 47448584 used, 45815299buff/cache # KiB Swap: 0 total, 0 free, 0 used. 47402662avail Mem # # PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND # 174974 tanxing 20 0 80.302g 3.357g 53168 R 90.1 0.7 14:33.83 ttsdemo-lpcnet_ # 182525 tanxing 20 0 80.302g 3.357g 53168 S 86.9 0.7 0:38.66 ttsdemo-lpcnet_ # 174707 tanxing 20 0 80.302g 3.357g 53168 R 82.8 0.7 12:37.01 ttsdemo-lpcnet_ # 182539 tanxing 20 0 80.302g 3.357g 53168 S 81.2 0.7 0:45.95 ttsdemo-lpcnet_其它实现方式请参考 ps 命令Wwget断点续传wget -r -p -np -k http://xxx.com/xxxXxxd将文件内容转成十六进制或二进制例查看UTF-8格式的中文字符编码xxd -c 30 -g 3 -u string.txt string.hex例将数据文件转换成C/C代码xxd -i -u data.txt data.hZzip分卷压缩与解压# 【1】分卷压缩成不超过64MB的多个part $ zip -s 64m -r part.zip model $ ls -lh total 215M drwxr-xr-x 2 test test 4.0K Sep 18 00:15 model -rw-rw-r-- 1 test test 64M Nov 6 15:14 part.z01 -rw-rw-r-- 1 test test 64M Nov 6 15:14 part.z02 -rw-rw-r-- 1 test test 64M Nov 6 15:14 part.z03 -rw-rw-r-- 1 test test 23M Nov 6 15:14 part.zip # 【2】将多个part合并成一个整体包 $ zip -s 0 part.zip --out whole.zip $ ls -lh total 430M drwxr-xr-x 2 test test 4.0K Sep 18 00:15 model -rw-rw-r-- 1 test test 64M Nov 6 15:14 part.z01 -rw-rw-r-- 1 test test 64M Nov 6 15:14 part.z02 -rw-rw-r-- 1 test test 64M Nov 6 15:14 part.z03 -rw-rw-r-- 1 test test 23M Nov 6 15:14 part.zip -rw-rw-r-- 1 test test 215M Nov 6 15:23 whole.zip # 【3】将一个大的zip包拆分成多个小zip包 $ zip whole.zip --out segment -s 64m $ ls -lh total 430M drwxr-xr-x 2 test test 4.0K Sep 18 00:15 model -rw-rw-r-- 1 test test 64M Nov 6 15:31 segment.z01 -rw-rw-r-- 1 test test 64M Nov 6 15:31 segment.z02 -rw-rw-r-- 1 test test 64M Nov 6 15:31 segment.z03 -rw-rw-r-- 1 test test 23M Nov 6 15:31 segment.zip -rw-rw-r-- 1 test test 215M Nov 6 15:23 whole.zip