linux常用命令

Linux常用命令记录

压缩解压 tar

常用参数

-c 意为 create,表示创建压缩包
-x 意为 extract,表示解压
-t 表示查看内容
-r 给压缩包追加文件
-u 意为 update,更新压缩包中的文件

注意,上面是一定要五选一,不能一个都不选,也不能同时选俩。但是自选的部分就可以按照需要挑选了,比如:

-z 使用 gzip 属性
-j 使用 bz2 属性
-Z 使用 compress 属性
-v 意为 verbose,显示详细的操作过程
-O 将文件输出到标准输出
-C 指定解压目录

示例

假设我们有很多 .md 文件需要打包,那么可以使用(-c 是创建压缩包)

tar -cf posts.tar *.md

然后我们发现还有一些 .txt 文件也需要打包进去,那么可以使用(-r 是追加文件)

tar -rf posts.tar *.txt

然后我们发现 hello.md 弄错了,修正后需要更新到压缩包中,可以使用(-u 是更新)

tar -uf post.tar hello.md

压缩好了,我们来看看压缩包的内容,可以使用(-t 是列出文件内容)

tar -tf posts.tar

解压,可以使用(-x 是解压)

tar -xf posts.tar

解压到指定位置,可以使用(-C 是解压到指定目录 注意指定的目录必须存在否则会报错)

tar -xf posts.tar -C /data

tar.gz 相关(-c 压缩 -x解压)

tar -czf posts.tar.gz *.md
tar -xzf posts.tar.gz

tar.bz2 相关(-c 压缩 -x解压)

tar -cjf posts.tar.bz2 *.md
tar -xjf posts.tar.bz2

tar.Z 相关(-c 压缩 -x解压)

tar -cZf posts.tar.Z *.md
tar -xZf posts.tar.Z

总结

遇到不同类型的文件,请用不同的参数来应对:

*.tar -> tar -xf
*.tar.gz -> tar -xzf
*.tar.bz2 -> tar -xjf
*.tar.Z -> tar -xZf
*.gz -> gzip -d
*.rar -> unrar e
*.zip -> unzip

空间占用 du

很多时候磁盘被写满了是各种奇怪错误的源头,所以如何快速找到问题所在就很重要了,

# 显示当前文件下 Top 10 空间占用的文件/目录,
# s 表示不显示每个子目录或文件的大小
# h 表示用更加自然的方式显示(比如 K/M/G 这样)
du -sh * | sort -nr | head

系统状态 top

了解系统状态一般少不了 top命令,虽然基本上不需要做任何操作,但是还是有一些可以自定义的内容的,比如

# 进入系统状态显示后,具体值代表的意思是
# PR    进程优先级,越小优先级越高
# VIRT  占用的虚拟内存
# RES   占用的物理内存
# SHR   占用的共享内存
# S     进程状态(S - 休眠,R - 正在运行,Z - 僵死状态,N - 优先级为负数)
# TIME+ 进程启动后占用的总 CPU 时间

# 可以按照不同的指标排序显示,按对应键即可
# P     按照 CPU 使用率排序
# T     按照 MITE+ 排序
# M     按内存使用占比排序

查看某用户的进程

top -u root

查看进程内存分布(12345 是进程号)

pmap -d 12345

按照内存排序,这里的 grep 可以过滤特定的用户

ps -e -o 'user,uid,pid,pcpu,rsz,vsz,stime,comm,cmd' | grep root | sort -nrk5

查找 find

在命令行界面中进行查找是每个需要在服务器上执行操作的同学都必备的技能,这里用实例来说明常见的实用用法

找出七天前的文件

# / 表示从根目录中查找
# -type f 表示找出系统普通文件,不包含目录
# -mtime +n 表示寻找 n 天前的数据
# -print 打印文件名称
find / -type f -mtime +7 -print

找出并删除七天前的文件

# -exec 表示后面执行系统命令
# {} 只有该符号能跟在命令你后面
# \; 结束符号
find /Hexo -type f -mtime +7 -print -exec rm -f {} \;
find /Hexo -type f -mtime +7 -print | xargs rm -f

其他示例

# 使用管道和 xargs = -exec
# 查找 /var 下最大的十个文件
find /var -type f -ls | sort -k 7 -r -n | head

# 查找 /var/log 下大于 5GB 的文件
find /var/log/ -type f -size +5120M -exec ls -lh {} \;

# 找出今天所有文件并将它们拷贝到另一个目录
find /home/wdxtub/ -ctime 0 -print -exec cp {} /mnt/backup/{} \;

远程登录 ssh

ssh -vvv username@ip ssh 的 debug 模式
ssh -i key.pem username@ip 用 pem key 登录 ssh

奇技

这里是一些比较零碎的命令行技巧

openssl产生随机的十六进制数,n 是字符数

openssl rand -hex n

在当前 shell 里执行一个文件里的命令

source /path/to/filename

截取变量的前五个字符

${variable:0:5}

用 wget 抓取完整的网站目录结构,存放到本地目录中

wget -r --no-parent --reject "index.html*" http://hostname/ -P /home/user/dirs 

一次创建多个目录

mkdir -p /home/wdxtub/{test0,test1,test2}

测试硬盘写入速度

dd if=/dev/zero of=/tmp/output.img bs=8k count=256k; rm -rf /tmp/output.img 

测试硬盘读取速度

hdparm -Tt /dev/sda

获取文本的 md5

echo -n "test" | md5sum

获取 HTTP 头信息

curl -I http://wdxtub.com

显示所有 tcp4 监听端口

netstat -tln4 | awk '{print $4}' | cut -f2 -d: | grep -o '[0-9]*' 

查看命令的运行时间

time command

查看所有的环境变量

export

文件内容对比

cmp file1 file2

内容前面会显示行号

cat -n file

查看 22 端口现在运行的程序

lsof -i:22

进程现在打开的文件

lsof -c abc 显示 abc

看进程号为 12 的进程打开了哪些文件

lsof -p 12

设置默认网关(临时)

route add default gw 192.168.1.4

设置默认网关(永久)

echo "GATEWAY=192.168.0.1" >>/etc/sysconfig/network

增加swap分区

swapfile="/home/swapfile"
dd if=/dev/zero of=$swapfile bs=1M count=8192
/sbin/mkswap $swapfile
chown root:root $swapfile
chmod 600 $swapfile
/sbin/swapon $swapfile
echo "$swapfile          swap                    swap    defaults        0 0" >>/etc/fstab

本文内容来自小士刀