Linux
参考链接
一. 入门指南
发行版
- Debian 系列
- Debian:稳定安全,历史悠久,是很多其他版本的基础
- Ubuntu:基于 Debian,桌面完善,社区庞大
- Deepin:基于 Debian,桌面完善,国产
- RedHat 系列
- RHEL(Red Hat Enterprise Linux):RedHat 的商业版 收费
- CentOS:RedHat 的社区版(2024.6 之后停止支持)
- Fedora:RedHat 的创新版,集合最新功能
下载镜像
打开 阿里云镜像站,点击 OS镜像,在弹窗中选择发行版和具体版本进行下载。
发行版根据流行程度首选 CentOS 或 Ubuntu,具体版本可以考虑其最后一个长期支持版(最小版,不带桌面,作为服务器不需要)。
虚拟机软件
VMware
分为 VMware Workstation Player 和 VMware Workstation Pro 两个版本。
Pro 版付费,或需要破解。Player 版虽然免费,但是功能阉割,不支持虚拟网络管理、后台运行等。
Hyper-V ✔️
Windows 下的免费虚拟机,Win11 自带,默认不启用,在 “启用或关闭 Windows 功能” 中勾选 Hyper-V 进行启用。
Win10 下安装 Hyper-V,新建一个批处理文件 Hyper-V.bat
,内容如下:
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hv.txt
for /f %%i in ('findstr /i . hv.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hv.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V -All /LimitAccess /ALL
Pause
保存后,以管理员身份运行,自动安装并重启后,在 “启用或关闭 Windows 功能” 就能看到 Hyper-V 并已勾选。
创建虚拟机
打开 Hyper-V 管理器,点击 Hyper-V 设置,将虚拟硬盘默认路径改为 D:\Software\Hyper-V\Virtual Hard Disks\
,将虚拟机默认路径改为 D:\Software\Hyper-V\
。
点击 新建 - 虚拟机,开启新建虚拟机向导,指定名称和位置(默认位置),指定代数为第二代,分配内存 4096M,网络连接默认 Default Switch,创建虚拟硬盘大小 30G,指定映像文件,完成新建。
打开虚拟机设置,处理器选项,虚拟处理器数量改为 2。安全选项,安全启动的模板改为 Microsoft UEFI 证书颁发机构。
连接虚拟机(以 CentOS 为例),初次启动进入安装程序:
语言支持,选择简体中文
网络和主机名,连接以太网,设置主机名(数字、小写字母、连字符- 组成,以小写字母开头,如 yuhuo-online);
日期和时间,确认时区并开启网络时间;
安装位置,勾选虚拟硬盘并选择自动配置分区;
确认后,配置 root 密码,开始执行安装,重启后完成。
说明
Ubuntu 安装时并没有指定 root 密码,而是自定义一个初始用户,因为不推荐直接使用 root 用户,而是使用初始用户来替代。
系统默认将初始用户添加到 sudo 组中,并且在 /etc/sudoers
中为 sudo 组指定了拥有所有权限 %sudo ALL=(ALL:ALL) ALL
。
因此初始用户通过 sudo
就可提权到 root 权限,不需要使用到 root 用户,以此提高系统安全性。
静态 IP
通过 SSH 连接虚拟机,或想访问虚拟机提供的服务,都需要用到 IP 地址。虚拟机默认每次重启都会重新分配 IP,造成不便,因此需要固定 IP。
网络设置如下:
打开 控制面板 - 网络和 Internet - 网络和共享中心 - 更改适配器设置,可以看到 Hyper-V 默认虚拟交换机 vEthernet (Default Switch),状态显示已启用;
WLAN 右键属性 - 共享选项 - 勾选允许其他网络用户...来连接 - 下拉框选择 vEthernet (Default Switch)(当只有这一个可共享时,没有下拉框,默认就是它) - 确定;
vEthernet(Default Switch)右键属性 - 查看 TCP/IPv4 属性(此时已分配固定 IP 地址,如 192.168.137.1。在第 2 步之前是固定其他 IP 地址);
回到 Hyper-V 管理器,设置虚拟机的网络适配器为 Default Switch(或在新建虚拟机时已选择);
连接虚拟机,查看 IP,可以看到当前 IP 已为 192.168.137.x;
CentOS 中修改网络配置文件:
cd /etc/sysconfig/network-scripts
# 命令查看网络接口类型
# eth0 则对应 ifcfg-eth0
# ens33 则对应 ifcfg-ens33
ip addr
# 编辑网络配置文件
vi ifcfg-eth0
# 修改后,重启网络服务
systemctl restart network
修改如下信息,将 IP 固定为 192.168.137.200;
BOOTPROTO=static
IPADDR=192.168.137.200
GATEWAY=192.168.137.1
DNS1=192.168.137.1
NETMASK=255.255.255.0
Ubuntu 中修改网络配置文件:
cd /etc/netplan
# 留意这个文件是否存在,可能有些旧版本是 01-netcfg.yaml
# 备份
sudo cp 00-installer-config.yaml 00-installer-config.bak.yaml
# 编辑
sudo vi 00-installer-config.yaml
# 修改后,应用网络配置
sudo netplan apply
修改为如下信息(留意是 eth0 还是 ens33),将 IP 固定为 192.168.137.202;
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.137.202/24
routes:
- to: default
via: 192.168.137.1
nameservers:
addresses: [192.168.137.1]
验证 ip;
# 某些服务可能需要重启才能正常
reboot
# 验证ip地址是否成功更改
ip addr | grep 192.168.137
# 验证是否可以正常上网
curl https://www.baidu.com
SSH 工具
Linux 目录
/
:根目录;/bin
:用户级别的二进制可执行文件;/sbin
:系统级别的二进制可执行文件;/etc
:配置文件;passwd
:所有用户信息group
:所有组信息sudoers
:命令权限信息hostname
:主机名vconsole.conf
:终端界面配置(修改字体和字号)os-release
:系统版本详情redhat-release
:系统版本(Redhat)issue
:系统版本(Debian)sysconfig/network-scripts/ifcfg-eth0
:网络配置(Redhat)netplan/00-installer-config.yaml
:网络配置(Debian)yum.repos.d
:yum 配置apt
:apt 配置
/usr
:安装的应用;/home
:普通用户的家目录,命名为/home/用户名
;/root
:超级管理员的家目录;/boot
:启动系统所需的文件,如内核和启动加载程序;/dev
:设备文件;/lib
:系统和应用程序使用的库文件;/media
:挂载可移动媒体设备,如 CD-ROMs 和 USB 闪存驱动;/mnt
:临时挂载文件系统的地方;/opt
:额外安装的应用程序;/proc
:系统进程和内核信息;/srv
:包含服务运行的中间数据;/sys
:包含系统硬件信息和状态;/tmp
:包含临时文件;/var
:变量文件(在运行时会改变)log
:日志文件temp
:临时文件
二. 常见命令
终端操作
cd [<目录>]
:切换目录(默认切换到家目录)~
:切换到家目录-
:切换到上一个目录..
:切换到上级目录
pwd
:显示当前目录clear
:清除终端日志echo <字符串>
:打印字符串curl [<保存的文件名>] <链接>
:获取链接内容-o
:保存成文件,有该参数时才需要指定保存的文件名,默认直接在终端打印出来
date
:查看系统时间-s "2024-04-01 14:30:00"
:修改系统时间
timedatectl
:查看系统时间和时区list-timezones
:列出所有时区(中国时区:Asia/Shanghai)set-timezone <时区>
:设置时区
history
:查看操作历史$PATH
:查看环境变量<鼠标选中>
:复制(Putty 和 SecureCRT 中)<鼠标右键>
:粘贴
系统操作
shutdown [<时间|now>]
: 指定时间后关机或重启(单位:分钟,默认1分钟)-c
:取消之前的shutdown
命令-h
:关机(默认)-r
:重启
reboot
:重启init <数字>
- 0:关机
- 6:重启
- 3:切换命令行界面
- 5:切换可视化界面
systemctl <操作> [<服务名>]
:系统服务管理start
:开启服务stop
:关闭服务restart
:重启服务status
:查看服务状态enable
:允许开机启动disable
:禁止开机启动list-unit-files
:查看所有服务get-default
:查看系统运行级别,graphical.target
图形桌面,multi-user.target
命令行界面
ps -ef
:查看所有进程(可以用ps -ef | grep <进程名>
来搜索指定进程)kill -9 <进程id>
:杀死指定进程ip addr
:查看本地 IP 地址hostname
:查看主机名hostnamectl
:查看主机信息set-hostname <新主机名>
:修改主机名(会修改/etc/hostname
文件)
df
:查看磁盘情况top
:查看任务进程free -h
:查看内存情况firewall-cmd
:防火墙管理--state
:查看状态--list-ports
:查看所有开启端口--add-port=<端口号>/tcp
:开启端口--remove-port=<端口号>/tcp
:关闭端口--permanent
:永久生效,否则重启后失效(在开启关闭端口时使用)--zone=public
:指定公共作用域(在开启关闭端口时使用)--reload
:更新防火墙规则
文件管理
ls [<目录>]
:查看当前或者指定目录下的目录和文件列表-a
:显示所有文件,包含隐藏文件-l
:显示详细-lh
:人性化显示详细
dir [<目录>]
:同ls
ll [<目录>]
:同ls -al
mkdir <目录>
:创建目录-p
:创建多级目录
rmdir <目录>
:删除空目录rm <文件|目录>
:删除文件或目录-r
:递归子目录(删除目录需携带)-f
:强制删除(不询问)
touch <文件>
:创建一个空文件echo [<文件内容>] > <文件>
:创建文件vi <文件>
:打开 vi 编辑器,进入命令模式- 命令模式
i
:进入输入模式ctrl + f
:下一页ctrl + b
:上一页dd
:删除光标所在行3dd
:从光标行开始删除3行yy
:复制光标所在行3yy
:从光标行开复制3行p
:粘贴/<文本>
:搜索文本,按 n 下一项,按 N 上一项:wq
:保存修改并退出:q!
:取消修改并退出:q
:退出:set number
:显示行号
- 输入模式
esc
:退回命令模式
- 命令模式
cat <文件>
:查看文件内容tail <文件>
:查看文件末尾10行-f
:监控文件接下来的追加内容-<行数>
:指定查看末尾几行
sed 's/<目标字符串>/<新字符串>/g' <文件>
:输出替换后的文件内容(没修改原文件)-i
:修改原文件
cp <原文件或目录> <目录|文件>
:复制文件或目录到目标目录,或复制文件到到目标文件-r
:复制目录时携带
mv <原文件|目录> <目录|文件>
:移动文件或目录到目标目录,或移动文件到目标文件(目录不变时相当于重命名)
文件搜索
grep <文本> <文件>
:在文件内搜索指定文本-i
:忽略大小写-v
:排除指定文本
find [<搜索范围>] [<搜索条件> <搜索目标>]
:搜索文件或目录- 搜索范围:默认当前目录
- 搜索条件:
-name
:按名称-iname
:按名称不区分大小写-user
:按所有者-nouser
:按非所有者-atime
:按文件访问时间-ctime
:按文件属性改变时间-mtime
:按文件内容修改时间-size
:按文件大小
- 搜索目标:可以使用通配符
*
:任意内容?
:任意一个字符[]
:任意一个括号中的字符+
:大于某值(在文件时间或文件大小中使用)-
:小于某值
文件压缩
zip <压缩文件> <原文件|目录>
:生成 zip 压缩文件-r
:递归子目录(压缩目录需携带)
unzip <压缩文件>
:解压 zip 文件gzip <原文件|目录>
:将原文件直接压缩成 gz 文件(原文件消失)-r
:压缩目录,将目录中的每个文件压缩成 gz 文件(不会将目录压缩成一个文件)
gunzip <压缩文件>
:解压 gz 文件tar <打包文件名> [-C] <原文件|目录>
:打包文件或目录-c
:打包-x
:解包-z
:打包时压缩(.tar.gz),解包时解压-v
:显示过程-f
:指定打包后的文件名-C
:解包到指定目录(单独的选项,只在解包时有效)
注意
gzip
命令无法直接压缩目录,需要用 tar
命令,通常压缩命令:tar -zcvf xxx.tar.gz xxx
,解压命令:tar -zxvf xx.tar.gz -C xx
。
说明
- Windows 上的压缩格式:zip(通用广泛,算法公开)、rar(压缩率高)、7z(压缩率最高);
- Linux 上的压缩格式:zip、tar(只打包没压缩)、gz(压缩率高);
文件权限
通过 ls -lh
可以查看文件权限信息,如:
# 权限 拥有者 拥有组 文件大小 修改时间 文件名
drwxrwxr-x 2 yuhuo yuhuo 4.0K May 11 17:40 abc
-rw-rw-r-- 1 yuhuo yuhuo 5 May 11 18:01 a.txt
其中权限列可以拆分成 1 + 3 + 3 + 3 共 4 个字段
# 类型 所有者权限 所属组权限 其他用户权限
d rwx rwx r-x
- rw- rw- r--
类型字段 3 种情况:- 文件、d 目录、l 软链接。
权限字段用 rwx
表示,其中 r 可读,w 可写(编辑 / 删除),x 可执行,无则用 - 表示。
chmod <模式> <文件名>
:修改文件权限字符模式:
[ugoa][+-=][rwx]
# 对象:u 拥有者,g 拥有组,o 其他用户,a 所有用户 # 操作:+ 添加,- 去除,= 等于 # 拥有者添加 r 权限 chmod u+r a.txt # 拥有组去除 w 权限 chmod g-w a.txt # 其他用户设为 x 权限,即 --x chmod o=x a.txt
数字模式:
[000]-[777]
# 将 rwx 用二进制表示,再转十进制,如 # --- 000 → 0 # r-x 101 → 5 # rwx 111 → 7 # 将权限设置为 rwx r-x r-x chmod 755 a.txt
用户管理
logout
:退出登录su [<用户名>]
:切换登录用户,用户名为空或为-
时切换到 rootexit
:退出当前登录用户(如果用了su
,则退回到su
之前的用户)w
:查看当前登录信息who
:查看当前登录信息last
:查看历史登录信息lastlog
:所有用户的最后登录信息useradd [-G <组名>] <用户名>
:添加一个用户(组名默认同用户名)groupadd <组名>
:添加一个组usermod -G <组名> <用户名>
:修改用户所在的组userdel <用户名>
:删除用户-f
:强制删除用户,即使用户已登录-r
:删除余用户相关的所有文件
groupdel <组名>
:删除组passwd [<用户名>]
:为用户设置密码,状态改为 P,默认当前登录用户-d
:删除密码,状态改为 NP(无需密码直接登录)-l
:锁定密码,状态改为 L(不能直接登录)-u
:解锁密码,状态改为 P-e
:使密码过期(登录时要求重设密码)-S
:查看密码状态
说明
在 Ubuntu 中,使用初始用户进行一些管理员权限的操作时需要加上 sudo
,并且间隔一段时间就需要输入密码,比较繁琐。我们有时希望能临时切到 root 用户上,有以下的切换方式:
sudo su
:使用 sodo 命令需要输入用户自己密码sudo -i
:同sudo su
su [root | -]
:直接切换到 root,需要输入 root 用户密码(不推荐)
当前用户有管理员权限时(比如 sudo su
或 root 用户),通过 su
命令切换登录到任何用户都不需要输入目标用户的密码。即使目标用户无密码或密码锁定时,也可以切换登录成功。但密码过期时,登录要求重设密码。
Ubuntu 中,root 用户以及通过 useradd
新创建的用户,初始密码状态都是 L 且无密码的(暂且称为禁用状态)。即不能直接登录,也不能通过 passwd -u
来解锁,直至为其设置一个密码。可以通过 passwd -dl
来达到这种禁用状态。
但即使为 root 设置了密码且为可用状态,也无法通过 SSH 直接登录 root 用户,需要先登录其他用户再切换。
说明2
密码状态返回:yuhuo L 05/09/2024 0 99999 7 -1
,从左到右字段解析:
- 用户名:yuhuo
- 状态:L 锁定、P 可用、NP 无密码
- 上次更改日期:05/09/2024
- 最小期限:0 可随时修改
- 最大期限:9999 永不过期
- 警告期:7
- 非活动期:-1 未激活
命令管理
visudo
:用 vi 编辑器打开/etc/sudoers
配置文件sudo <命令及其参数>
:普通用户执行被额外授权的命令whereis <命令>
:查看命令所在目录which <命令>
:查看命令所在目录man <命令>
:查看命令的帮助文档<命令> --help
:查看命令的帮助文档
说明
root 修改 /etc/sudoers
,为普通用户增加额外的命令权限,格式如下:
【用户名 被管理主机地址 = (可使用身份) 授权命令的绝对路径】
如给 yuhuo 增加关机命令权限:yuhuo ALL = (ALL) /usr/sbin/shutdown
之后 yuhuo 变可以 sudo
开头该命令,如:sudo shutdown now
。
软件管理
rpm
RedHat 包管理器,直接安装本地 rpm 包
rpm -ivh <安装包>
:安装软件--nodeps
:如果该软件的安装依赖其他包,即使其他包没装,也强制安装--force
:即使覆盖其他包的文件也强制安装
rpm -q <软件名>
:查询软件是否已安装rpm -qi <软件名>
:查询已安装软件的详细信息rpm -ql <软件名>
:查询已安装软件的相关文件rpm -qf <文件|目录>
:查询某个文件或目录属于哪一个软件rpm -qa
:查询所有已安装的软件rpm -e <软件名>
:删除软件
yum
RedHat 包管理器,从远程仓库统一下载安装 rpm 包,解决多个软件相互依赖的问题
yum install <软件名>
:安装软件-y
:不询问,统一 yes
yum list
:查看所有软件installed
:查看所有已安装的软件
yum remove <软件名>
:卸载软件yum update <软件名>
:更新软件yum makecache
:清除缓存
apt
Debian 包管理器,从远程仓库统一下载安装 deb 包,与 yum 类似。
apt install <软件名>
:安装软件-y
:不询问,统一 yes--only-upgrade
:已安装的情况下,更新
apt list
:查看所有软件--installed
:查看所有已安装的软件
apt remove <软件名>
:卸载软件--purge
:删除配置文件(默认保留)
apt autoremove <软件名>
:卸载软件及其依赖--purge
:删除配置文件(默认保留)
apt update <软件名>
:更新软件apt clean
:清除缓存
三. 软件安装
yum 源
新增 epel 源
yum install -y epel-release
base 源配置阿里云镜像
cd /etc/yum.repos.d
# 备份base源配置文件
mv CentOS-Base.repo CentOS-Base.repo_bak
# 下载阿里云镜像的配置文件
curl -o CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 更新缓存
yum makecache
apt 源
查看 apt 源配置文件,里面的源地址为 http://cn.archive.ubuntu.com/ubuntu/
,打开后重定向到清华镜像站,因此无需再修改配置了。
cd /etc/apt/
# 查看配置文件
sudo cat sources.list
# 更新 apt 源
sudo apt update
net-tools
安装 net-tools
yum install -y net-tools
查看端口占用信息
netstat -lnp
# 直接搜索指定端口被哪个进程占用
netstat -lnp| grep 80
ntp
安装 ntp
yum install -y ntp
同步网络时间
# pool.ntp.org 是一个 NTP 服务器
ntpdate pool.ntp.org
wget
安装 wget
# yum
yum install -y wget
# apt
apt install -y wget
下载文件
wget https://www.baidu.com