查看linux版本
lsb_release -a
-bash-4.1$ lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.7 (Final)
Release: 6.7
Codename: Final
cat /proc/version
得到:
Linux version 2.6.32-573.18.1.el6.toav2.x86_64 (root@localhost.localdomain) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) ) #1 SMP Sun Jul 17 12:44:29 CST 2016
查看硬件信息
内存:free -m
硬盘:df -h
cpu: lscpu 或 cat /proc/cpuinfo
显卡:nvidia-smi
vim相关
vimtutor 现场操作
跳行
1 调到首行和尾行
命令模式下gg 首行,G尾行
2 跳转到第250
命令模式输入250gg, 或者:250回车
删除
2 删除第20~30行
命令模式输入 20,30d
3从当前行开始删除10行
10dd
dw 删除一个词
正则替换
4 在10~20 行首添加 # 号注释
:10,20 s/^/#/g
:10,$ s/^/#/g 第10行到最后一行
%s/txt/txt\r/g 在所有的txt后面增加一个换行(\r)
4.1 在所有行中把from替换为to
:%s/from/to/g
:%s/^ef4.*[0-9].*|//g 支持正则,把行首为 ef4*一个数字*| 的字符替换为空。
:%s/t\([aou]\)g/g\1t/g 把tag tog tug 替换成gat got gut。用括号\(\)分组,后面用\1表示括号中的内容
:%s/t\([aou]\)g/g\1t/g 把tag tog tug 替换成gat got gut。用括号\(\)分组,后面用\1表示括号中的内容
空白字符行换成空行::%s/^\s*$//g
\s代表空白字符
vim正则表达式:http://tanqisen.github.io/blog/2013/01/13/vim-search-replace-regex/
5 复制粘贴vim打开的特定文本
按住ctrl,用光标选定一些行,y,光标移动到需要复制的地方,p
6 查看正在编辑的文件名
:ls
ctrl+g
7 撤销与重做
取消 u
重做 ctrl r
8 块操作
ctrl+v进入“可视块”模式,光标选取要操作的文本块,按d删除文本块,
删除空行:
:g/^$/d
:g/patten/cmd 按行找到patten,然后按cmd操作该行
删除文章中的空行
:g/^s*$/d
简单解释一下:
g :全区命令
/ :分隔符
^s*$ :匹配空行,其中^表示行首,s表示空字符,包括空格和制表符,*重复0到n个前面的字符,$表示行尾。连起来就是匹配只有空字符的行,也就是空行。
/d :删除该行
用set fileencoding命令得到文件编码,set fileencoding=utf-8转换文件编码
:s/[\uFEFF]//g vim删掉<feff>符号
显示不可见字符:
:set invlist
:set list
恢复 set nolist
缩进8变4
vim ~/.vimrc
set shiftwidth=4
set softtabstop=4
source ~/.vimrc
功能说明
set shiftwidth=4 (表示每一级缩进的长度)
set softtabstop=4 (表示在编辑模式的时候按退格键的时候退回缩进的长度)
ctags
ctags是一个vim用来查代码的好用的工具
yum install ctags
使用前首先需要生成tags,在源码所在目录执行 ctags -R *
然后执行 vim -t main
这样就会找到当前源码的main的出处,并跳转到那里
在打开vim后,输入 :ta main 跳转到main的出处
编码问题:
在~/.bashrc中,有定义解码顺序
在vim打开一个文本后
:set fileencodings
fileencodings=ucs-bom,utf-8,cp936
这个说明vim会按照会依次尝试以ucs-bom,utf-8,cp936的方式解码,如果某种方式解码成功,则认为是对于的编码方式。
:set encoding
查看当前文件编码的方式。
以下参考:https://forum.ubuntu.com.cn/viewtopic.php?p=2498184
分屏:(参考:https://www.cnblogs.com/bugutian/p/4498326.html)
split(水平)与vsplit(竖直)
vim a.cpp 打开一个文件
:split b.cpp 水平打开文件b.cpp
:split c.cpp 同屏打开文件c.cpp
然后ctrl + w + w就可以在各窗口切换,也可以ctrl + w + h左j下k上l右 进行窗口切换
:close 可以关闭窗口,quit退出窗口
使用分屏的好处是:可以同时查看多文件代码并方便地拷贝复制
:! 命令
挑出vim执行命令,然后任何按键就可以回到vim
set nowrap 不折叠
ctags:支持多语言,tab键长度?windows下的tab贴到linux有问题,长度不一样
ctrl+o 上一次跳转
shift+*选中变量、查找?N上搜、n下搜,调试跳转
shift+*,shift+#,上下查找;shift+%,查找括号;
就能使用Ctrl+] 或 g Ctrl+] 来实现跳转了。g Ctrl+]可以跨目录,当有多个定义时会提示,并使用数字标示,输入数字后回车可跳转到相应定义处。
awk
awk命令:
awk对列求和:
ls score/|awk -F '---' '{sum+=$1};END{print sum}'
对ori.txt进行排序,按照每行长度排序,给出长度在最前面
gawk '{print length($0),$0}' ori.txt | sort -n -k 1 >post.txt
不给出长度在最前,保证----不存在train.txt中
awk '{print length($0),"----"$0}' train.txt | sort -n -k 1 | awk -F '----' '{print $2}'
计算input.txt每行空格隔开的字符串数量(NF 当前记录字段个数)
awk -F ' ' '{print NF}' input.txt
打印文件score.txt中第二列>0.8的行
awk ' $2 > 0.8 {print $0}' score.txt
根据文件名生成听测表:
ls score/|awk -F"---" '{print $2 "," $1 ",=HYPERLINK(\"output\/" $2 ".wav\")" }'|sort > listen_table_$1.csv
awk搜索含有“ ng”的行:
awk '/ ng/' training/train.txt_new.txt
挑选不包含“ ng”串的行(取反):
awk '!/ xx/' tmp
awk搜索含有“ ng”的行,对满足要求的行打印分列后的第一列:
awk '/ ng/ {print $1}' training/train.txt_new.txt
把1.txt文件的行删掉所有数字,然后打印第2/3字段、并且排序+去重。gsub(/正则串/,"替换结果")
cat 1.txt | awk -F'\t' '{gsub(/[0-9]/,"");print "\""$2" "$3"\","}'|sort|uniq >3.1
find
删除查找到的所有文件:
find -name searcher.h|xargs rm
递归查找当前目录下的searcher.h文件,并且删除。 | xargs为管道传参
find -name "*.cpp"|xargs grep "extern \""
递归查找当前目录下的*.cpp文件,并且在找到的cpp文件中寻找 extern "。
find -regex "^.*step-[0-9][0-9][04268]000-align\.png"
按照正则表达式查找包含 “step2个数字一个偶数000-align.png”的文件
find . -name ".svn" -type d
递归查找当前目录(find后面直接跟查找目录,再跟-name一类的参数)下的 .svn目录
find -iname "*.png" -o -iname "*.bmp"
查找png文件 或者bmp文件,且不区分大小写。 -iname 不区分大小写, -o 逻辑或
查找当前目录下的某类文件(.wav)并转移到某处./wave
--用-I {} 指示一个替换字符串 ref http://man.linuxde.net/xargs
find -name *.wav|xargs -I {} mv {} ./wave/
find -name "*.txt"|xargs -I {} cat {} >> df18.txt 把所有的txt合并起来
:s/[\uFEFF]//g vim删掉<feff>符号
查看历史命令:
history
查看目录占用磁盘大小 du(disk use)
du
du -a 查看目录及文件占用大小
du -m -a 以M byte为单位显示所有文件大小
du -h --max-depth=2 以查看当前目录下个目录的大小,递归查看的目录层级设为2
查看磁盘使用情况:
df -h
查看文件的头部尾部100行,查看文件行数
head -n 100 dataprocess.sql
tail -n 100 dataprocess.sql
wc -l dataprocess.sql
定时刷新查看文件,比如tail用tailf、head用headf
tailf -n 100 dataprocess.sql
tail -f 1 train.log 每隔1s中显示一下 train.log的内容。
命令帮助,如ps命令:
man ps
ps --help
跳转到上次的目录
cd -
远程拷贝文件,本地复制到远程
scp
scp fileSrc remote_username@remote_ip: remote_folder
scp fileSrc remote_username@remote_ip:remoter_file
远程到本机
scp huangzhiqiang03@168.182.44.20:beijing_dum.sql hzq_dum.sql
远程机器168.182.44.20的huangzhiqiang03用户的主目录下有个文件hzq_dum.sql,把它转移到本地来。
scp -rp huangzhiqiang03@168.182.44.20:/data1/hzq ./
把远程机器168.182.44.20的huangzhiqiang03用户的/data1/hzq目录拷贝到本机当前目录下,r表示递归,p表示备份模式。
如果不是默认的22端口(scp走的ssh端口,需要指定端口号 如8022端口号)
scp -r -P 8022 ef4_6k_files/ef4_6k hzq@10.91.40.132:/home/hzq/
同步:
rsync -ravPu src_path hzq@192.168.1.21dst_path
ps
查看进程 process status
ps -u root 显示root用户启动的进程
ps -ef 显示所有进程,连同命令行
ps -ef|grep ssh 显示特定进程,如保函ssh名字的进程
ps aux 列出当前正在内存当中的程序
ps aux>ps001.txt 将ps aux的结果转存到文件ps001.txt中
ps -p 33101 -o lstart 查看进程号为33101的进程的启动时间
重命名:
mv oldfile newfile
获取linux下url形式的文件:
curl -O "http://195.188.28.57:8081/fileserver?method=getfile&hzqid=B1DAEBA416DAA0F6378A21B33D5"
建立多层目录:
mkdir -p process-center/hzq
删除output目录及内部所有内容,r表示递归删除,f表示强制删除,删除的时候不提示信息。
rm -r output
rm -rf framework
压缩解压:
压缩:
tar -zcvf db.gz /home/test/user/hzq/outdir/*.db
zip jcdw.zip .ttf*
zip -r cxl.zip ./*
解压tar包特定文件:
tar -tvf df18_20k.tar|grep df18_20k.txt
-rw-r--r-- zhanghuisonach/10000 3147220 2016-10-17 17:29 df18_20k/prosodylabeling/df18_20k.txt
tar -xvf df18_20k.tardf18_20k/prosodylabeling/df18_20k.txt
将当前目录下的所有文件和文件夹全部压缩成cxl.zip文件,-r表示递归压缩子目录下所有文件
解压:
tar -zxvf processworker.tar.gz
tar -jxvf processworker.tar.bz2
unzip jcdw.zip
显示详细文件信息
ls -l 或者用 ll
查找进程,进程信息中(执行路径、程序名称)包含”processworker_check“
按时间查看:
1) ls -lt 时间最近的在前面
2) ls -ltr 时间从前到后
ps -ef|grep processworker_check
杀掉(-9强制)某个进程
kill 进程号
kill -9 进程号
暂停与恢复某个进程
kill -STOP 进程号
kill -CONT 进程号
文件上传到linux
rz 默认文本形式传输
rz -be 二进制传输
文件从linux到本地下载
sz 文件名
查找文件,在当前目录及其子目录下 名称包含860439的文件或目录:
find ./ -name "*860439*"
在当前目录及其子目录下的文件中查找vocoder字符串的
grep -r "vocoder"
搜索cpp文件并在搜索结果中查找vocoder字符串的
find -name "*.cpp"|xargs grep "vocoder"
更多参考:http://blog.chinaunix.net/uid-25266990-id-199887.html
文件转码:iconv
在vim下用set fileencoding命令得到文件编码,用iconv将文件ef4.txt由latin1转码为utf-8形式到文件ef4_utf8.txt中
iconv -f latin1 -t utf-8 ef4.txt > ef4_utf8.txt
iconv -c -f utf-16le -t cp936 input/bug.txt > bug_gbk.txt (加-c忽略无效字符)
查看环境变量:
export
gdb查看core文件:
gdb exe core.67842
core.67842为core文件,exe为core对应的可执行文件
跟踪调试正在运行的进程 44179为进程号。
gdb exe 44179
拷贝目录:(output/output为原目录,hzq为目标目录)
cp -r output/output/ hzq/
拷贝目录加覆盖提示 h2的内容考入h1中:
cp -ri h2/* h1/
重定向输出 > ,文件尾部附加>>:
pg_dump -h120.199.54.43 -Upg -p8900 jcdw_hzq -tpoi > dump_poi.sql
cat in.sh > in2.sh
./exe > output.txt
ps >> output.txt
下载文件到本地:
sed 字符串替换:
sed -i “s/bm201505221419551075775969_copy_rw/hzq/g” haidian.sql
在haidian.sql文件中进行字符串替换
grep原字符串 -rl ./|xargs sed -i "s/原字符串/新字符串/g"
在当前目录下的文件中进行字符串的查找替换
curl 为文件传输工具
curl -o a.html http://www.baidu.com 从http://www.baidu.com 抓取页面内容到一个文件中,下载百度主页并保存为 网页a.html
curl -O "http://142.118.28.57:8081/fileserver?method=getfile&hzqid=OOOOOXXXXXXFFFFFB33D5" 下载特定ip的特定文件
参考:http://www.cnblogs.com/gbyukg/p/3326825.html
linux 查看cpu、内存等信息:
查看文本文件:
vim haidian.sql ---slow
cat haidian.sql 从前显示,fast
tac haidian.sql 从后面显示,fast
head -n 20 haidian.sql 显示文件的前20行,fast
tail -n 20 haidian.sql 显示文件的后20行,fast
top
参考:http://www.cnblogs.com/Wen-Man/archive/2011/04/04/2373771.html
shell小脚本:
find
#!/bin/sh str="*$1*" find ./ -name $str res=$(find ./ -name $str) vim $res |
./find 日志号
以前试的一些语法 http://user.qzone.qq.com/459125872/blog/1342751492
ldd 打印可执行文档依赖的共享库文件。
是glibc的一部分`
ldd multi_thread_test
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb71ea11000)
libcrypto.so.10 => not found
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb71e68e000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb71e385000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb71e16f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb71dda5000)
/lib64/ld-linux-x86-64.so.2 (0x0000564b3820d000)
查看一个进程的cpu、内存使用情况:
top -p 进程号
查看MD5值
md5sum filename
window下用certutil -hashfile filename MD5
树形显示dirname目录结构
tree dirname
树形显示,显示深度为2
tree -L 2 dirname
以前试的一些语法 http://user.qzone.qq.com/459125872/blog/1342751492