Skip to content

Linux相关指令

1. 常见指令

跳转=>具体的指令笔记(基础)

跳转=>具体的指令笔记(高级)

bash
# 查看相关进程
ps aux|grep uwsgi(管道过滤)
netstat -unltp | grep nginx(管道过滤)
whoami
ps -ef | grep "uwsgi"

# 查询端口占用状态
lsof -i:端口号

# 杀死进程
kill -9 进程号

# 查看sudo操作
cat /var/log/auth.log | grep sudo

# 更改文件的所有者和所属组
chown [新的所有者用户名]:[新的所属组名] [文件名]
chown newuser:newgroup example.txt

# 更改文件的权限 `u` 表示所有者权限,`go` 表示所属组和其他用户权限,`rw` 表示读取和写入权限,`r` 表示只读权限。
chmod [权限设置] [文件名]
chmod u=rw,go=r example.txt
chmod 644 example.txt

# 查看命令的手册页
man

# 查看命令的详细信息
info

#打印文本或变量
echo 

# 设置环境变量
export PATH=$PATH:/new/directory

## 常用命令
ls -l
cd
pwd
mkdir
rm -rf
cp    # cp file.txt /path/to/destination 复制文件或目录
mv    # mv file.txt /new/path/ 移动文件或目录
cat   # cat file.txt  连接文件并打印到标准输出设备上
more  # less largefile.txt  分页显示文件内容
less
head  # head -n 10 file.txt  显示文件开头或结尾的内容
tail

## 系统信息
uname        # 显示系统信息 uname -a
lsb_release  # 显示发行版信息 lsb_release -a
hostname     # 显示主机名 hostname
cat /etc/os-release      # 查看当前的版本
cat /etc/debian_version  # 查看当前的 Debian 版本

## 系统操作
shutdown    # 关机或重启系统 shutdown -h now
reboot      # 重新启动系统 reboot

## 用户相关
su      	# 切换用户 su root
who         # 显示当前登录用户信息
useradd     # 添加新用户 useradd -m newuser
userdel     # 删除用户 userdel -r newuser
passwd      # 修改用户密码 passwd [选项] 用户名 -l 禁用账号 -u 口令解锁 -d 使账号无口令 -f 强迫用户下次登录时修改口令。


## 文件相关
chmod       # 修改文件权限 chmod 777 file.txt
chown       # 修改文件所有者和所属组 chown newuser:newgroup file.txt
find        # 在文件系统中查找文件 find / -name "*.txt"

## 程序相关
ps          # 显示进程状态 ps -ef | grep "uwsgi"
kill        # 终止进程 kill -9 1234
top         # 实时显示系统运行进程信息 top

## 网络相关
ifconfig    # 显示网络接口信息 ifconfig -a
ping        # 测试与目标主机之间的连通性 ping www.baidu.com
netstat     # 显示网络状态信息 netstat -an
netstat -antlp
netstat -tuln | grep :80  # 网络状态命令,用于显示计算机网络的连接、路由表、接口统计等信息
# -t: 显示 TCP 连接。
# -u: 显示 UDP 连接。
# -l: 仅显示正在监听的端口。
# -n: 使用数字地址而不是解析主机名(即不显示域名,显示数字 IP 和端口号)。
lsof -i :80 # 列出打开文件的命令,在 Linux 中一切都被视为文件(包括网络连接)

## 其他
date        # 显示系统日期和时间
tar         # 压缩和解压文件
gzip/gunzip # 压缩和解压缩文件

## 系统管理
traceroute  # 显示数据包到达目标主机所经过的路由信息 traceroute www.baidu.com
iftop       # 显示网络带宽使用情况 iftop
systemctl   # 管理系统服务
journalctl  # 查询和检查系统日志

## 系统监控
iostat      # 显示系统IO统计信息 iostat -x 1
free        # 显示系统内存使用情况 free -m
df          # 显示文件系统使用情况 df -h  

## 软件管理
dpkg        # 安装、更新和卸载软件包 dpkg -i package.deb
apt         # 软件包管理器 apt install package
yum         # 软件包管理器 yum install package

##  系统配置
crontab     # 配置系统定时任务 crontab -e
vi/vim       # 编辑文件 vi/vim file.txt
sudo        # 以管理员身份执行命令 sudo command

# 先将本地yum仓库换成阿里云的yum仓库
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache

这里补充windows dos常用指令,不再单独创建新文件

bash
netstat -anof   				# 查看网络开放端口
netstat -anof | findstr 9000	# 查看网络开放端口9000  可以得到进程ID
tasklist						# 查看全部进程
tasklist | findstr 进程ID			# 查看进程ID程序源
ping

2. 配置相关

2.1 目录介绍

bash
# Linux根目录下每个文件夹的功能
/bin:   # 存放二进制可执行文件
/boot:  # 存放系统引导必需的文件
/dev:   # 存放设备文件
/etc:   # 存放系统配置文件
/home:  # 存放所有用户文件的根目录
/lib:   # 存放系统共享库和内核模块
/media: # 用于挂载可移动媒体设备
/mnt:   # 用于临时挂载文件系统
/opt:   # 用于存放可选的软件包
/proc:  # 虚拟文件系统,存放系统运行时信息
/root:  # 超级用户目录
/run:   # 存放系统运行时所需的文件
/sbin:  # 存放二进制可执行文件,只有root才能访问
/srv:   # 存放服务启动之后需要提取的数据
/sys:   # 虚拟文件系统,存放系统运行时信息
/tmp:   # 用于存放各种临时文件
/usr:   # 用于存放共享文件
/var:   # 用于存放运行时需要改变数据的文件
/lost+found:   # 用于存放系统异常退出时保存的文件
/media/cdrom:  # 挂载光盘时的默认目录
/media/floppy: # 挂载软盘时的默认目录
/media/usb:    # 挂载U盘时的默认目录
/media/usb0:   # 挂载U盘0时的默认目录
bash
apt-get install name  # 安装
apt-get update name   # 更新
apt-get remove name   # 卸载
apt-cache search name # 查找

systemctl start <service_name>  	# 启动服务
systemctl stop <service_name>  		# 停止服务
systemctl restart <service_name>  	# 重启服务
systemctl reload <service_name>  	# 重新加载服务配置
systemctl status <service_name>  	# 查看服务状态
systemctl enable <service_name>  	# 启用服务开机自启
systemctl disable <service_name>  	# 禁用服务开机自启
systemctl is-enabled <service_name> # 查看服务是否启用自启动
systemctl reboot 				    # 重启系统
systemctl poweroff  				# 关机
systemctl suspend  					# 挂起系统
systemctl hibernate  				# 休眠系统
systemctl get-default  				# 查看系统的运行级别
systemctl set-default <target>  	# 设置默认目标
journalctl  						# 查看系统日志
systemctl list-units --type=target  # 查看所有目标
systemctl isolate <target>  		# 切换到指定目标
systemctl list-units --type=service # 列出所有服务单元
systemctl list-units  				# 列出所有已加载的单元
systemctl show <unit_name>  		# 查看某个单元的详细信息
sudo systemctl daemon-reload  		# 重新加载 systemd 配置
sudo systemctl start <unit_file>  	# 启动单元
sudo systemctl stop <unit_file>  	# 停止单元
systemctl status  					# 查看系统信息
systemctl is-active <service_name>  # 查看服务是否正在运行
systemctl list-unit-files --state=enabled  	# 列出所有已启用的服务
systemctl list-unit-files --state=disabled  # 列出所有已禁用的服务

2.2 配置Linux环境变量

bash
# 配置Linux环境变量
export PATH=$PATH:/usr/local/bin  # 添加到PATH环境变量中
source ~/.bashrc                  # 使环境变量生效

2.3 ufw防火墙

bash
# 配置防火墙操作 【ubuntu】
ufw help  					# 帮助清单
sudo apt install firewalld  # 安装
ufw status    				# 查看防火墙状态和开放的端口
ufw status verbose  	 	# 查看防火墙状态和开放的端口,并显示端口名称
ufw status numbered   		# 查看防火墙状态和开放的端口,并显示端口号
ufw delete 序号  			   # 删除序号规则
ufw delete allow 22  		# 删除指令相关
ufw enable    				# 启动防火墙
ufw disable   				# 关闭防火墙
ufw allow 22
ufw allow 2290:2300/tcp 	# 范围开放端口
ufw allow 80/tcp
ufw reload
ufw allow from 192.168.0.104  # 允许来自xx的连接
ufw allow form 192.168.0.0/24
ufw allow from 192.168.0.104 proto tcp to any port 22
netstat -antp          			# 查看开放端口
ufw default deny incoming   	# 设置默认策略:设置默认拒绝所有传入连接
ufw default allow outgoing  	# 设置默认允许所有传出连接
sudo ufw logging on         	# 启动日志记录
sudo tail -f /var/log/ufw.log  	# 查询日志

2.3 firewalld防火墙

bash
sudo apt update && sudo apt install firewalld  # 安装 firewalld
sudo systemctl start firewalld                 # 启动 firewalld 服务
sudo systemctl stop firewalld                  # 停止 firewalld 服务
sudo systemctl restart firewalld               # 重启 firewalld 服务
sudo systemctl status firewalld                # 查看 firewalld 服务状态
sudo systemctl enable firewalld                # 设置 firewalld 服务开机启动
sudo systemctl disable firewalld               # 禁用 firewalld 服务开机启动

sudo firewall-cmd --state                     # 查看防火墙状态(running 或 not running)
sudo firewall-cmd --get-default-zone          # 获取当前防火墙的默认区域
sudo firewall-cmd --set-default-zone=zone_name  # 设置防火墙默认区域
sudo firewall-cmd --zone=zone_name --list-all  # 查看某个区域的详细规则
sudo firewall-cmd --get-active-zones          # 查看当前激活的区域
sudo firewall-cmd --list-services             # 查看当前已启用的服务

sudo firewall-cmd --zone=zone_name --add-service=service_name  # 启用服务(如 http)
sudo firewall-cmd --zone=zone_name --remove-service=service_name  # 禁用服务(如 http)
sudo firewall-cmd --zone=zone_name --add-port=port/tcp   # 启用端口(如 80/tcp)
sudo firewall-cmd --zone=zone_name --remove-port=port/tcp  # 禁用端口(如 80/tcp)
sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
sudo firewall-cmd --zone=public --remove-port=22/tcp --permanent
sudo firewall-cmd --zone=public --add-interface=<接口名> --permanent # 将指定的网络接口(网卡)绑定到 firewalld 的某个区域(zone)

sudo firewall-cmd --permanent --zone=zone_name --add-service=service_name  # 永久添加服务
sudo firewall-cmd --permanent --zone=zone_name --remove-service=service_name  # 永久移除服务
sudo firewall-cmd --permanent --zone=zone_name --add-port=port/tcp  # 永久启用端口
sudo firewall-cmd --permanent --zone=zone_name --remove-port=port/tcp  # 永久禁用端口

sudo firewall-cmd --runtime-to-permanent    # 将当前规则保存为永久规则
sudo firewall-cmd --reload                  # 重新加载防火墙配置
sudo firewall-cmd --list-ports              # 查看所有开放的端口
sudo firewall-cmd --zone=public --list-ports

sudo firewall-cmd --list-all  # 查看当前防火墙规则
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port=80 protocol=tcp accept'  # 开放某个 IP 访问指定端口
sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.100" port port=80 protocol=tcp accept'  # 删除已添加的规则

sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 80 -j ACCEPT  # 添加直接规则
sudo firewall-cmd --direct --remove-rule ipv4 filter INPUT 0 -p tcp --dport 80 -j ACCEPT  # 移除直接规则

sudo dpkg-reconfigure tzdata                 # 配置系统时区
sudo timedatectl set-timezone Asia/Shanghai  # 设置时区为中国(上海)

sudo firewall-cmd --zone=public --add-masquerade --permanent  		# 开启命令 masquerade 允许 NAT,让内网设备通过服务器访问外网
sudo firewall-cmd --zone=public --remove-masquerade --permanent 	# 关闭命令
sudo firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.0.249 --permanent # 让外网访问服务器的80端口,然后 firewalld 转发到 内网设备的 8080

2.4 查看IP

bash
# 查看IP 【ubuntu】
ip addr show
ip a
hostname -I  # 最精简的
ifconfig     # 需要安装 apt-get install net-tools
route -n     # 查看网关 

# centos 
ifconfig     # 需要安装 yum install net-tools

2.5 配置静态IP操作 ubuntu

bash
# 配置静态IP操作 【ubuntu】
cd /etc/netplan
sudo cp 01-network-manager-all.yaml 01-network-manager-all.yaml-before
sudo vim 01-network-manager-all.yaml
------------------------------------------------------------
network:
  ethernets:
    ens33:
      addresses: [192.168.5.130/24]  # 设置静态IP地址和掩码
      routes:
        - to: default
          via: 192.168.5.2
      # gateway4: 192.168.5.2 禁用了
      dhcp4: false                   # 禁用dhcp
      nameservers:
        addresses: [114.114.114.114, 8.8.8.8]  # 设置主、备DNS
  version: 2
  renderer: NetworkManager
-------------------------------------------------------------
sudo netplan apply


# 【centos】
vi /etc/sysconfig/network-scripts/ifcfg-ens33  # 编辑网络配置文件
BOOTPROTO=static         # 设置静态IP
ONBOOT=yes               # 设置自动启用网络连接
IPADDR=192.168.1.100     # 设置IP地址
GATEWAY=192.168.1.254    # 设置网关
DNS1=8.8.8.8             # 设置DNS服务器
service network restart  # 重启网络服务

2.6 MySQL(系统级)

bash
# 配置MySQL操作  【ubuntu】系统
sudo apt install mysql-server  # 安装  也可以指定版本=5.6
sudo mysql_secure_installation  # 初始化操作
------------------------------------
Securing the MySQL server deployment....
Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: (写 NO 不进行密码的强校验)

Skipping....Remove anonymous users? (Press y|Y for Yes, any other key for No) : (选择Y,删除匿名用户)
Normally......Disallow root login remotely? (选择N,允许root远程连接)
By default, Remove test database and access to it? (选择N,不删除test数据库)
Reloading t....Reload privilege tables now? Y (选择Y,修改权限立即生效)

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
#找到 bind-address 修改值为 0.0.0.0(如果需要远程访问)
# 修改密码
sudo mysql -u root  回车  # 以 root 用户身份登录 MySQL
USE mysql;               # 择 MySQL 数据库

UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root';  # 更新 root 用户的密码 
# 在MySQL 8.04前,执行:SET PASSWORD=PASSWORD(‘[新密码]’);但是MySQL8.0.4开始,这样默认是不行的。因为之前,MySQL的密码认证插件是“mysql_native_password”,而现在使用的是“caching_sha2_password”。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

FLUSH PRIVILEGES;        # 刷新权限:
exit;                    # 退出 MySQL

# 若要让其他主机登录数据库   host='%' 开放访问  host='localhost' 本机访问
USE mysql;  
update user set host='%' where user='root' and host='localhost' limit 1;
FLUSH PRIVILEGES;     
------------------------------------

service mysql start   # 启动MySQL服务
service mysql status  # 查看MySQL状态
service mysql restart  # 重启服务
service mysql stop    # 停止MySQL状态
mysql -u root -p        # 连接MySQL数据库

2.7 配置uwsgi操作

bash
# 配置uwsgi操作
uwsgi --ini uwsgi.ini  # 启动uwsgi服务
uwsgi --stop uwsgi.pid  # 停止uwsgi服务

2.8 安装SSH服务

bash
# 安装SSH服务 ubuntu
sudo apt-get install openssh-server
ps -e |grep ssh
service ssh start
service ssh status
service ssh restart  # 重启服务

# ssh配置文件
vim /etc/ssh/sshd_config

PermitRootLogin prohibit-password   # 禁止远程ssh
PermitRootLogin yes                 # 允许远程ssh

2.9 配置DNS

1)永久修改DNS

修改 /etc/systemd/resolved.conf 文件:

bash
vim /etc/systemd/resolved.conf

在文件中找到并修改以下参数: Alidns

makefile
# 指定 DNS 服务器,以空格分隔,支持 IPv4 或 IPv6 地址
DNS=8.8.8.8 223.5.5.5 223.6.6.6 2400:3200::1 2400:3200:baba::1
# 阿里DNS 
# IPv4地址:223.5.5.5 223.6.6.6
# IPv6地址:2400:3200::1, 2400:3200:baba::1

# 备用 DNS 服务器
FallbackDNS=8.8.4.4 114.114.114.114 1.1.1.1

# 设置搜索域名
Domains=domain.com

# 设置 LLMNR 是否激活,选项有: yes, no, resolve
# 启用或禁用 Link-Local Multicast Name Resolution (LLMNR)
# LLMNR 允许设备在本地网络中通过广播的方式解析主机名,而不依赖于外部 DNS 服务器
# 对于家庭或小型局域网环境,启用 LLMNR 是有益的,可以通过局域网内的主机名进行快速解析
# 不过,在企业环境中,为了安全考虑,可能更倾向于禁用 LLMNR(设置为 no),以减少潜在的中间人攻击风险
LLMNR=yes

# 设置 MulticastDNS 是否激活,选项有: yes, no, resolve
# 启用或禁用 Multicast DNS (mDNS)
# mDNS 是一种通过多播协议进行局域网内设备发现的机制,常用于没有传统 DNS 服务器的小型网络
# 如果你在局域网中使用 mDNS(例如,家庭网络中的智能设备或打印机),则建议启用 MulticastDNS
# 类似于 LLMNR,在企业环境中,为了减少不必要的网络广播或避免安全问题,通常建议禁用 MulticastDNS
MulticastDNS=yes

# 设置 DNSSEC 是否激活,选项有: yes, no, allow-downgrade
# 启用或禁用 DNS Security Extensions (DNSSEC),DNSSEC 是用于防止 DNS 攻击(如缓存投毒、域名伪造等)的安全协议
# 启用 DNSSEC 可以有效防止 DNS 投毒攻击,是一种提高 DNS 查询安全性的好方式。
# 如果你对安全有较高要求,特别是在处理敏感数据时,建议启用(yes)。
DNSSEC=yes

# 设置缓存是否激活,选项有: yes, no, no-negative
# 启用 DNS 缓存可以提高查询速度,减少延迟。
# 对于大多数用户,启用缓存(yes)是有益的,特别是在访问相同站点或服务时。
# 如果你希望减少缓存引起的过期记录问题,使用 no-negative 也是一个不错的选择。
Cache=no-negative

根据需求修改 resolved.conf 文件中的 DNS 配置,然后保存文件。

重启 systemd-resolved 服务:

bash
systemctl restart systemd-resolved

设置 systemd-resolved 服务开机启动:

bash
systemctl enable systemd-resolved

备份当前的 resolv.conf 文件:

bash
mv /etc/resolv.conf /etc/resolv.conf.bak

重新生成 resolv.conf 文件的符号链接:

bash
ln -s /run/systemd/resolve/resolv.conf /etc/

参数解释

这些参数是用于配置 systemd-resolved 服务的行为,帮助你优化 DNS 解析、增强网络安全性以及调整缓存等设置。以下是每个参数的详细解释:

makefile
# 设置搜索域名
# 作用:指定默认的搜索域名。这个设置会在你访问没有指定完全域名的主机时自动附加。例如,如果你设置了 `Domains=example.com`,然后访问 `webserver`,系统会尝试解析 `webserver.example.com`。
# 使用场景:如果你经常访问某个特定域名下的主机(比如公司内部网络),可以通过这个设置自动附加该域名。
Domains=domain.com

# 设置 LLMNR
# 作用:启用或禁用 **Link-Local Multicast Name Resolution (LLMNR)**。LLMNR 允许设备在本地网络中通过广播的方式解析主机名,而不依赖于外部 DNS 服务器。
# - `yes`:启用 LLMNR。
# - `no`:禁用 LLMNR。
# - `resolve`:只在本地无法通过 DNS 解析时使用 LLMNR。
# 使用场景:适用于局域网环境,尤其是没有配置完整 DNS 服务器的场合。在没有设置 DNS 的情况下,LLMNR 可帮助你通过主机名进行局域网内的通信。
LLMNR=yes

# 设置 MulticastDNS
# 作用:启用或禁用 **Multicast DNS (mDNS)**。mDNS 是一种通过多播协议进行局域网内设备发现的机制,常用于没有传统 DNS 服务器的小型网络。
# - `yes`:启用 mDNS。
# - `no`:禁用 mDNS。
# - `resolve`:只在无法通过其他 DNS 解析时使用 mDNS。
# 使用场景:在家庭网络或小型局域网中使用 mDNS 来进行设备发现(例如,通过 `hostname.local` 访问设备)。例如,Apple 的 **Bonjour** 服务使用 mDNS 进行设备自动发现。
MulticastDNS=yes

# 设置 DNSSEC
# 作用:启用或禁用 **DNS Security Extensions (DNSSEC)**,DNSSEC 是用于防止 DNS 攻击(如缓存投毒、域名伪造等)的安全协议。
# - `yes`:启用 DNSSEC,所有 DNS 请求会验证签名的合法性,增强安全性。
# - `no`:禁用 DNSSEC。
# - `allow-downgrade`:如果 DNSSEC 不可用,则允许降级使用普通 DNS(不进行安全验证)。
# 使用场景:如果你需要提高 DNS 查询的安全性,防止 DNS 相关的安全攻击,可以启用 DNSSEC。适用于有较高安全要求的环境。
DNSSEC=yes

# 设置缓存
# - 作用:控制 DNS 查询结果的缓存行为。
# - `yes`:启用缓存,DNS 结果会在缓存中存储并在一定时间内复用,减少 DNS 查询的延迟。
# - `no`:禁用 DNS 缓存。
# - `no-negative`:仅缓存正向(有效的)DNS 查询结果,不缓存负向查询(即没有找到的域名)。
# 使用场景:启用缓存可以加快后续的 DNS 查询速度,尤其是在频繁访问相同网站时。如果对 DNS 缓存的准确性有高要求,可以选择禁用缓存或只缓存有效结果。
Cache=no-negative

2)临时修改DNS方法

如果只需要临时修改DNS,可以直接编辑 /etc/resolv.conf 文件:

bash
vi /etc/resolv.conf

在文件中添加你想使用的 DNS 服务器:

bash
nameserver 8.8.8.8
nameserver 8.8.4.4

每行一个 DNS 地址,修改后保存退出即可。此方法修改后即刻生效,但重启后失效。

3. 常用技巧

3.1 添加应用快捷方式到桌面

bash
# 在桌面创建一个名称为 应用名称.desktop的文件,例如 test.desktop
vim test.desktop

# 编辑内容
[Desktop Entry]
Name=<程序/软件名> # test
Comment=<自定义的描述> # 无
Exec=<程序运行的绝对路径> # /home/slienceme/software/test/test-bin
Type=<类型,有Application和Link两种类型> ApplicationA
Terminal=<设置是否在终端运行,窗口应用程序填写false,命令行程序填true> # false
Icon=<程序图标的绝对路径>  # /home/slienceme/software/test/test.icon

# 然后给文件赋予权限
sudo chmod +x test.desktop

# 然后鼠标右键选取Allow Lanuching即可