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
2
zip -r compressed.zip to_compress_folder
zip compressed.zip to_compress_file

.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
2
echo 'export PATH=/home/biochen/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

很多Linux软件提供了编译好的二进制文件,可以在软件的目录输入./software_name来使用它。如果要想到处可以用,将软件的路劲添加到环境变量即可。

scp

上传

1
2
scp -P port local_file [email protected]_ip:remote_folder
scp -P port -r local_folder [email protected]_ip:remote_folder

下载

1
2
scp -P port [email protected]_ip:remote_file local_folder
scp -P port -r [email protected]_ip:remote_folder local_folder

自己的电脑与远程服务器的上传下载,我一般使用FileZilla,鼠标点几下还是很香的。如果要在两台服务器之间传数据,特别是大一点的数据,下载到自己的电脑,然后上传,就没有那么香了,这时候scp命令就可以派上用场了。

查看进程

1
2
ps -elf |grep user_name
ps -elf |grep software_name

查看进程命令是ps -elf,会输出一堆进程,后面一般通过管道接grep,筛选出特定用户或者特定软件的进程。进程没什么好看的哈,主要是为了找出进程的id(第二列的数字),然后用kill命令杀掉。

1
kill job_id

查看网络端口

1
sudo netstat -tunlp |grep 80

或者

1
sudo lsof -i:80

以上命令,找出哪个进程监听80端口,然后等待这个进程的命运一般也是kill

修改文件所有者和权限

修改文件的所有者

1
2
chown <user> <file|directory> [-R]
chgrp <group> <file|directory> [-R]

尖括弧<>括起来的参数是必须要的,方括弧[]括起来的参数是可选的,竖杠|两边二选一。-R递归文件夹下所有文件和文件夹,不然只是修改文件夹本身的所有者。

修改文件的权限

1
chmod 777 <file|directory> [-R]

Linux的有着比Windows复杂的文件权限,然而因为权限设置不对会产生很多问题,无脑设置为777(全部权限)是我通常的做法。Linux的文件权限机制的初衷是为了安全,如果我知道该给多少权限时,还会改过来。以下是常用的权限码:

1
2
3
4
5
6
7
-rw------- (600)  只有拥有者有读写权限
-rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限
-rwx------ (700) 只有拥有者有读、写、执行权限
-rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限
-rwx--x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) 所有用户都有文件读、写权限。
-rwxrwxrwx (777) 所有用户都有读、写、执行权限。

查看文件

看文件前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
2
3
sed -e 's/old/new/' filename
sed -i 's/old/new/' filename
sed -i 's/old/new/g' filename

-e不修改原文件,替换后的文件输出到标准输出,-i修改原文件。/g全部替换,否则只替换第一次出现的地方。

未完待续…