linux常用命令

目录 隐藏

此文将长期更新,用于记录经常用到的却又容易忘记的linux命令。

Linux基础

查看内核版本

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

修改操作系统语言

#编辑文件保存并退出
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

防火墙相关

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

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条执行过的命令

《linux常用命令》上有4条评论

tianyu进行回复 取消回复

邮箱地址不会被公开。 必填项已用*标注