跳转到正文
YK Liu
返回

Linux 命令笔记

没有什么特殊想法来写whisp,但是又想写一些东西。

心血来潮,很多linux的命令还不懂,边学边记,做个总结。

命令帮助

$ whatis command

$ whatis -w "comm*"

$ info command

$ man 1 command
$ man <number> command

$ which command

文件和目录

$ mkdir

$ rm

$ rm *log

等价于

$ find ./ -name “*log” -exec rm {}

查看当前目录下文件个数

$ find ./ | wc -l

切换到上一个目录

$ cd -

按时间排序,以列表的方式显示目录项

$ ls -lrt

$ alias lsl='ls -lrt'
$ alias lm='ls -al|more'

给文件编号

$ ls | cat -n

查找文件

$ find ./ -name "core*" | xargs file

递归当前目录及子目录删除所有.o文件;

$ find ./ -name "*.o" -exec rm {} \;

通过索引数据库查询

$ locate string

更新索引数据库

$ updatedb

$ cat -n <filename>

$ head -<number> <filename>
$ head -<number> **

$ diff file1 file2

$ tail -100f <filename>

查询文件内容

$ egrep '03.1\/CO\/AE' TSF_STAT_111130.log.012
$ egrep "string" **

增加脚本可执行权限

$ chmod a+x script

给文件增加别名

硬链接:删除一个,仍能找到

$ ln cc ccAgain

软连接:

$ ln -s cc ccTo

管道 & 重定向

$ ls /unexist && echo succ || echo failed

上面等价于

$ if ls /proc; then echo suss; else echo fail; fi

重定向:

将标准输出和标准错误重定向到同一文件

$ ls proc/*.c > list 2> &l

等价于

$ ls proc/*.c &> list

清空文件

$ :> <filename>

重定向:

$ echo aa >> aa.txt

查找record.log中包含AAA,但不包含BBB的记录的总数:

$ cat -v record.log | grep AAA | grep -v BBB | wc -l

文本处理

Shell处理文本时最常用的工具:

find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk

查找txt和pdf文件:

$ find . \( -name "*.txt" -o -name "*.pdf" \) -print

正则方式查找.txt和pdf:

$ find . -regex ".*\(\.txt|\.pdf\)$"
$ find . -regex ".*\(\.txt|\.pdf\)$" | wc -l

$ -iregex: 忽略大小写的正则

否定参数 ,查找所有非txt文本:

$ find . ! -name "*.txt" -print

指定搜索深度,打印出当前目录的文件(深度为1):

$ find . -maxdepth 1 -type f

磁盘管理

查看磁盘空间

查看磁盘空间

$ df -h

查看当前目录所占空间

$ du -sh

查看当前目录下所有子文件夹排序后的大小:

$ for i in \ls`; do du -sh i;done∣sort‘‘i; done | sort` ` du -sh `ls` | sort`

打包 & 压缩

打包:将多个文件归并到一个文件

$ tar -cvf etc.tar /etc <==仅打包,不压缩!

用tar实现文件夹同步,排除部分文件不同步:

$ tar --exclude '*.svn' -cvf - /path/to/source | ( cd /path/to/target; tar -xf -)

压缩

$ gzip demo.txt

解包

$ tar -xvf demo.tar

对于.tar.gz的文件,先解压缩,再解包

$ gunzip demo.tar.gz

bz2解压:

$ tar jxvf demo.tar.bz2

如果不支持j选项,则用bzip2先解压,再解包:

$ bzip2 -d demo.tar.bz2
$ tar -xvf demo.tar

进程管理

任何进程都与文件有关,会用到lsof工具(list opened files):例举系统中已经被打开的文件。

查询正在进行的进程信息:

$ ps -ef

查询归属于用户test的进程:

$ ps -ef | grep test
$ ps -lu test

查询进程ID:

$ pgrep <ID>

查询进程名中含有php的进程:

$ pgrep -l php

以完整格式显示所有进程:

$ ps -ajx

显示进程信息,并实时更新:

$ top

查看端口3306占用的进程状态:

$ lsof -i:3306

查看用户username的进程所打开的文件

$ lsof -u <username>

查询init进程当前打开的文件:

$ lsof -c init

查询指定的进程ID(23295)打开的文件:

$ lsof -p 23295

查询指定目录mydir下被进程开启的文件(使用+D 递归目录):

$ lsof +d mydir/

终止进程

$ kill <pid>
$ kill -9 <pid>
$ kill %job

进程监控

$ top

?进入交互界面后,输入:

?:Mac上没有这个指令,centos6.5有使用命令pmap,来输出进程内存的状况,可以用来分析线程堆栈;

$ pmap <PID>

将用户username下的所有进程名以av_开头的进程终止:

$ ps -u username | awk '/av_/ {print "kill -9 " $1}' | sh

将用户username下所有进程名中包含HOST的进程终止:

$ ps -ef | grep username | grep HOST | awk '{print $2}' | xargs kill -9;

性能监控

监控CPU

$ sar -u <num1> <num2>
$ sar -q <num1> <num2>

监控内存

$ sar -r <num1> <num2>

查看内存使用量

$ free -m

查看页面交换发生状况

页面发生交换时,服务器的吞吐量会大幅下降;服务器状况不良时,如果怀疑因为内存不足而导致了页面交换的发生,可以使用sar -W这个命令来确认是否发生了大量的交换;

$ sar -W <num1> <num2>

替代:

linux下有 vmstat、Unix系统有prstat

$ vmstat n m

监控变化

$ watch
$ watch -d -n 1 './redis-cli -h 127.0.0.1 -p 9100 info | grep memory'

网络工具

查询服务 & 端口

列出所有端口

$ netstat -a

列出所有tcp端口

$ netstat -at

列出所有监听的服务状态

$ netstat -l

查询端口

$ netstat -antp | grep 6379
$ ps <PID>

路由

查看路由状态

$ route -n

发送Ping包

$ ping <IP>

探测前往地址IP的路由路径:

$ traceroute <IP>

DNS查询,寻找域名domain对应的IP:

$ host domain

反向DNS查询

$ host <IP>

下载

$ wget url

ftp, sftp, lftp, ssh

$ ssh ID@host

文件传输:

$ sftp ID@host

sftp登陆后,可以使用下面的命令进一步操作:

lftp同步文件夹 (rsync)

$ lftp -u user:pass host
$ lftp user@host:~ > mirror -n

将本地localpath指向的文件上传到远程主机的path路径:

$ scp localpath ID@host:path

以ssh协议,遍历下载path路径下的整个文件系统,到本地的localpath:

$ scp -r ID@site:path localpath

用户管理工具

添加用户:

$ useradd -m username

创建密码:

$ passwd username

删除用户:

$ userdel -r username

切换账号:

$ su userB

查看当前用户所属组:

$ groups

将用户加入到组

$ usermod -G groupname username

变更用户所属根组

$ usermod -g groupname username

查看所有用户 & 权限

$ more /etc/passwd
$ more /etc/group

$ chmod userMark(+|-)PermissionsMark

userMark取值:

PermissionsMark取值:

环境变量

bashrc与profile都用于保存用户的环境信息,bashrc用于交互式non-loginshell,而profile用于交互式login shell。

当登入系统获得一个shell进程时,其读取环境设置脚本分为三步:

  1. 首先读入的是全局环境变量设置文件/etc/profile,然后根据其内容读取额外的文档,如/etc/profile.d和/etc/inputrc
  2. 读取当前登录用户Home目录下的文件~/.bash_profile,其次读取~/.bash_login,最后读取~/.profile,这三个文档设定基本上是一样的,读取有优先关系
  3. 读取~/.bashrc

/.profile与/.bashrc的区别:

这两者都具有个性化定制功能

.bashrc: dmp=/data/www/dmp

$ cd $dmp

系统管理 & IPC资源管理

查看Linux系统版本

$ uname -a
$ lsb_release -a

查看Unix

$ more /etc/release

查看CPU

$ cat /proc/cpuinfo

查看内存信息:

$ cat /proc/meminfo

显示内存page大小(以KByte为单位):

$ pagesize

显示架构:

$ arch

设置时区

选择时区信息。命令为:

$ tzselect

?IPCS

显示当前所有的系统资源limit 信息:

$ ulimit -a

性能优化

系统瓶颈

$ top

$ free

如果IO存在性能瓶颈,top工具中的%wa会偏高;

进一步的分析可以使用

$ iostat
$ iostat -d -x -k 1 10

进程分析

$ pstack <PID>
$ strace

性能分析

$ gprof

调试内存泄漏:

$ valgrind

$ Oprofile



上一篇
希腊神话的人物
下一篇
报销发票时想到的一个算法问题