作为程序员,尤其是从事互联网相关的程序员,纯编写代码的时代应该早就过去了。现在的程序员大多数都需要上能代码飞天遁地,下能运维火星四溅。老四其实没有系统的学习过 Linux,但是以后也会写关于 Linux 的很多文章,从基础写起,到时候不求写到大神级别,但也要熟能生巧。本文持续更新老四平时在 Linux 中经常用到的命令,做一个笔记的同时也希望能方便您在忽然忘记的时候翻看一下。
1.当老总、经理给了你一台服务器的时候,这个时候你应该看看是哪个发行版,版本号是什么,这是相当有必要的,顺便再看看物理 CPU 个数、核数、逻辑 CPU 个数等数据,如果你是一个程序员,很多容器和开源框架的某些属性配置都要根据 CPU 的个数来进行调节。
查看 Linux 内核版本:
- uname -a(只显示 Linux 内核版本号)
- cat /proc/version(Linux 内核版本号、gcc 编译器版本号、Red Hat 版本号)
查看 Linux 系统版本:
- lsb_release -a(流出版本所有信息,包括你想看到如:CentOS 6.5、CentOS 73)
- cat /etc/redhat-release(该命令只适合红帽(Redhat)系列的 Linux,并且显示系统版本)
- cat /etc/issue(你可以忽略它基本不显示什么,CentOS 7 中就显示 \s 了,不显示系统版本了)
查看物理 CPU 个数、核数、逻辑 CPU 个数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l # 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu cores"| uniq # 查看逻辑CPU的个数 cat /proc/cpuinfo| grep "processor"| wc -l # 查看 CPU 信息(型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c |
查看当前服务器内存信息:
- cat /proc/meminfo 展示各种类型的内存参数
- top 根据进程实时监控服务器信息,也能看到内存相关占用情况以及基本信息
2.当你因为某个文件、目录因为其所在用户组不能正确执行你想要的情况下,你应该使用 chown 命令来改变当前文件或目录所属的用户或者分组
chown 命令用于改变某个文件或目录的所有者和所属的组,向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。和其他命令一样,他也有不少参数,但是你用到了来查就好了,用多了就记住了,老四经常使用 R(递归处理)命令,参数列表如下:
- -v 显示指令执行的过程
- -c 也是显示执行过程,但是只显示修改的部分
- -f 不显示错误信息
- -h 更改遇到的符号链接的所有权,而非符号链接指向的文件或目录的所有权。
- -R 递归更改,目标目录的下的目录以及文件都会被更改
3.如果你使用的 Cent OS 7 的 Linux 系统,当你为防火墙开放端口的时候就没必要去编辑 iptables 了,现在有了新的 firewalld 命令来帮助你。
- yum install firewalld systemd -y 安装firewall命令
- systemctl status firewalld 查看firewall状态
- systemctl start firewalld 开启firewall进程
- systemctl disable firewalld 停止firewall进程
- systemctl stop firewalld 禁用firewall命令
- firewall-cmd –zone=public –add-port=80/tcp –permanent 开启80端口(–permanent永久生效,没有此参数重启后失效)
- firewall-cmd –reload 刷新防火墙
- firewall-cmd –zone=public –list-ports 查看所有打开的端口
- firewall-cmd –zone= public –remove-port=80/tcp –permanent 删除端口
- systemctl enable firewalld.service 设置开机自启
如果你当前的系统不是 CentOS 7,你可能需要继续编辑 iptables
- vi /etc/sysconfig/iptables vi/vim 操作 iptables 文件
- -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT 开放 80 端口
- service iptables restart 重启防火墙,使端口配置生效
4.当你需要查看线上程序的运行日志的时候,你可能需要 tail 命令,他表示读取文件末尾的内容,这个命令其实不少,但是老四却笨笨的只会使用 tail -f ./logs/catalina.out 这一种形式的,比较惭愧,别向我学。。。tail 其实有很多功能,相关命令参数如下:
- -f 循环读取
- -q 当读取多个文件的时候不输出各个文件的文件名
- -v 当多个文件的时候总是输出多个文件的文件名
- -c 输出文件末尾N个字节的内容
- -n 输出文件末尾n行内容
- -pid 与-f连用,当进程终止自动退出tail命令
5.当你进入到某个目录,你可能时刻需要查看当前目录都包含哪些目录和文件,设置需要查看他们的分组以及权限都是什么,这个时候你可能需要 ls 以及 ll 命令。
-
ls -a 显示所有文件,包括隐藏文件
-
ls -l 显示详细信息(也写作 ll)
-
s -d 查看目录属性
-
ls -h 人性化显示文件大小,老四就是经常使用 ll -h 查看当前目录
-
ls -i 显示 innode(类似唯一主键)
PS:ll 可以显示当前目录下所有目录以及文件的详细情况:
6.当你需要查看你要使用的端口是否存在被占用或者程序告诉你端口被占用的时候,你需要查询当前端口被哪个王八蛋占用的并把它 kill 掉的时候你可能需要使用一下两个命令:
- lsof -i:端口号(显示符合条件的进程情况,列出当前系统打开文件的工具)
- netstat -tunlp | grep 端口号(用于显示 tcp、udp 的端口和进程等相关情况)
解释一下 lsof -i 命令中个字段代表的含义:
- COMMAND 进程名称
- PID 进程标识符
- USER 进程拥有者
- FD 文件描述符(应用程序通过文件描述符识别文件)
- TYPE 文件类型
- DEVICE 设备,磁盘的名称
- SIZE/OFF 文件的大小
- NODE 索引节点(文件在磁盘上的标识)
- NAME 打开文件的确切名称
解释一下 netstat -tunlp 命令 tunlp 这几个字母分别是什么含义:
- -t (tcp) 仅显示 tcp 相关选项
- -u (udp) 仅显示 udp 相关选项
- -n 拒绝显示列名,能显示数字的全部转化成数字
- -l 仅显示出在监听状态的服务
- -p 显示建立相关链接的程序名
PS:如果提示 lsof 命令不存在,请使用「yum -y install lsof」进行安装即可,另外因为 lsof 命令大多时候需要占用系统核心资源,尽量使用 root 用户调用。
7.当你是 root 用户需要为你的程序或者你的同事配置一些用户或者用户组的时候,一下这些用户/用户组相关的命令可能会帮助到你。
- adduser glorze/passwd glorze 添加一个叫做「glorze」的用户,为其设置密码为「glorze」
- groupadd glorze 新建名为「glorze」的用户组
- useradd –g glorzegroup glorzeuser 新建 glorzeuser 用户并为其添加 glorzegroup 用户组
- usermod –G glorzegroup glorzeuser 为已经存在的 glorzeuser 增加用户组
8.当你为你的个人电脑配置了服务器的私钥,这个时候你的 ssh 密码已经没有很大作用了,所以作为普通用户 sudo 获取权限的时候,没必要还使用之前设置的繁琐的密码,随便设置的简单方便输入能记住的就好。老四习惯性的设置为 *****,那么如何在 CentOS 下修改普通用户(你就是普通用户)的密码呢?你可能需要 passwd 命令。
1 2 3 4 5 |
# 首先通过sudo获取超级用户root权限,密码就是你当前的ssh密码 sudo su # 通过passwd命令来修改密码,参数就是你登录的用户名 passwd Your Name # 输入两次密码,比如"123456",过于简单的密码会提示"糟糕"之类的信息,不用管,再输入一次即可 |
9.当你需要查看服务器的网络连接的时候,比如说想查看当前服务器监听的端口号、查看 PID 或者进程名称等,这个时候你可能需要使用 netstat 命令,netstat 命令用于显示各种网络相关信息,如网络连接、路由表、接口状态(Interface Statistics)、masquerade 连接、多播成员(Multicast Memberships)等等。
netstat 命令各项参数及含义如下:
- -a(all) 显示所有选项,默认不显示 LISTEN(监听)相关
- -t(tcp) 仅显示 tcp 相关选项
- -u(udp) 仅显示 udp 相关选项
- -n 拒绝显示别名,能显示数字的全部转化成数字
- -l 仅列出有在 Listen(监听)的服务状态
- -p 显示建立相关链接的程序名
- -r 显示路由信息,路由表
- -e 显示扩展信息,例如 uid 等
- -s 按各个协议进行统计
- -c 每隔一个固定时间,执行该 netstat 命令
举两个栗子:
- netstat -a 列出所有端口(包括监听和未监听的)
- netstat -lnt 只列出所有监听 tcp 端口
10.当你需要查看当前服务器的磁盘运行状况的时候,你可能需要使用 df 命令。df 命令用于显示磁盘分区上的可使用的磁盘空间。默认的单位为 KB,我们可以使用该命令查看我们服务器的磁盘还剩多少空间,已经使用了多少空间。df 命令各项参数及含义如下(罗列不全,因为几乎只用到 df -h):
- -a(all) 显示全部的文件系统列表
- -h 以可读性较高的方式显示文件、磁盘信息
- -H 和小写的 h 一样,但是 1K=1000bytes 来计算
- -i 显示 inode 信息
- -k 指定区块大小为 1024 字节
- -l 只显示本地文件系统
- Filesystem 文件系统
- Size 容量
- Used 已用
- Avail 可用
- Use% 已经使用的百分比
- Mounted on 挂载点
几个额外常用的系统磁盘调优及分析命令:
- 查看哪个目录占用空间大 du -s /* | sort -nr、du -s * | sort -n | tail
- 查看当前目录下文件夹大小 du -h –max-depth=1
- 按照目录大小排序展示最前面 8 个目录或者文件 du -xB M –max-depth=2 /var | sort -rn | head -n 8
- 按照目录大小从大到小排序 du -b –max-depth 1 | sort -nr | perl -pe ‘s{([0-9]+)}{sprintf “%.1f%s”, $1>=2**30? ($1/2**30, “G”): $1>=2**20? ($1/2**20, “M”): $1>=2**10? ($1/2**10, “K”): ($1, “”)}e’
- 列出 path 这个目录的文件树 du -h /path | sort -h
- 每隔 60s 监控对应目录的文件大小变化 watch -n60 du /var/log/messages
- 递归删除当前目录下所有子目录中的 .svn 目录 find . -type d -name ‘.svn’ -print0 | xargs -0 rm -rdf
- 列出当前磁盘的使用情况 df -P | column -t
- 监控磁盘的使用情况 watch -d -n 5 df
- 列出当前 inode 的使用情况 df -i <partition>
- 按照每个磁盘使用量从高到低排序 df -h | grep -v ^none | ( read header ; echo “$header” ; sort -rn -k 5)
- 查看物理磁盘的使用情况 df -x tmpfs | grep -vE “(gvfs|procbususb|rootfs)”
- 查看当前所有磁盘的大小和使用量 df -H
- 查看所有分区使用情况 fdisk -l /dev/sda
- 查看磁盘的读写容量 iostat -m -d /dev/sda1
- 测试磁盘的读写速度 hdparm -t /dev/sda
- 查看某个文件的所有链接 find -L / -samefile /path/to/file -exec ls -ld {} +
- 查看最大的5个文件 find . -type f -exec ls -s {} \; | sort -n -r | head -5
- 查看 365 天前的文件并删除 find ./ -type f -mtime +365 -exec rm -f {} \;
- 查看大于 100M 的文件 find . -type f -size +100M
11.当你需要刷数据或者比较文本差异,筛选文本等场景时,你可能需要「sort」命令。
sort 命令是将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按 ASCII 码值进行比较,最后将他们按升序输出。
- cat glorze.txt | sort
- sort -u downhub.txt 输出行中去除掉重复行
- sort -r glorze.txt sort 命令默认升序排序,加了「-r」就变为降序
- sort -n downhub.txt 告诉 sort 用数值来排序
更多高级命令,可以搜索引擎查一下,都非常实用。
12.当你需要将某些资源从一台实例复制到另一台实例的时候,你可能需要「scp」命令。scp 全称「secure copy」,用于 Linux 下进行远程文件拷贝,不同于「cp」是本机资源拷贝的命令,scp 命令传输会进行加密,速度尚可。
- scp [参数] [原路径] [目标路径]
具体参数自己查询一下,基本用不上的,这里挑两个比较常用的:
- -r 递归复制整个目录
- -p 小写,保留原文件的修改时间,访问时间和访问权限
- -P 代表 port,大写,指定数据传输用到的端口号
1 |
scp ./Glorze.java glorze@192.168.8.8:/home/java |
13.当你将你的 zip 压缩包上传至 Linux 服务器,然后需要解压时,你需要 unzip 命令。unzip 命令用于解压由 zip 命令压缩的压缩包文件。
1 |
unzip [ OPTIONS ] file[.zip] |
列举几个常用的参数:
-
-d<目录> 将解压缩后存至指定的目录下
-
-v 显示详细的信息,查看压缩文件但不解压
-
-n 解压缩时不覆盖原有的文件
14.在 Linux 中,查看一个文本文件有很多命令,cat、more、vi、vim 都可以,本条主要讲一下「less」这个命令,less 这个命令也是对文件进行分页显示的命令,严格来讲是 Linux 上正统的文件查看命令,less 支持前后随意翻页,还有比较多的搜索功能。
简单介绍几个常用的命令参数:
- 空格 滚动一行
- 回车 滚动一页
- -i 忽略搜索时的大小写
- -N 显示行号
- pagedown 下一页
- pageup 上一页
15、待续。
更博不易,如果觉得文章对你有帮助并且有能力的老铁烦请捐赠盒烟钱,点我去赞助。或者扫描文章下面的微信/支付宝二维码打赏任意金额(点击「给你买杜蕾斯」),也可以加入本站封闭式交流论坛「DownHub」开启新世界的大门,老四这里抱拳谢谢诸位了。捐赠时请备注姓名或者昵称,因为您的署名会出现在赞赏列表页面,您的捐赠钱财也会被用于小站的服务器运维上面,再次抱拳感谢。