基本操作

关机重启

1
2
3
4
#关机
shutdown -h now
#重启
shutdown -r now

CPU 信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#查看系统内核信息
uname -a
#查看系统内核版本
cat /proc/version
#查看当前用户环境变量
env
cat /proc/cpuinfo
#查看有几个逻辑cpu,包括cpu型号
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
#查看有几颗 cpu,每颗分别是几核
cat /proc/cpuinfo | grep physical | uniq -c
#查看当前 CPU 运行在 32bit 还是 64bit 模式下,如果是运行在 32bit 下也不代表 CPU 不支持 64bit
getconf LONG_BIT
#结果大于 0, 说明支持 64bit 计算,lm 指 long mode, 支持 lm 则是 64bit
cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l

建立软连接
1
ln -s /usr/local/jdk1.8/ jdk

命令重命名
1
2
# 在各个用户的 .bash_profile 中添加重命名配置
alias ll='ls -alF'

查找命令

find

find 是最常见和最强大的查找命令,可以用它找到任何你想找的文件

1
2
3
4
find [目录] [条件] [动作]
#目录:所要搜索的目录及其所有子目录,默认为当前目录
#条件:所要搜索的文件的特征
#动作:对搜索结果进行特定的处理

如果什么参数也不加,find 默认搜索当前目录及其子目录,并且不过滤任何结果返回所有文件
1
2
3
4
5
6
7
8
#搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件
find . -name 'my*'
#搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息
find . -name 'my*' -ls
#搜索当前目录中,所有过去 10 分钟中更新过的普通文件,不加 -type f 参数,则搜索普通文件+特殊文件+目录
find . -type f -mmin -10
#搜索当前目录中,降序排列的前 5 个文件夹
find . -type d | sort -r | head -5

locate

locate 命令其实是find -name的另一种写法,但比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),其中含有本地所有文件信息;
Linux 系统自动创建这个数据库,并且每天自动更新一次,所以使用 locate 命令查不到最新变动过的文件;为了避免这种情况,可以在使用 locate 之前,先使用 updatedb 命令,手动更新数据库。

1
2
3
4
5
6
#搜索etc目录下所有以sh开头的文件。
locate /etc/sh
#搜索用户主目录下,所有以 m 开头的文件
locate ~/m
#搜索用户主目录下,所有以 m 开头的文件,并且忽略大小写
locate -i ~/m

whereis

whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数 -b)、man 说明文件(参数 -m)和源代码文件(参数 -s);如果省略参数,则返回所有信息

1
whereis java

which

which 命令的作用是,在 PATH 变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果;也就是说,使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

1
which grep

type

type 命令其实不能算查找命令,它是用来区分某个命令到底是由 shell 自带的,还是由 shell 外部的独立二进制文件提供的;如果一个命令是外部命令,那么使用 -p 参数,会显示该命令的路径,相当于 which 命令。

1
2
3
4
type cd
type grep
#加上-p 参数后,就相当于 which 命令
type -p grep

查找进程
1
ps aux | grep xxx

文件操作

查看磁盘,文件目录基本信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#查看磁盘挂载情况
mount
#查看磁盘分区信息
df
#查看磁盘分区信息,显示直观大小
df -h
#查看目录及子目录大小
du -H -h
#查看当前目录下文件(夹)占用情况,不会递归
du -sh *
#查看根目录下文件(夹)占用情况
du -sh /*
#查看指定目录下文件(层深为 1)占用情况
du -ah --max-depth=1 /
#查看指定目录下文件(夹)占用情况
du -sh /var/log
#查看指定目录下指定大小的文件(夹)
du -h -t 100M /var/log/

wc 命令
1
2
3
4
5
6
7
8
9
10
11
#查看文件里有多少行
wc -l filename

#看文件里有多少个word
wc -w filename

#文件里最长的那一行是多少个字
wc -L filename

#统计字节数
wc -c

解压缩
1
2
3
4
5
6
tar czvf xxx.tar 压缩目录
zip -r xxx.zip 压缩目录
tar zxvf xxx.tar
#解压到指定文件夹
tar zxvf xxx.tar -C /root/
unzip xxx.zip

用户进程

查询 www 用户所有进程:ps -o nlwp,pid,lwp,args -u www | sort -n
查询 www 用户所有进程并打印:ps -o nlwp,pid,lwp,args -u www | sort -n > 1.txt
查询 www 用户所有进程并关闭:ps -o nlwp,pid,lwp,args -u www | sort -n | awk '{print "kill -9 "$2}'|sh

端口占用

netstat -lntp | grep 10086

进程超限

账户无法登录,报错:“the server refused to start a shell”,查看tail /var/log/secure,看到“error: do_exec_pty: fork: Resource temporarily unavailable”
查看所有用户进程数:ps h -Led -o user | sort | uniq -c | sort -n
查看指定用户进程数:
查看指定用户进程项:ps -o nlwp,pid,lwp,args -u www | sort -n
vim /etc/security/limits.d/20-nproc.conf

1
2
3
*          soft    nproc     4096
www soft nproc 10240
root soft nproc unlimited

vim /etc/security/limits.conf
1
2
3
4
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535

ulimit -a
ulimit -u
ulimit -n

关闭进程

查询进程

1
ps -o nlwp,pid,lwp,args -u www | sort -n

直接杀掉

1
ps -ef | egrep "/usr/sbin/sendmail|/usr/sbin/postdrop" | grep -v grep | awk '{print $2}' | xargs kill -9

PS 查看父进程 PID,发现是 crond;crond 执行脚本时会将脚本输出信息以邮件的形式发送给 crond 用户,postfix 没有正常运行,导致邮件发送失败,造成进程一直卡在那
crond->sendmail->postdrop

1
tail -c 10 /var/log/maillog

1
2
3
crontab -e
#首行添加
MAILTO=""

无法登录

Passwd

1
2
3
4
chattr -ia /etc/passwd
cat /etc/passwd | grep www
#修改 Shell
"/sbin/nologin" > "/bin/bash"