Linux

yuhuo2024-03-29开发工具
参考链接

一. 入门指南

发行版

  • Debian 系列
    • Debian:稳定安全,历史悠久,是很多其他版本的基础
    • Ubuntu:基于 Debian,桌面完善,社区庞大
    • Deepin:基于 Debian,桌面完善,国产
  • RedHat 系列
    • RHEL(Red Hat Enterprise Linux):RedHat 的商业版 收费
    • CentOS:RedHat 的社区版(2024.6 之后停止支持)
    • Fedora:RedHat 的创新版,集合最新功能

下载镜像

打开 阿里云镜像站open in new window,点击 OS镜像,在弹窗中选择发行版和具体版本进行下载。

发行版根据流行程度首选 CentOS 或 Ubuntu,具体版本可以考虑其最后一个长期支持版(最小版,不带桌面,作为服务器不需要)。

虚拟机软件

VMware

分为 VMware Workstation Playeropen in new windowVMware Workstation Proopen in new window 两个版本。

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。

网络设置如下:

  1. 打开 控制面板 - 网络和 Internet - 网络和共享中心 - 更改适配器设置,可以看到 Hyper-V 默认虚拟交换机 vEthernet (Default Switch),状态显示已启用;

  2. WLAN 右键属性 - 共享选项 - 勾选允许其他网络用户...来连接 - 下拉框选择 vEthernet (Default Switch)(当只有这一个可共享时,没有下拉框,默认就是它) - 确定;

  3. vEthernet(Default Switch)右键属性 - 查看 TCP/IPv4 属性(此时已分配固定 IP 地址,如 192.168.137.1。在第 2 步之前是固定其他 IP 地址);

  4. 回到 Hyper-V 管理器,设置虚拟机的网络适配器为 Default Switch(或在新建虚拟机时已选择);

  5. 连接虚拟机,查看 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 [<用户名>]:切换登录用户,用户名为空或为 - 时切换到 root
  • exit:退出当前登录用户(如果用了 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
Last Updated 2024/6/1 18:19:10