Linux 系统 Shell 命令
# 基本操作
关机重启
#关机
shutdown -h now
#重启
shutdown -r now
2
3
4
CPU 信息
#查看系统内核信息
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
建立软连接
ln -s /usr/local/jdk1.8/ jdk
命令重命名
# 在各个用户的 .bash_profile 中添加重命名配置
alias ll='ls -alF'
2
# 查找命令
# find
find 是最常见和最强大的查找命令,可以用它找到任何你想找的文件
find [目录] [条件] [动作]
#目录:所要搜索的目录及其所有子目录,默认为当前目录
#条件:所要搜索的文件的特征
#动作:对搜索结果进行特定的处理
2
3
4
如果什么参数也不加,find 默认搜索当前目录及其子目录,并且不过滤任何结果返回所有文件
#搜索当前目录(含子目录,以下同)中,所有文件名以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
2
3
4
5
6
7
8
# locate
locate 命令其实是find -name
的另一种写法,但比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),其中含有本地所有文件信息;
Linux 系统自动创建这个数据库,并且每天自动更新一次,所以使用 locate 命令查不到最新变动过的文件;为了避免这种情况,可以在使用 locate 之前,先使用 updatedb 命令,手动更新数据库。
#搜索etc目录下所有以sh开头的文件。
locate /etc/sh
#搜索用户主目录下,所有以 m 开头的文件
locate ~/m
#搜索用户主目录下,所有以 m 开头的文件,并且忽略大小写
locate -i ~/m
2
3
4
5
6
# whereis
whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数 -b)、man 说明文件(参数 -m)和源代码文件(参数 -s);如果省略参数,则返回所有信息
whereis java
# which
which 命令的作用是,在 PATH 变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果;也就是说,使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
which grep
# type
type 命令其实不能算查找命令,它是用来区分某个命令到底是由 shell 自带的,还是由 shell 外部的独立二进制文件提供的;如果一个命令是外部命令,那么使用 -p 参数,会显示该命令的路径,相当于 which 命令。
type cd
type grep
#加上-p 参数后,就相当于 which 命令
type -p grep
2
3
4
查找进程
ps aux | grep xxx
# 文件操作
查看磁盘,文件目录基本信息
#查看磁盘挂载情况
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/
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
wc 命令
#查看文件里有多少行
wc -l filename
#看文件里有多少个word
wc -w filename
#文件里最长的那一行是多少个字
wc -L filename
#统计字节数
wc -c
2
3
4
5
6
7
8
9
10
11
解压缩
tar czvf xxx.tar 压缩目录
zip -r xxx.zip 压缩目录
tar zxvf xxx.tar
#解压到指定文件夹
tar zxvf xxx.tar -C /root/
unzip xxx.zip
2
3
4
5
6
# 用户进程
查询 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
* soft nproc 4096
www soft nproc 10240
root soft nproc unlimited
2
3
vim /etc/security/limits.conf
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
2
3
4
ulimit -a ulimit -u ulimit -n
# 关闭进程
# 查询进程
ps -o nlwp,pid,lwp,args -u www | sort -n
# 直接杀掉
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
tail -c 10 /var/log/maillog
crontab -e
#首行添加
MAILTO=""
2
3
# 无法登录
# Passwd
chattr -ia /etc/passwd
cat /etc/passwd | grep www
#修改 Shell
"/sbin/nologin" > "/bin/bash"
2
3
4