Linux命令备忘
有些命令用得多了,也就记住了,比如cd和ls。有些命令用得没那么多,记不住,拿个小本本记下来,于是有了这篇博客。
压缩和解压
.tar.gz压缩
1 | tar -zcvf compressed.tar.gz to_compress_file_or_folder |
-p
保留文件权限
.tar.gz解压
1 | tar -zxvf compressed.tar.gz |
.zip压缩
1 | zip -r compressed.zip to_compress_folder |
.zip 解压
1 | unzip compressed.zip |
.gz压缩
1 | gzip to_compress_file |
.gz解压
1 | gunzip compressed.gz |
.tar.bz2解压
1 | tar -jxvf compressed.tar.bz2 |
.tar.xz解压
1 | tar -xvJf compressed.tar.xz |
之所以没有压缩为.tar.bz2
和.tar.xz
的命令,是因为这不是命令大全,只记录我用过的命令吧。Linux文件压缩首选.tar.gz
格式,加-p
参数可以保留文件权限信息。如果为了考虑Windows也能很方便打开,可以选择压缩为.zip
格式。
添加环境变量
1 | echo 'export PATH=/home/biochen/bin:$PATH' >> ~/.bashrc |
很多Linux软件提供了编译好的二进制文件,可以在软件的目录输入./software_name
来使用它。如果要想到处可以用,将软件的路劲添加到环境变量即可。
scp
上传
1 | scp -P port local_file remote_username@remote_ip:remote_folder |
下载
1 | scp -P port remote_username@remote_ip:remote_file local_folder |
自己的电脑与远程服务器的上传下载,我一般使用FileZilla,鼠标点几下还是很香的。如果要在两台服务器之间传数据,特别是大一点的数据,下载到自己的电脑,然后上传,就没有那么香了,这时候scp命令就可以派上用场了。
查看进程
1 | ps -elf |grep user_name |
查看进程命令是ps -elf
,会输出一堆进程,后面一般通过管道接grep
,筛选出特定用户或者特定软件的进程。进程没什么好看的哈,主要是为了找出进程的id(第二列的数字),然后用kill
命令杀掉。
1 | kill job_id |
查看网络端口
1 | sudo netstat -tunlp |grep 80 |
或者
1 | sudo lsof -i:80 |
以上命令,找出哪个进程监听80端口,然后等待这个进程的命运一般也是kill
。
修改文件所有者和权限
修改文件的所有者
1 | chown <user> <file|directory> [-R] |
尖括弧<>
括起来的参数是必须要的,方括弧[]
括起来的参数是可选的,竖杠|
两边二选一。-R
递归文件夹下所有文件和文件夹,不然只是修改文件夹本身的所有者。
修改文件的权限
1 | chmod 777 <file|directory> [-R] |
Linux的有着比Windows复杂的文件权限,然而因为权限设置不对会产生很多问题,无脑设置为777(全部权限)是我通常的做法。Linux的文件权限机制的初衷是为了安全,如果我知道该给多少权限时,还会改过来。以下是常用的权限码:
1 | -rw------- (600) 只有拥有者有读写权限 |
查看文件
看文件前10行
1 | top -n 10 file_name |
查看文件后10行
1 | tail -n 10 file_name |
查看文件11-20行
1 | sed -n '11,20p' file_name |
查看文件第21到最后一行
1 | sed -n '21,$p' file_name |
删掉文件前10行
1 | sed -i '1, 10d' file_name |
查看文件有多少行
1 | wc -l file_name |
查看文件有多少列
1 | awk -F '\t' 'NR==1 {print NF}' file_name |
查看表头
1 | less file_name |head -n 1 |tr '\t' '\n' |cat -n |
筛选匹配'abc'
的行
1 | grep 'abc' file_name |
使用-v
反选,即不匹配'abc'
的行;-C 5
显示匹配那行以及上下5行;-A 5
显示匹配那行以及前5行;-B 5
显示匹配那行以及后5行。
筛选第二列的值为'abc'
的行
1 | awk -F'\t' '{if ($2==abc) print $0}' file_name |
-F'\t'
指定分隔符为tab
;将==
换成~
,则为筛选第二列的值包含'abc'
的行;换成!=
或!~
,则为不等于或不包含。
替换文本
1 | sed -e 's/old/new/' filename |
-e
不修改原文件,替换后的文件输出到标准输出,-i
修改原文件。/g
全部替换,否则只替换第一次出现的地方。