Linux经常使用命令及shell技巧

这里列出一些我的在工做中常使用的各类linux命令,每个不详细讲参数,只写常常用的参数。但愿快速得到在linux命令行工做的能力的朋友能够看看。本人一直觉的,不使用linux 图形界面,以xshell等ssh客户端使用基础版linux才是学习linux命令的正确姿式。若是想深刻每个命令学习,可使用man手册,或者推荐一个博客:天天一个linux指令系列https://www.cnblogs.com/peida/category/309012.html。php

文件


scp
远程文件复制命令,通常用法
scp -P port -r src_file remote_user2@remotehost1:dest1  remote_user2@remotehost2:dest2
其中
-P 指定端口
-r  表示递归cp整个目录
后面的多个远程主机地址表示 能够向多台机器复制
例如
scp -P 360 -r /data/release/movesun.com root@10.135.25.177:/data/release/movesun.com 

rsync
文件差别化同步,只复制修改过的文件,效率高。通常用法
rsync -avz src dest
其中
-a 表示打包压缩传输
-v 详细输出过程
-z 对备份的文件传输时进行压缩
src  源文件 ,能够是远程主机文件
dest 目标文件,能够是远程主机文件
例如
rsync -az /data/init_dirs/cd_root  root@10.135.25.177:/data/cd_root

tar
文件压缩打包,准确说 tar包只是打包工具,并不压缩,结合gzip等程序对tar包进一步压缩。通常用法
tar zcvf dest.tar.gz srcfiles
其中
z 表示 使用gip压缩或解压,还有别的格式如biz 则用字母b
c 表示压缩
x 表示解压
v 输出过程
f 指定压缩文件名
-C 指定解压目录
例如
tar zcvf movesun.tar.gz movesun.com
tar zxvf movesun.tar.gz -C /data/release/movesun.com

ln
创建文件连接,分软连接和硬连接,软连接相似windows快捷方式, 软连接自己占inode和空间,而硬连接并不新增inode。通常用法
ln -s -b src_file dest_link
其中
-s 表示软连接
-b 表示覆盖
例如
ln -s -b /data/docker /var/lib/docker

du
查看文件占用空间,经常使用来定位大文件,大目录,清理磁盘空间。在windows上若是安装过cygwin或者git bash的能够用du程序查看C盘空间。通常格式
du -sh * 
其中
-s 表示只显示统计
-h 表示存储单位K,M,G自适应显示
* 表示当前目录下全部文件或者目录
例如在windows 查看C盘空间占用

chmodhtml

修改文件权限。linux中文件权限以9位字符表示,例如java

-rw-r--r--node

其中第一个-不是权限,表示文件类型,后面9个字符表示权限
前三位表示文件所属用户具备的权限
中三位表示文件所属用户组具备的权限
后三位表示其余用户具备的权限
其中每三位分别是rwx ,r表示读,权值4,w表示写,权值为2,x表示执行权,权值为1。chmod能够以权值的形式修改文件权限,例如
chmod -R 777 /data/release/movesun.com/app/storage
其中
-R表示递归处理目录
777 表示rwxrwxrwx,也就是任意用户都具备读、写、执行权限

chown/chgrp
修改文件所属用户和用户组,在master worker类型的多进程程序,如 nginx,php-fpm等,worker通常不是以root用户运行,这时去访问一些没有权限的目录,经常会有异常,好比http 403错误。这时就能够考虑提升目录权限,或者将目录全部者修改成进程所属用户。
好比
修改文件所属用户
chown -R nginx /data/release/movesun.com
修改文件所属用户组
chgrp -R nginx /data/release/movesun.com
其中  -R表示递归处理

进程

killall/kill
用来中止进程
killall按进程名称查杀进程, 进程名并不是咱们经常使用ps命令看到的最后那列COMMAND那一列,而应该经过/proc/pid/status 中的Name字段查看。killall按照这里的进程名取得进程id查杀。若是父进程名与子进程名是同样的,则会一并中止掉进程。不难发现,nginx,php-fpm的master进程和worker进程都是一样的名字,因此能够经过killall nginx查杀全部nginx master和worker进程。 在c或c++中进程名能够经过修改argv[0]进行修改
而kill一般用来中止指定进程,或者向其发送各类信号,参数为进程ID,通常用9(KILL)信号杀掉进程,如kill -9 5162。能够结合ps grep awk等获取到要查杀的进程id。

lsof
用来查看系统打开的文件。经常使用来定位进程的文件位置、查看进程打开的文件句柄。由于 网络链接实际也是占用文件句柄,因此也能够经过lsof看进程打开的网络链接。通常使用以下
lsof -p 4304 
其中4304是进程id。此命令查看该进程打开的文件。
lsof -i:80 
其中80为网络端口。此命令用来查看哪些进程占用80端口
lsof /usr/lib64/libstdc++.so.6.0.19
查看哪些进程打开了/usr/lib64/libstdc++.so.6.0.19文件

ps
用来显示瞬时的进程状态,或者是进程快照。经常使用来定位进程是否存在、获取进程id、获取父进程id或者进程树、查看进程建立的线程等。由于 ps支持多种形式的参数风格,因此带-与不带-会有很大区别,甚至不能执行。通常使用以下:
ps axu
显示全部进程,并包含进程所属用户,CPU,MEM,耗费的CPU时间等列
ps -ef
显示全部进程,显示的列要比axu少
ps -axjf
显示进程树,相似于pstree

top
用来查看进程资源占用。linux top有点相似于windows任务管理器。经常使用来查看哪些进程占CPU、内存较高,负载,多核状态等。通常用法以下
按内存占比排序
运行top以后,按shift+m之内存占用排序,再按字母e,切换存储单位显示
查看多核心状态
运行top以后按1
查看全部java进程
top $(jps | awk '{print $1}' | sed 's/^/-p/')

strace
用来跟踪一个进程发出的系统调用。常常用来定位程序bug,定位系统卡慢缘由,好比当系统磁盘IO太高时,由strace能够很容易发现进程会卡在io操做的系统调用上。通常使用方法以下。
starce command
strace ./get_example,会打印出运行此程序产生的每个系统调用

pstack
用来查看一个运行中进程的堆栈。此工具 实际是一个shell脚本,能够看到其使用gdb查看进程堆栈。通常使用方法以下
pstack 23560  其中23560是进程id

网络

netstat
用来显示网络信息。经常使用来查看机器监听的端口,创建的网络链接,显示路由信息等等。通常用法以下
netstat -ntlp 
查看全部监听的tcp端口及其进程,其中
n表示尽可能显示数字
t表示只显示tcp
l表示只显示处于监听状态的
p表示显示哪一个程序在监听
netstat -lt
显示监听状态的tcp链接
nestat -n 
显示全部打开的网络链接

ss
用来查看socket统计信息。能够实现跟netstat同样的功能,并且更强大。通常用法
ss -t -a
显示全部tcp链接
ss -l
显示打开的全部端口,包括本地与外部通讯的源端口。

telnet
telnet客户端是基于应用层telnet协议的远程登陆程序。本人通常用来检测端口是否畅通。其实也就是 判断可否创建tcp链接,至于链接后的应用层通讯协议不一致,是不用考虑的问题,所以也能够用别的网络命令来检测端口是否畅通,不过已经用惯了telnet。使用如
telnet 10.135.25.177 3306
而用别的网络客户端程序也能够测试
端口畅通
ssh 127.0.0.1 -p 3306
ssh_exchange_identification: Connection closed by remote host
端口不通
ssh 127.0.0.1 -p 12 
ssh: connect to host 127.0.0.1 port 12: Connection refused

 
 
未完待续......
相关文章
相关标签/搜索