此文将长期更新,用于记录经常用到的却又容易忘记的linux命令。
查看主机名、操作系统版本及架构
hostnamectl
查看内核版本
cat /proc/version
查看Linux发行版本
cat /etc/issue
查看centos版本
cat /etc/redhat-release
查看32位还是64位
getconf LONG_BIT
查询本机IP
除了常用的ifconfig
外,还可以:
curl ifconfig.me
查看CPU型号
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
国产CPU型号查询
lscpu
查看磁盘容量
lsblk
修改操作系统语言
#编辑文件保存并退出
vi /etc/sysconfig/i18n
LANG="en_US.UTF-8"
#使其立即生效
source /etc/sysconfig/i18n
注意:centos7的环境对应的配置文件为:
/etc/locale.conf
修改时间
快速同步北京时间
tzselect
按照要求选择 5 -> 9 -> 1 -> 1 即可配置成中国北京的时间
使用ntpdate
#如果没有安装ntpdate需要先安装
yum install ntpdate
#与阿里云服务器时间同步
ntpdate ntp1.aliyun.com //直接用域名同步中国上海时间 是阿里云的服务器
#同时还可以添加定时任务,每天定时同步时间
手动修改时间
date -s "2020-04-11 18:44:50"
hwclock -w #将时间写入bios避免重启失效
Centos7设置系统时间为北京时间
cp /etc/localtime /etc/localtime.org
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
查看yum源
yum repolist
更改yum源为国内源
默认带的yum镜像源一般都是国外的,导致在线安装的时候,速度很慢。这个时候需要你更换yum镜像源为国内的。
修改CentOS默认yum源为阿里云
1.备份系统自带的yum镜像源
cd /etc/yum.repos.d/
mkdir bak
mv *.repo bak
2.下载对应yum源配置文件
cd /etc/yum.repos.d/
## 适用于CentOS7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
## 适用于CentOS8
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
3.运行yum生成缓存
yum makecache
yum命令
查找yum已安装的包
yum list installed | grep "httpd"
查看正在运行的进程
ps -elf
查询某个进程服务的PID值
pidof <服务名>
设置系统环境变量
系统环境变量对全部用户有效。可以直接在/etc/profile文件中设置,但是Linux不建议在/etc/profile文件中设置系统环境变量。
在/etc/profile.d目录中增加环境变量脚本文件。
/etc/profile在每次启动时会执行/etc/profile.d下全部的脚本文件。/etc/profile.d比/etc/profile好维护,如在/etc/profile.d目录下增加my_env.sh脚本文件
其中配置
#JAVA_HOME
export JAVA_HOME=
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
#MAVEN_HOME
export MAVEN_HOME=
export PATH=$PATH:$MAVEN_HOME/bin
#HBASE_HOME
export HBASE_HOME=
export PATH=$PATH:$HBASE_HOME/bin
让环境变量生效
source /etc/profile
查看历史执行过的命令
history
如需重复执行,输入:!<ID>
查看大文件内容
more <文件名>
文件远程复制
从A服务器复制文件到B服务器(A、B服务器都是Linux操作系统)
命令格式:
scp -P 22 -r remote_username@remote_ip:remote_folder local_folder
DEMO1: scp -r ./* root@47.110.xxx.xxx:/www/wwwroot/folder/
表示将运行当前命令所在目录下的所有文件上传至远程服务器(47.110.xxx.xxx)的/www/wwwroot/folder/文件夹
DEMO2: scp -r root@47.110.xxx.xxx:/www/wwwroot/folder_remote /www/wwwroot/folder_local
表示从远程服务器拷贝文件到当前服务器,将会在当前服务器的/www/wwwroot/folder_local目录下,新建名称为folder_remote的文件夹
指定了用户名,命令执行后需要输入用户密码;
apache相关
查看apache连接数
1.查看apache当前并发访问数:
netstat -an | grep ESTABLISHED | wc -l
2.查看httpd进程数(即prefork模式下Apache能够处理的并发请求数):
ps aux|grep httpd|wc -l
3.查看80端口占用数
netstat -nat|grep -i "80"|wc -l
防火墙相关
centoos
CentOS6.5查看防火墙的状态:
service iptable status
CentOS 7.2查看防火墙的状态:
firewall-cmd --state
关闭防火墙:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
CentOS 7 查看已经开放的端口:
firewall-cmd --list-ports
centoos防火墙打开指定端口
firewall-cmd --zone=public --add-port=8384/tcp --add-port=22000/tcp --add-port=21027/udp --permanent
#重启防火墙
firewall-cmd --reload
设置selinux为diabled
vi /etc/sysconfig/selinux
改为:SELINUX=disabled
centos7屏蔽ip
#屏蔽124.115.0.199这个IP
iptables -I INPUT -s 124.115.0.199 -j DROP
#屏蔽124.115.*.*这段IP
iptables -I INPUT -s 124.115.0.0/16 -j DROP
#屏蔽61.37.80.*这段IP
iptables -I INPUT -s 61.37.80.0/24 -j DROP
#屏蔽124.*.*.*这段IP
iptables -I INPUT -s 124.0.0.0/8 -j DROP
打开屏蔽
#只要把 I 改为 D 就好了,然后后面可以写IP或者IP段
iptables -D INPUT -s 124.0.0.0/8 -j DROP
查看已添加的iptables规则
iptables -L -n
v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
x:在 v 的基础上,禁止自动单位换算(K、M)
n:只显示IP地址和端口号,不将ip解析为域名
更多:https://blog.csdn.net/weixin_40461281/article/details/83008976
Ubuntu
启用防火墙:
sudo ufw enable
禁用防火墙:
sudo ufw disable
检查防火墙状态:
sudo ufw status
zip、tar命令
zip压缩:
zip -q -r 压缩包名.zip 压缩的路径
例如:
将/home/data 这个目录下的所有文件打包压缩为当前目录下的data.zip
zip -q -r data.zip /home/data
tar压缩
例如要将/home/img目录压缩到当前目录下:
tar -czf img.tar.gz -C /home/ img
tar解压
tar -xvf 压缩包名.tar.gz
备份数据库
新建一个dbbak.sh
,内容如下:
filename=`date +%y%m%d`
mysqldump --opt -h127.0.0.1 数据库名 -u数据库用户 -p数据库密码 | gzip > /home/mysqlbak/bak$filename.sql.gz
添加可执行权限:
chmod u+x dbbak.sh
优雅的重启php-fpm
方法一
首先查看php-fpm 进程
ps -aux | grep php
kill -USR2 4890
方法二
Linux pkill
用于杀死一个进程,与 kill 不同的是它会杀死指定名字的所有进程,类似于 killall 命令。
kill 命令杀死指定进程 PID,需要配合 ps 使用,而 pkill 直接对进程对名字进行操作,更加方便。
#结束所有的 php-fpm 进程
pkill -9 php-fpm
查看软件安装路径
列出所有安装的httpd
rpm -qa | grep httpd
软件是否安装;例如:httpd是否安装
rpm -q | grep httpd
rpm -ql 列出软件包安装的文件
rpm -ql httpd
可以直接使用 rpm -qal |grep mysql 查看mysql所有安装包的文件存储位置
rpm -qal |grep httpd #查看httpd所有安装包的文件存储位置
参考:https://www.jb51.net/os/RedHat/359036.html
定时任务
列出所有的定时任务
crontab -l
修改定时任务
crontab -e
说明
例子:用dmtsai的身份在每天的12:00发信给自己
0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc
查看CPU和内存占用
CPU占用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
内存消耗最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k4|head -10
top命令
按下键盘上的某个键位,top会有不同的反应。比如以下8个。
1
按下数字1,可以显示每个cpu的运行情况。可以看到机器上有多少个cpu,机器nx的话整个屏幕都被占满了。
z
让top进入高亮模式,比如上面的红红的终端字体。再次按可以toggle。
b
高亮显示正在运行的命令,s为R的进程。图中正在运行的命令就是top自己。
c
显示COMMAND列的所有信息,包括它的参数。
t
更直观的方式展示task/cpu信息,像htop一样。
m
更置换的方式展示mem信息,像htop一样。
M
根据内存的使用率进行排序。%MEM列。
P
根据CPU的使用率进行排序。%CPU列。是的,这个没有进行录制。
查找大文件夹和目录
使用以下命令找出占用磁盘空间体积较大的文件夹和目录:
du -s * | sort -nr | head #显示前10个占用空间最大的文件或目录
du -hm --max-depth=2 | sort -nr | head -12 #显示前12个占用空间大的目录(包括二级目录)
yum检查已安装的php版本
yum list installed | grep php
网络命令
查看本机开启的端口
netstat -tulnp
查看所有连接
netstat -an
统计正在连接的网络连接数量
netstat -an | grep "ESTABLISHED" | wc -l
关机重启命令
shutdown 命令
最安全的关机重启命令,推荐使用
shutdown [选项] 时间 [警告信息]
选项:
-c: 取消已经执行的 shutdown 命令
-h: 关机
-r: 重启
立即关机:
shutdown -h now
查看最近开机、重启时间
- 查看最近开机时间
uptime -s
- 查看最近重启时间
last rboot
查看最近登录情况(last命令)
last
作用是显示近期用户或终端的登录情况。通过last
命令查看该程序的log,管理员可以获知谁曾经或者企图连接系统。
last
- 字段介绍:
第一列:用户名
第二列:终端位置
第三列:登录ip或者内核
第四列:开始时间
第五列:结束时间(still login in 还未退出 down 直到正常关机 crash 直到强制关机)
第六列:持续时间
- 显示最近n条
last -n
监控服务并自动启动
以nginx为例:
running=`ps -ef | grep 'nginx' | grep -v grep`
if [ "x" != "x$running" ]
then
echo "Nginx already running!"
exit 0
fi
su - -c "service nginx start &"
sleep 1
running=`ps -ef | grep 'nginx' | grep -v grep`
if [ "x" = "x$running" ]
then
echo "Nginx start error!"
#exit 1
else
echo "Nginx restart succeed"
#exit 0
fi
设置环境变量
这里以设置GO的环境变量为例:
vi ~/.bashrc
在文件末尾添加:
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
保存后,让环境变量生效:
source ~/.bashrc
挂载光盘
- 挂载
mount /dev/cdrom /mnt/cdrom
- 卸载
umount /dev/sr0
查看本机IP
curl https://myip.ipip.net
文件操作
替换文件中的字符串
sed -i 's/str1/str2/g' filename
str1: 被替换的字符串
str2: 替换成的字符串
查看文件(夹)所在分区(挂载点)
df <文件(夹)路径>
查看日志
最近使用service network restart时报错了,通过以下语句查看具体的出错信息:
cat /var/log/messages | grep network
配置ssh免密登录
通常都是使用账号密码来实现ssh登录。ssh提供一种免密登录的方式:公钥登录。
服务器A免密登录服务器B
在服务器A上生成密钥文件:
ssh-keygen -f /root/.ssh/xxx
注意:xxx为密钥名字,可以任意填写。
命令执行后将会在/root/.ssh/
文件夹下生成两个文件,一个文件是私钥(xxx,没有后缀名),一个是公钥(xxx.pub,后缀名是pub)
生成密钥对后,把公钥拷贝到服务器B上去,也就是把公钥的内容粘贴到服务器B的/root/.ssh/authorized_keys 文件里。
拷贝完公钥之后,我们来使用以下命令手动测试一下能否通过ssh登录远程的机器:
ssh -p 22 -i /root/.ssh/jenkins 服务器B的IP
能正常登录则代表没有问题,如果出现让你出入用户密码的情况则是密钥没有配置成功,配置成功的情况下登录是不需要密码的。
登录流程描述
服务器A要登录到服务器B,服务器A相当于是client,服务器B相当于是server。
用户管理
列出所有用户
cat /etc/passwd
显示当前用户
w
创建用户
useradd -g [用户组] -m [用户名]
删除用户
userdel [用户名]
userdel -r [用户名] #同时删除用户及用户家目录
userdel -f [用户名] #强制删除用户
修改用户密码
passwd <用户名>
用户名可以省略不填,代表修改当前登录用户的密码。
设置密码过期时间
查看过期时间
chage -l root
设置密码过期
chage -d 2022-02-24 root ##设置root用户最后一次修改密码的日期为2022年2月01日
chage -M 90 root ##密码过期时间为90天
chage -M 99999 root ##密码永不过期
设置账号过期
chage -E "May 24, 2022" root ##账号过期时间为5月24号
chage -E -1 root ##设置账号永不过期
登录鉴权
vim /etc/pam.d/sshd
vim /etc/pam.d/login
修改以上两个文件,在#%PAM-1.0
的下面,即第二行加入如下代码:
auth required pam_tally2.so deny=3 unlock_time=3600 even_deny_root root_unlock_time=1800
代表连续输错密码3次,将锁定账户1个小时。
#解锁账户
pam_tally2 -r -u root
调整history记录的条数
修改/etc/profile
文件中的配置项HISTSIZE
,例如改为100,则可以上翻100条执行过的命令
perfect 🙂
nice
不错!
last 这个不错!