文章目录
本文基于使用经验&主要参考 菜鸟-Linux 命令大全
生成密码 openssl rand -base64 1
- jupyter import 不到虚拟环境的库
pip install ipykernel
python -m ipykernel install --user --name=py39
1. 通用管理指令
- 指定某一张卡
CUDA_VISIBLE_DEVICES="1" python xxx
- 指定单线程 cpu core/processor/cpu_num区别
- 查看显卡占用情况
nvidia-smi
- 实时查看
watch -n 0.1 nvidia-smi
- 查看某一个进程的使用者
ps -p PID -o user
- 强制kill掉某一个进程
kill-9 PID
- 检查服务器的内存占用情况
df -h
- 查看文件夹大小
du -h --max-depth=1
(默认是当前所有目录) - 查看指定文件夹大小
du -h --max-depth=1 dst_dir
- 检查两个文件或者文件夹是否一致
diff a b
- 输出打印到日志中
python train.py aa | tee output.txt
- 生成当前环境的依赖
pip freeze > requirements.txt
- 根据配置文件安装
pip install -r requirements.txt
- 查看文件夹下子文件的个数
ls -l | grep -c "^-"
- 文件数目过多,ls
- 查看文件夹下(包含子文件的文件个数)
ls file_dir | wc -l
- 批量删除文件(参数列表过长)
先写到一个list中
cat 01.list | xargs -i rm {} ---xargs管道明令
linux终端修改配色
vim ~/.bashrc
在文件最后对PS1进行修改(自动覆盖之前的命令)
PS1='\[\033[00;32m\]\u@\h\[\033[0m\]:\[\033[00;33m\]\w\[\033[01;36m\]$(__git_ps1 "[%s]")\[\033[01;33m\]\$\[\033[00m\] '
export GIT_PS1_SHOWDIRTYSTATE=true GIT_PS1_SHOWSTASHSTATE=true
# fake __git_ps1 when git-prompts.sh not installed
if [ "$(type -t __git_ps1)" == "" ]; then
function __git_ps1() { :; }
fi
2. vim文件
vim配色设置
- vim配色方式预览官网,选择自己喜欢的配色,下载配色文件,选择自己喜欢的color.vim,放在
~/.vim/colors/
下边,如果没有创建此文件夹 - 在~/.vimrc 中修改配置,
- 或者直接替换自己舒服的vim文件配置
- 一组用的舒服的vim配置
set nu
set autoindent
set tabstop=4
set shiftwidth=4
set expandtab
set softtabstop=4
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
"set cursorline
syntax enable
"set background=dark
"let g:solarized_termtrans = 1
"set t_Co=256
"colorscheme solarized
"set list
"set listchars=tab:▸-,eol:↩︎,trail:-
set encoding=utf-8
set bg=dark
set hlsearch
- tab键自动空格
vi ~/.vimrn
set tabstop=4 设定tab宽度为4个字符
set shiftwidth=4 设定自动缩进为4个字符
set expandtab 用space替代tab的输入
字符编码
修改 /
set encoding=utf-8
set fileencodings=gb18030, cp936
- 查看文件编码格式
file xx.txt
- 在文件中查看文件编码格式
:set fenc
其中fenc是fileencoding的缩写,也可以直接写set fenc=utf-8
,修改编码格式,但是这样直接改有时候格式改了,但是显示并没有起到作用 - 有时候中文乱码,需要修改文件编码格式
iconv -f 'gbk' -t 'utf-8' src.txt>tar.txt
utf-8中文文本codec报错的问题
- 首先:Ubuntu 镜像使用帮助
Ubuntu 的软件源配置文件是 /etc/apt/sources.list。将系统自带的该文件做个备份,将该文件替换为内容, - vim ~/.bashrc
export http_proxy=http://bjrz-squid4.lf:11080 && export https_proxy=http://bjrz-squid4.lf:11080 ##代理设置
export LANG=zh_CN.utf8 #添加设置
apt-get install language-pack-zh-hans
基础命令
^\s\+print --以空格+print开头的字符
- 暂时显示行号
:set nu
- 到最后一行
:$
, 到第某行:n
- 查找某一个词
/word
,检索到按n
跳到下一个
如果想反向检索,shift+n
或者?word
查找,n
向前方索引上一个 - 永久显示行号
- 取消显示行号
:set nonu
- 查看当前文件名
:f
- 查看文件绝对路径
:!pwd
- 同时显示多个文件
:sp
- 同时打开其他文件
vsp xx
- 多列删除
- 重定向 command >log 2>&1
第一步:按下组合键“CTRL+v” 进入“可视 块”模式,选取这一列操作多少行
第二步:按下d 即可删除被选中的整块
- 块插入
第一步:按下组合键“CTRL+v” 进入“可视 块”模式,选取这一列操作多少行
第二步:按下shift+i(或者大写的字母"i")
第三步:输入要插入的内容
第四步:按ESC,之后就会看到插入的效果。
- vim看文字乱码,需要配置一下文件
编辑~/.vimrc文件,加上如下几行:
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
txt文件处理
- 文件内容批量修改
:set hlsearch #对搜索内容高亮现实
:%s/str//g 删除文件中所有的str字符
:%s/str/g 替换文件中所有的str字符为g
#如果遇到no pattern的情况,可能是:比如删除`sil]`,其中‘]'是有意义的字符,要转译一下,`:%s/sil\]//g`
## 删除特征字符所在的行
:g/str/d
打乱文本行
shuf input_file.txt -o output_file.txt
#替换文件中的指定字符
`:%s/vivian/sky/`(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
`:%s/vivian/sky/g`(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
# 字符串正则匹配
/{"id":\d\+,"text":" \d\+是匹配整数,正常使用是\d+,这里对+也要进行转译
:%s#{"id":\d\+,"text":"##g 批量删除 {"id":123,"text":"的字符串
```python
:%s#\([A-Z]\)#\1 #g 将所有大写字符后面加空格,\1是()中字符的代指
%s#\([A-Z]\)\(\d\)#\1-\2#g.
-----#\([a-z]\)\(\d\) 括号括起来才能算变量,后边 \1 \2引用第一个/第二个变量
#字符串匹配到之后再复制回去
:%s#\d+|#&str# ------匹配到 (‘数字’+‘|‘)的组合,然后替换成 (‘数字’+‘|’+'str")
`:` 表示后面输入的是vim命令参数
`g` 表示范围是全局
`str` 是匹配上的字符串
`d` delete 表示删除
14. 行删除
:%norm jkdd 删除奇数行
:%norm jdd 删除偶数行
:n,m d 删除n-m 行
两个文件复制到新的文件,每行对应 paste en16 en24 > tmp,然后替换其中\t为想要的字符
- 查看文件行数
wc -l xx.txt
- 插入换行符
:%s#\n#s#g 替换换行符为s
:%s#s#\r#g 替换s为换行符
批量操作
- 批量插入
(1)ctrl+v, 进入列处理模式
(2)shift+g,到最后一行,然后箭头挪到需要处理的列
(3)shift+i, 插入想要的字符
(4)esc,回车,结束操作
- 取消多行注释:
(1)进入命令行模式,按ctrl + v进入 visual block模式(可视快模式),按小写字母L横向选中列的个数,例如 // 需要选中2列
(2)按字母j,或者k选中注释符号
(3)按d键就可全部取消注释
vim文件内复制
- 复制一行:在要复制的行
yy
,然后在同一编译器下p
,即可复制一行 - 复制多行:
strl+v
进入快操作,选中要复制的多行多列,按y
复制。 此时vim 会自动将光标定位到选中文本的开始的地方,并退出可视模式。移动光标到文本结束的地方,按p
粘贴。
ctags(vim定义跳转)
- 安装
apt-get install ctags
- 对文件下所有ctags支持的语言格式文件生成tags
ctags -R *
- 鼠标放到函数名的地方
g+]
,然后根据弹出提示选择跳转数字
- 跳转到函数定义的地方
ctrl+]
- 回到跳转之前的位置
ctrl+t
- 鼠标放到函数名的地方
strl+w, ]
,新开一个窗口同时查看
安装下载
1.地址 ctags 5.8
2. 解压后
cd ctags-5.8
./configure
make
- 检查是否安装成功
运行
- 在当前目录生成递归,会有一个tags文件生成
ctags -R *
- 跳转到定义函数:
ctrl + ] (没有其他同时操作的按键)
, - 返回原处
ctrl + t
3. txt 编辑处理
- sort 排序
- 按照某一列降序排列
sort -r -t "|" -k 3 -n training/train_ppgs353_bn_lpc.txt > tmp2
-r 顺序
-k 列数
“|”划分符号
示例
原始文本
[ericshenMacPro@root duweixin]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4
想要实现按照第二列数字(:分隔,1开始计数)排列
[ericshenMacPro@root duweixin]$ sort -n -k 2 -t : facebook.txt >>tar.txt
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3
- 一般sort
- 拼接文件
cat 1.txt 2.txt > all.txt
注意输入和输出文件必须不同
- 将文件指定行复制到另外一个文件
sed -n '10,100p' src.txt >>tar.txt src.txt的10-100行cp到tar.txt中
head/tail
- 默认查看前10/后10行内容
head file
tail file
- 指定查看行范围的内容
head -n 20 file #查看前20行的内容
tail -n 20 file # 查看后20行内容
tail +20 file #查看20行以后的所有内容
- 按照字符查看内容
head -c 20 runoob.log # 查看文件前20个字符
tail -c 10 notes.log # 查看文件最后10个字符
4. htop
-
查看CPU内存占用
htop
-
查看进程PID
ps -ef | grep python
,是python命令的进程
-
根据PID kill掉进程
kill -9 PID
比如上述,可以用kill -9 15975
-
杀掉某个用户的所有进程
可以通过top的方式查看username
pkill -u username
- kill
5. grep 命令
grep用于查找文件中包含指定字符串
- 查找xx_name文件中包含字符串‘numpy’的行
grep numpy xx_name
(查找范围在当前目录下)
其中xx_name可以简写,比如查找所有的.py文件grep numpy *.py
,或者以某种字符开始或者结束的文件,以此类推 - 查找时不区分大小写
grep –i "被查找的字符串" 文件名
- 如果想要遍历某个路径查找
grep -r "被查找的字符串" 路径地址
e.g. grep -r numpy /home/usr_name
find命令
用于查找指定路径下文件名包含指定字符串的文件
- 找到/home/usr_name下扩展名是’.c’的文件
find /home/usr_name -name "*.c
- 将目前目录其其下子目录中所有一般文件列出
find . -type f
- 将目前目录及其子目录下所有最近 20 天内更新过的文件列出
find . -ctime -20
- 查找所有“in"扩展名的文件,并且包含“thermcontact”字符
find . -name “*.in” | xargs grep “thermcontact”
7. diff 命令
diff用于逐行比较文件中的不同,并打印输出
-
常用比较方法
diff file_a file_b
比较的结果会间隔打印出来 -
想要将比较的结果并排显示
diff file_a file_b -y -W 50 -y或--side-by-side 以并列的方式显示文件的异同之处。
-W<宽度>或--width<宽度> 在使用-y参数时,指定栏宽。
-W 50 指并排显示的字符长度,可以自行按需变大or缩小
- "|"表示前后2个文件内容有不同
- "<"表示后面文件比前面文件少了1行内容
- ">"表示后面文件比前面文件多了1行内容
8. 文件压缩&解压
解压
- tar.gz格式和
tar zxvf FileName.tar.gz
- .tar.bz2 格式
tar -jxvf xx.tar.bz2
- zip格式
unzip xx.zip
unzip 无法解压缩时,jar xvf xx.zip
- .tar 格式
tar -xf xx.tar
- *.gz 用
gzip -d
解压 - .tar.gz和.tgz 用
tar –xzf
解压 - *.bz2 用
bzip2 -d
或者用bunzip2
解压 - *.Z 用 uncompress 解压
- *.tar.Z 用tar –xZf 解压
- *.rar 用 unrar e解压
- linux是不能够解压rar文件的,一般要转换成其他形式才可以
压缩
- tar.gz 格式
tar zcvf FileName.tar.gz DirName
- zip格式
zip FileName.zip DirName
linux 压缩和解压缩命令gz、tar、zip、bz2
csdn博客
百度经验贴
9. chmod更改文件权限
Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调用。
- 改变文件的权限
chmod a=rwx file
r/w/x 分别表示User、Group、及Other的权限。
-代表无权限,r代表读权限,w代表写权限,x代表执行权限。
-rw------- (600) 只有拥有者有读写权限。
-rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) 只有拥有者有读、写、执行权限。
-rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) 所有用户都有文件读、写权限。
-rwxrwxrwx (777) 所有用户都有读、写、执行权限。
10. tmux使用详解
https://www.cnblogs.com/wangqiguo/p/8905081.html
安装
apt-get install tmux
或者
sudo yum install tmux
tmux新开一个窗口tmux new -s new_name
ctrl+b,d
退出当前窗口,但不关闭
tmux kill-session -t name关闭名字为name的tmux窗口
tmux ls 终端环境查看会话列表
tmux a -t session1
从终端环境进入会话
debug:
can't create socket
解决:sudo chmod 777 /tmp
tmux分屏
划分上下两个窗格
$ tmux split-window
划分左右两个窗格
$ tmux split-window -h
pane 切换(快捷键控制)
ctrl+b, 方向键
pane切换 (命令控制)
光标切换到上/下/左/右方窗格
$ tmux select-pane -U/-D/ -L/-R
关闭分屏
tmux kill-pane
后台挂起
python xx.py &>tmp.log &
打印日志到文件
python xx.py | tee output.log
ubuntu常见错误–Could not get lock /var/lib/dpkg/lock解决
通过终端安装程序sudo apt-get install xxx时出错:
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it
出现这个问题可能是有另外一个程序正在运行,导致资源被锁不可用。而导致资源被锁的原因可能是上次运行安装或更新时没有正常完成,进而出现此状况,解决的办法其实很简单:
在终端中敲入以下两句
rm /var/cache/apt/archives/lock
rm /var/lib/dpkg/lock
tmux 小窗口
- 进入tmux界面后显示的是小窗口
tmux detach -a
,-a
意思是kill掉除了当前界面的所有其他用户
tmux ls
0: 1 windows (created Tue Sep 22 17:19:04 2020) [125x40] (attached) -----多个client在用
1: 1 windows (created Wed Sep 23 17:37:36 2020) [167x41] (attached)
2: 1 windows (created Tue Sep 29 16:19:44 2020) [121x56]
ctrl+b,shift+d
选择detach哪个用户
11. mac 命令行设置
1. 前后按键的快速移动
mac>偏好设置>键盘>时间设置为最短
2. 左|右移动一个单词
Esc b 左移一个单词[back]
Esc f 右移一个单词[forward]
注意:每次按下快捷键,需抬起后再按下快捷键,方可多次移动单词。
3. 光标快速切换到行尾行首
ctrl+a 行首
ctrl+e 行尾
12. openssl的debug
- 查看openssl的版本号
openssl version
- 报错缺失库
libssl.so.10: cannot open shared object file: No such file or directory
首先先看文件夹下有哪些版本
首先进入制定地址,kml的地址是 /usr/lib/x86_64-linux-gnu
ll libssl.so*
ll libcrypto.so*
## 软链接
然后在指定目录下对已有版本进行软链
ln -s /usr/lib64/libssl.so.1.0.0 libssl.so.10
ln -s /usr/lib64/libcrypto.so.1.0.0 libcrypto.so.10
# 软链接数目
find . -type l -name "*.wav" | wc -l
# 移除软链接---如果失效,注意是否加了‘/‘
rm -rf libcrypto.so.10
工程解决:
- 看查找到的依赖库
ldd asrengine/asr_intf_test_phn-out
- 在当前执行目录下新建一个lib文件夹,拷贝其他目录下对应正确的lib文件
- 然后在执行文件中添加查找路径
export LD_LIBRARY_PATH=/home/zhangying13/.jupyter/ppgs_extractor/mandarin_ppgs/asrtest_tts/lib:$LD_LIBRARY_PATH
- 重新执行即可
13. 软链接/硬链接
ln -s src_file tar_file 对指定目录进行软链接
14. shell
shell的多线程
shell笔记
- shell的if/else用法
if [ $name == 'root' ]
then
echo "welcome"
else
echo "hacker"
fi
- 条件语句的与或非关系
#!/bin/sh
aa="August 15, 2012"
bb="August 15, 20122"
cc="123"
dd="123"
-o或
if [ "$aa" = "$bb" -o "$cc" = "$dd" ]; then
echo "yes"
else
echo "no"
fi
-a and ! -a 与,!非
if [ "$aa" != "$bb" -a "$cc" = "$dd" ]; then
echo "yes"
else
echo "no"
fi
shell数组
kill 彻底关闭进程
- kill掉所有的python进程
ps -ef | grep python | grep -v grep | awk '{print $2}' | xargs kill -9
- 进程口很多,选择母进程整体kill
进入htop, ⬆️/⬇️选择到指定的进程, fn+F9,然后‘9'SIGKILL
- kill掉defunct失效进程
- 我们先看看系统中是否存在defunct进程:
ps -A | grep defunct
- 现在,我们来看看这些进程的ID及其父进程ID:
ps -ef | grep defunct | more
- 杀掉父进程ID
kill -9 PPID
- kill掉jobs
jobs
查看正在执行的kill %jobs_id
- 查看某一端口的进程
lsof -i :端口号
- 关闭某一端口的进程
kill -9 $(lsof -i tcp:进程号 -t)
jupyter
- 安装jupyter
pip3 install --upgrade pip
pip3 install jupyter # 报错把pip3改成pip就可以了
本地&服务端传输文件
rz/sz 配置及使用
- iterm 2 rz/sz环境配置
- linux 安装
apt-get install lrzsz
rz
上传本地的文件
sz
下载文件到本地
scp
scp -P 2222 /home/lnmp0.4.tar.gz usrname@hostip:/root/lnmp0.4.tar.gz
scp -P 50562 Downloads/_ProsodyPro.praat.zip usrname@hostip:
scp -P 50562 -r usrname@hostip:/home/liry/ruyun/kaldi/egs/sre10 .
scp -P 50562 usrname@hostip:file_dir local_path
本地上传到服务器
scp local_file remote_username@remote_ip:remote_folder
因为网络问题上传会遇到stalled的报错
scp -C -P 50562 usrname@hostip:file_dir local_path
添加 -C快速下载
非归类操作ls
- 删除路径下多个文件(但是某一个不删除)
ls min_* > lst ------min开头的都写到lst中,然后把想保留的在lst中删除
cat lst | xargs -i rm {} --------删除lst中的文件
awk
- 实现以“|”分隔txt文件,然后再第四个分隔结果前边加“en"
cat training/multi_speaker/multi_speaker_train.txt | awk -F '|' '{printf("%s|%s|%s|en_%s|%s", $1, $2, $3, $4, $5)}'
cat pkl_data/singbase_librosa/singbase_librosa2k-train | awk -F "|" '{printf("%s|%s|/mmu-audio-ssd/tts/zhangying/sing_data/singbase_librosa_norm/mfcc20_from_mel80_wavegan/%s|%s\n", $1, $2, $3, $4)}' >> tmp
-
F awk
-
命令行显示文件行数
cat xx.txt| wc -l
- 批量显示路径下所有文件夹的文件
for f in $(ls); do echo $f; ls $f| wc -l; done
- 批量去除偶数行
for f in $(); do awk "NR%2==1" $f; done
sed
- 删除第N行到第M行
sed -i 'N,Md' filename
- 删除含指定字符的行
sed -i '/指定字符/d' filename
- 打印指定行
sed -n 'N,Mp' filename
- 替换指定字符
// -i 会直接修改原始文件
sed -i 's/原始字符/替换字符/' filename
/ 删除每一行的所有特定字符 “#1”
sed 's/#1//g' prosodylabeling/all_clean.txt
// 输出到终端,可以自行重定向
sed 's/原始字符/替换字符/' filename
// 指定行的英文小写字符替换为 字符+空格
sed -i '1280,3818s/\([a-z]\)/\1 /g' filename