黑马linux入门笔记(01)初始Linux Linux基础命令 用户和权限 实用操作

B站 黑马程序员 的视频 BV1n84y1i7td 黑马程序员新版Linux零基础快速入门到精通,全涵盖linux系统知识、常用软件环境部署、Shell脚本、云平台实践、大数据集群项目实战等

增强自控力

  1. 冥想
  2. 慢呼吸
  3. 绿色锻炼
  4. 充分休息
  5. 减少决策次数
  6. 优先做重要的事情(早晨)
  7. 融入强自控群
  8. 控制冲动情绪,心理暗示自己
  9. 取消道德许可,牢记目标
  10. 自我原谅适度放松

文章目录

  • Linux零基础快速入门到精通
    • [第一章 初始Linux](#第一章 初始Linux)
      • [1 初始Linux](#1 初始Linux)
      • [2 VMware WorkStation安装](#2 VMware WorkStation安装)
      • [3 FinalShell远程Linux操作系统](#3 FinalShell远程Linux操作系统)
      • [4 快照](#4 快照)
    • [第二章 Linux基础命令](#第二章 Linux基础命令)
      • [1 命令入门(ls cd mkdir)](#1 命令入门(ls cd mkdir))
      • [2 文件操作命令part1(touch、cat、more)](#2 文件操作命令part1(touch、cat、more))
        • [1. `touch` 命令](#1. touch 命令)
        • [2. `cat` 命令](#2. cat 命令)
        • [3. `more` 命令](#3. more 命令)
        • 总结对比
      • [3 文件操作命令part2(cp、mv、rm)](#3 文件操作命令part2(cp、mv、rm))
        • [1. `cp` 命令](#1. cp 命令)
        • [2. `mv` 命令](#2. mv 命令)
        • [3. `rm` 命令](#3. rm 命令)
        • 命令对比总结
      • [4 查找命令(which、find)](#4 查找命令(which、find))
        • [1. `which` 命令](#1. which 命令)
        • [2. `find` 命令](#2. find 命令)
        • [`which` 和 `find` 的对比](#whichfind 的对比)
      • [5 grep、wc和管道符](#5 grep、wc和管道符)
        • [1. grep 命令](#1. grep 命令)
        • [2. wc 命令](#2. wc 命令)
        • [3. 管道符(`|`)](#3. 管道符(|))
        • 总结
      • [6 echo、tail和重定向符](#6 echo、tail和重定向符)
        • [1. echo 命令](#1. echo 命令)
        • [2. tail 命令](#2. tail 命令)
        • [3. 重定向符](#3. 重定向符)
        • 总结
      • [7 vi编辑器](#7 vi编辑器)
    • [第三章 用户和权限](#第三章 用户和权限)
      • [1 认识root用户](#1 认识root用户)
        • [1 root用户](#1 root用户)
        • [2. su命令](#2. su命令)
        • [3. sudo命令](#3. sudo命令)
      • [2 用户、用户组管理](#2 用户、用户组管理)
      • [3 权限控制](#3 权限控制)
        • [1 查看权限控制](#1 查看权限控制)
        • [2 修改权限控制 - chmod](#2 修改权限控制 - chmod)
        • [3 修改权限控制 - chown](#3 修改权限控制 - chown)
          • 基本语法
          • 常用的选项
            • [1. 修改文件或目录的所有者](#1. 修改文件或目录的所有者)
            • [2. 修改文件或目录的用户组](#2. 修改文件或目录的用户组)
            • [3. 修改文件的所有者和用户组](#3. 修改文件的所有者和用户组)
            • [4. 递归修改目录及其内容的所有者和用户组](#4. 递归修改目录及其内容的所有者和用户组)
            • [5. 使用参考文件设置所有者和用户组](#5. 使用参考文件设置所有者和用户组)
            • [6. 查看文件的所有者和用户组](#6. 查看文件的所有者和用户组)
            • [7. 举例说明](#7. 举例说明)
          • 总结
    • [第四章 Linux实用操作](#第四章 Linux实用操作)
      • [1 常用快捷键](#1 常用快捷键)
      • [2 软件安装](#2 软件安装)
      • [3 systemctl](#3 systemctl)
      • [4 使用ln创建软连接](#4 使用ln创建软连接)
        • [1. 创建软链接到文件](#1. 创建软链接到文件)
        • [2. 创建软链接到目录](#2. 创建软链接到目录)
      • [5 日期、时区](#5 日期、时区)
        • [1. 查看日期和时间(`date` 命令)](#1. 查看日期和时间(date 命令))
        • [2. 修改 Linux 系统时区](#2. 修改 Linux 系统时区)
        • [3. 使用 NTP 进行时间同步和校准](#3. 使用 NTP 进行时间同步和校准)
      • [6 IP地址、主机名](#6 IP地址、主机名)
      • [7 网络传输](#7 网络传输)
        • [1 下载和网络请求](#1 下载和网络请求)
          • [1. 使用 `ping` 检查服务器是否可联通](#1. 使用 ping 检查服务器是否可联通)
          • [2. 使用 `wget` 下载文件](#2. 使用 wget 下载文件)
          • [3. 使用 `curl` 发起网络请求](#3. 使用 curl 发起网络请求)
        • [2 端口](#2 端口)
      • [8 进程管理](#8 进程管理)
        • [1. 查看进程](#1. 查看进程)
        • [2. 终止进程](#2. 终止进程)
        • [3. 修改进程优先级](#3. 修改进程优先级)
        • [4. 后台进程管理](#4. 后台进程管理)
        • [5. 查看和管理系统资源](#5. 查看和管理系统资源)
        • [6. 常用进程管理命令总结](#6. 常用进程管理命令总结)
      • [9 主机状态](#9 主机状态)
        • 查看系统资源占用
        • top命令选项
        • top交互式选项
        • 磁盘信息监控
          • [1. `df` 命令:查看磁盘空间使用情况](#1. df 命令:查看磁盘空间使用情况)
          • [2. `du` 命令:查看目录和文件的磁盘使用情况](#2. du 命令:查看目录和文件的磁盘使用情况)
          • [3. `lsblk` 命令:显示磁盘分区信息](#3. lsblk 命令:显示磁盘分区信息)
          • [4. `fdisk` 和 `parted` 命令:查看磁盘分区](#4. fdiskparted 命令:查看磁盘分区)
          • [5. `iostat` 命令:查看磁盘性能](#5. iostat 命令:查看磁盘性能)
        • 网络状态监控
          • [1. `ifconfig` / `ip` 命令:查看网络接口信息](#1. ifconfig / ip 命令:查看网络接口信息)
          • [2. `netstat` / `ss` 命令:查看网络连接和端口](#2. netstat / ss 命令:查看网络连接和端口)
          • [3. `ping` 命令:测试网络连通性](#3. ping 命令:测试网络连通性)
          • [4. `traceroute` 命令:追踪网络路径](#4. traceroute 命令:追踪网络路径)
          • [5. `nmap` 命令:端口扫描和网络安全](#5. nmap 命令:端口扫描和网络安全)
          • [6. `iftop` 命令:实时流量监控](#6. iftop 命令:实时流量监控)
          • [7. `tcpdump` 命令:抓包工具](#7. tcpdump 命令:抓包工具)
          • [8. `vnstat` 命令:带宽监控](#8. vnstat 命令:带宽监控)
      • [10 环境变量](#10 环境变量)
      • [11 上传、下载](#11 上传、下载)
      • [12 压缩、解压](#12 压缩、解压)
        • [2. 使用 `tar` 进行打包和解压](#2. 使用 tar 进行打包和解压)
        • [5. 使用 `zip` 和 `unzip` 压缩/解压](#5. 使用 zipunzip 压缩/解压)

Linux零基础快速入门到精通

切换阿里云镜像

  1. 检查网络连接
  • 确保您的系统能够连接到互联网:
bash 复制代码
ping -c 4 8.8.8.8

如果无法成功 ping 通,则说明网络配置有问题,需要检查网络接口配置。

  1. 检查 DNS 配置
  • 确保 /etc/resolv.conf 文件中配置了有效的 DNS 服务器。例如:
bash 复制代码
cat /etc/resolv.conf

如果没有内容,或 DNS 配置无效,可以添加 Google 的公共 DNS:

bash 复制代码
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
  1. 切换镜像源
  • 如果网络正常,但仍然无法访问 mirrorlist.centos.org,可以切换到其他镜像源,如阿里云或清华大学的镜像源。

替换 YUM 源为阿里云

  1. 备份当前的 YUM 配置:
bash 复制代码
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
  1. 下载阿里云的 CentOS 7 YUM 配置:
bash 复制代码
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  1. 清除缓存并重新生成缓存:
bash 复制代码
yum clean all
yum makecache

替换为清华大学的镜像源

  1. 替换清华源:
bash 复制代码
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/repos/CentOS-7.repo
  1. 同样清除缓存并重新生成缓存:
bash 复制代码
yum clean all
yum makecache
  1. 更新系统
  • 更新系统可能会修复一些潜在的配置问题:
bash 复制代码
yum -y update

大概等10分钟

如果以上步骤无法解决问题,请提供更多的网络环境信息(如 ifconfigip addr 输出),以便进一步排查。

第一章 初始Linux

1 初始Linux

Linux创始人:林纳斯 托瓦兹

Linux系统的组成 :

  • 1 Linux系统内核(Kernel)
  • 定义:Linux内核是Linux系统的核心部分,直接与硬件交互,并为上层应用程序提供基础服务。
  • 功能
    • 硬件管理:如CPU、内存、I/O设备的管理。
    • 进程管理:负责进程的创建、调度和终止。
    • 文件系统管理:支持多种文件系统(如ext4、XFS)。
    • 网络管理:提供网络协议支持(如TCP/IP)。
    • 设备驱动:通过驱动程序管理外部设备。
  • 2 系统级应用程序
  • 定义:系统级应用程序是直接运行在操作系统上的程序,提供系统管理和用户交互功能。
  • 组成
    • Shell(命令行解释器):如Bash、Zsh,用于用户与系统的交互。
    • 实用工具 :如文件操作命令(cpmvrm),文本处理工具(grepawk)。
    • 守护进程(Daemon) :在后台运行的程序,如cron(计划任务)、sshd(远程登录服务)。
    • 包管理工具 :如apt(Debian系)、yum(Red Hat系),用于安装和管理软件包。
  • 3 用户级应用程序(User Applications)
  • 定义:用户直接使用的应用程序,包括桌面环境、浏览器、媒体播放器等。
  • 特点:基于系统级应用和内核提供的服务运行

什么是虚拟机?

通过虚拟化技术,在电脑内,虚拟出计算机硬件,并给虚拟的硬件安装操作系统,即可得到一台虚拟的电脑,称之为虚拟机。

为什么要使用虚拟机?

学习Linux系统,需要有Linux系统环境。

我们不能给自己电脑重装系统为Linux,所以通过虚拟机的形式,得到可以用的Linux系统环境,供后续学习使用。

2 VMware WorkStation安装

或者通过快捷键:win + r输入ncpa.cpl回车即可打开网络连接

下载CentOS镜像

https://vault.centos.org/7.6.1810/isos/x86_64/

用户名:centos

密码:1234

3 FinalShell远程Linux操作系统

无论是企业开发亦或是个人开发,使用Linux操作系统,多数都是使用的:命令行

我们使用VMware可以得到Linux虚拟机,但是在VMware中操作Linux的命令行页面不太方便,主要是:

内容的复制、粘贴跨越VMware不方便

文件的上传、下载跨越VMware不方便

也就是和Linux系统的各类交互,跨越VMware不方便

4 快照

VMware虚拟机(Workstation和Funsion)支持为虚拟机制作快照。

通过快照将当前虚拟机的状态保存下来,在以后可以通过快照恢复虚拟机到保存的状态。

快照可以保存虚拟机的状态, 当虚拟机出现问题的时候, 可以通过预先制作的快照恢复到制作时候的状态, 用作备份用。

第二章 Linux基础命令

1 命令入门(ls cd mkdir)

Linux的目录结构是一个树型结构

Windows 系统可以拥有多个盘符, 如 C盘、D盘、E盘

Linux没有盘符这个概念, 只有一个根目录 /, 所有文件都在它下面

在Linux系统中,路径之间的层级关系,使用:/ 来表示 /usr/local/hello.txt

在Windows系统中,路径之间的层级关系,使用: \ 来表示 D:\data\work\hello.txt

Linux命令基础格式

无论是什么命令,用于什么用途,在Linux中,命令有其通用的格式:

command [-options] [parameter]

command: 命令本身

-options:[可选,非必填]命令的一些选项,可以通过选项控制命令的行为细节

parameter:[可选,非必填]命令的参数,多数用于命令的指向目标等

ls 是 Linux 系统中用于列出目录内容的命令,常用于查看当前目录下的文件和子目录。


ls命令基本语法
bash 复制代码
ls [选项] [目录或文件路径]

常用选项

  1. 列出目录内容
bash 复制代码
ls
- 列出当前目录下的文件和子目录,按默认顺序显示(不显示隐藏文件)。
  1. 显示详细信息
bash 复制代码
ls -l
- 以长格式显示,包含权限、所有者、大小、修改时间等信息。
  1. 显示隐藏文件
bash 复制代码
ls -a
- 列出所有文件,包括隐藏文件(以 `.` 开头的文件)。
  1. 按人类可读方式显示文件大小
bash 复制代码
ls -lh
- 文件大小以人类可读的格式显示(如 KB、MB)。
  1. 递归显示子目录内容
bash 复制代码
ls -R
- 列出当前目录及其所有子目录的内容。
  1. 显示文件修改时间
bash 复制代码
ls -lt
- 按修改时间排序(最新的文件在最上面)。
  1. 只显示目录
bash 复制代码
ls -d */
- 列出当前目录下的所有子目录。
  1. 显示文件的inode号
bash 复制代码
ls -i
- 显示文件的inode编号(文件在文件系统中的唯一标识)。
  1. 按文件大小排序
bash 复制代码
ls -lS
- 按文件大小排序(从大到小)。
  1. 颜色显示
bash 复制代码
ls --color=auto
- 按不同颜色显示文件类型和权限(通常系统默认启用)。

组合使用

  • 列出所有文件,详细信息,人类可读的大小
bash 复制代码
ls -alh
  • 按时间排序显示隐藏文件
bash 复制代码
ls -lat
  • 列出当前目录及所有子目录内容,详细信息
bash 复制代码
ls -lR

显示结果示例

bash 复制代码
$ ls -lh
-rw-r--r--  1 user group 1.2K Jan  8  2025 example.txt
drwxr-xr-x  2 user group 4.0K Jan  8  2025 my_directory/
  • 第一列:文件权限。
  • 第二列:硬链接数。
  • 第三列:所有者。
  • 第四列:所属组。
  • 第五列:文件大小。
  • 第六列:最后修改日期。
  • 第七列:文件或目录名称。

帮助与手册

  • 查看命令的简要帮助:
bash 复制代码
ls --help
  • 查看详细手册:
bash 复制代码
man ls

Linux系统的命令行终端,在启动的时候,默认会加载:

当前登录用户的HOME目录作为当前工作目录,所以ls命令列出的是HOME目录的内容

HOME目录:每个Linux操作用户在Linux系统的个人账户目录,路径在:/home/用户名

cd切换工作目录

cd (change directory)命令是 Linux 和类 Unix 系统中用来切换工作目录的命令。它允许用户在不同目录间切换,以便访问或操作文件和目录。


基本语法

bash 复制代码
cd [目标目录路径]
  • 目标目录路径:可以是绝对路径或相对路径。

常用操作

  1. 切换到指定目录
bash 复制代码
cd /path/to/directory
- 例如:`cd /home/user/documents`,切换到 `/home/user/documents` 目录。
  1. 切换到上级目录
bash 复制代码
cd ..
- `..` 表示当前目录的上一级目录。
  1. 切换到当前用户的主目录
bash 复制代码
cd ~
- 或直接使用 `cd` 不带任何参数。
- 主目录通常是 `/home/username`。
  1. 切换到上次访问的目录
bash 复制代码
cd -
- 切换到之前的工作目录,并显示该目录的路径。
  1. 使用相对路径切换目录
bash 复制代码
cd subdirectory
- 如果当前目录为 `/home/user`,运行 `cd documents` 则切换到 `/home/user/documents`。
  1. 切换到根目录
bash 复制代码
cd /
- `/` 是文件系统的根目录。
  1. 使用环境变量切换
    • 切换到某个特定目录(示例: **$HOME**** 或自定义变量)**:
bash 复制代码
cd $HOME
- **环境变量可以指向常用的目录**,如: 
bash 复制代码
export MYDIR=/path/to/mydir
cd $MYDIR

常见路径符号

符号 说明
. 当前目录
.. 上一级目录
~ 当前用户的主目录(如 /home/username
/ 文件系统根目录

查看当前目录

使用以下命令pwd(print work directory)可以查看当前工作目录:

bash 复制代码
pwd

示例操作

  1. 切换到 /etc 目录:
bash 复制代码
cd /etc
  1. /etc 切换到其上一级目录 /
bash 复制代码
cd ..
  1. 切换到主目录:
bash 复制代码
cd ~
  1. 切换回刚才的目录:
bash 复制代码
cd -

常见错误及解决方法

  1. 目录不存在
bash 复制代码
cd /nonexistent

错误:No such file or directory

解决:确认目标目录路径是否正确。

  1. 权限不足
bash 复制代码
cd /root

错误:Permission denied

解决:使用具有足够权限的账户(如sudo)。


帮助与参考

  • 查看帮助:
bash 复制代码
help cd
  • 手册: cd 通常是 Shell 内置命令,因此不在 man 中显示,但可以查阅 Shell 文档或内置帮助系统。
相对路径和绝对路径

绝对路径:以根目录为起点,描述路径的一种写法,路径描述以/开头

相对路径:以当前目录为起点,描述路径的一种写法,路径描述无需以/开头

创建目录命令(mkdir)

mkdir (makedirectory)是 Linux 系统中用来创建目录的命令。它可以创建一个或多个目录,支持指定权限或递归创建路径。


基本语法

bash 复制代码
mkdir [选项] 目录名称

常用选项

  1. 创建单个目录
bash 复制代码
mkdir directory_name
- 示例:`mkdir mydir`  

创建名为 mydir 的目录。

  1. 递归创建多级目录
bash 复制代码
mkdir -p parent_directory/child_directory
- 示例:`mkdir -p /home/user/projects/myproject`  

如果父目录不存在,-p 选项会自动创建所有必要的父目录。

  1. 指定权限创建目录
bash 复制代码
mkdir -m mode directory_name
- 示例:`mkdir -m 755 mydir`  

创建目录并设置权限为 755(用户可读写执行,组和其他用户可读执行)。

  1. 显示创建的目录路径
bash 复制代码
mkdir -v directory_name
- 示例:`mkdir -v mydir`  

显示类似输出:mkdir: created directory 'mydir'

  1. 结合多个选项
bash 复制代码
mkdir -pv /home/user/newproject/subdir
- 创建多级目录,并显示创建过程。

目录权限说明

  • 使用 -m 选项指定权限时,可以使用八进制模式(如777)或符号模式(如u=rwx,g=rx,o=rx)。
  • 权限可以通过 chmod 命令修改。

常见示例

  1. 创建多个目录
bash 复制代码
mkdir dir1 dir2 dir3
- 同时创建 `dir1`、`dir2` 和 `dir3` 三个目录。
  1. 递归创建目录
bash 复制代码
mkdir -p /tmp/test/project
- 如果 `/tmp/test` 不存在,会自动创建。
  1. 创建目录并设置权限
bash 复制代码
mkdir -m 700 secure_dir
- 创建 `secure_dir`,并设置权限为仅用户可读写执行。
  1. 查看创建过程
bash 复制代码
mkdir -v mydir
- 输出创建过程:`mkdir: created directory 'mydir'`。

错误和解决方法

  1. 目录已存在
bash 复制代码
mkdir mydir

错误:mkdir: cannot create directory 'mydir': File exists

解决:确认目录是否已经存在,或使用 mkdir -p

  1. 权限不足
bash 复制代码
mkdir /root/newdir

错误:mkdir: cannot create directory '/root/newdir': Permission denied

解决:使用 sudo 提升权限:

bash 复制代码
sudo mkdir /root/newdir

查看帮助和手册

  • 简要帮助:
bash 复制代码
mkdir --help
  • 查看手册:
bash 复制代码
man mkdir

总结

mkdir 是一个简单而强大的工具,用于创建目录。结合 -p 和权限选项,可以适应大多数目录创建需求,是 Linux 文件系统管理的重要基础命令之一。

2 文件操作命令part1(touch、cat、more)

以下是 Linux 文件操作命令中的三个基本命令:touchcatmore 的详细介绍及其用法。


1. touch 命令

touch 命令主要用于创建空文件或更新文件的时间戳。

基本用法

  1. 创建空文件
bash 复制代码
touch filename
- 示例:`touch file1`  

如果 file1 不存在,会创建一个空文件;如果文件已存在,仅更新其时间戳。

  1. 同时创建多个文件
bash 复制代码
touch file1 file2 file3
- 示例:`touch doc1 doc2 doc3`  

创建 doc1doc2doc3

  1. 更新文件时间戳
bash 复制代码
touch -c filename
- 示例:`touch -c file1`  

如果文件存在,更新其访问和修改时间;如果文件不存在,不创建新文件。

  1. 设置特定时间
bash 复制代码
touch -t [[CC]YY]MMDDhhmm[.ss] filename
- 示例:`touch -t 202501081230 file1`  

file1 的时间设置为 2025 年 1 月 8 日 12:30。


2. cat 命令

cat 命令用于查看文件内容、合并文件或创建文件。

基本用法

  1. 查看文件内容
bash 复制代码
cat filename
- 示例:`cat file1`  

显示 file1 的内容。

  1. 显示行号
bash 复制代码
cat -n filename
- 示例:`cat -n file1`  

为文件内容添加行号并显示。

  1. 将多个文件合并为一个文件
bash 复制代码
cat file1 file2 > merged_file
- 示例:`cat part1.txt part2.txt > combined.txt`  

part1.txtpart2.txt 的内容合并到 combined.txt

  1. 创建文件
bash 复制代码
cat > filename
- 示例:`cat > file1`  

输入内容后按 Ctrl+D 保存。

  1. 追加内容到文件
bash 复制代码
cat >> filename
- 示例:`cat >> file1`  

file1 中追加内容,输入完成后按 Ctrl+D


3. more 命令

more 命令用于分页显示文件内容,适合查看较长文件。

基本用法

  1. 分页显示文件内容
bash 复制代码
more filename
- 示例:`more largefile.txt`  

分页显示 largefile.txt 的内容,每次显示一页。

  1. 与管道结合使用
bash 复制代码
command | more
- 示例:`ls -l | more`  

分页显示 ls -l 的输出。

  1. 常用快捷键
    • 空格键:显示下一页。
    • Enter:向下滚动一行。
    • b:返回上一页。
    • q:退出查看。

总结对比
命令 功能说明 常见场景
touch 创建文件或更新文件时间戳 创建新文件
cat 查看文件内容,创建或合并文件 查看文件或合并多个文件
more 分页查看文件内容 查看大文件内容,逐页显示

帮助与手册

  • touchman touchtouch --help
  • catman catcat --help
  • moreman moremore --help

3 文件操作命令part2(cp、mv、rm)

以下是 Linux 文件操作命令中的三个重要命令:cpmvrm 的详细介绍及用法。


1. cp 命令

cp 命令用于复制文件或目录。

基本用法

  1. 复制文件
bash 复制代码
cp source_file destination
- 示例:`cp file1.txt /home/user/`  

file1.txt 复制到 /home/user/ 目录。

  1. 复制多个文件到指定目录
bash 复制代码
cp file1.txt file2.txt /home/user/
- 示例:将 `file1.txt` 和 `file2.txt` 复制到 `/home/user/`。
  1. 递归复制目录
bash 复制代码
cp -r source_directory destination
- 示例:`cp -r mydir /home/user/`  

将目录 mydir 及其内容复制到 /home/user/

  1. 提示覆盖文件
bash 复制代码
cp -i source_file destination
- 示例:`cp -i file1.txt /home/user/`  

如果目标文件已存在,会提示用户是否覆盖。

  1. 保留文件属性
bash 复制代码
cp -p source_file destination
- 示例:`cp -p file1.txt /home/user/`  

复制文件时保留原始权限、时间戳和所有者。

  1. 显示复制进度
bash 复制代码
cp -v source_file destination
- 示例:`cp -v file1.txt /home/user/`  

显示文件复制过程。


2. mv 命令

mv 命令用于移动或重命名文件和目录。

基本用法

  1. 移动文件到指定目录
bash 复制代码
mv source_file destination
- 示例:`mv file1.txt /home/user/`  

file1.txt 移动到 /home/user/

  1. 移动多个文件到指定目录
bash 复制代码
mv file1.txt file2.txt /home/user/
- 示例:将 `file1.txt` 和 `file2.txt` 移动到 `/home/user/`。
  1. 重命名文件或目录
bash 复制代码
mv old_name new_name
- 示例:`mv file1.txt file2.txt`  

file1.txt 重命名为 file2.txt

  1. 提示覆盖文件
bash 复制代码
mv -i source_file destination
- 示例:`mv -i file1.txt /home/user/`  

如果目标文件已存在,会提示用户是否覆盖。

  1. 强制覆盖文件
bash 复制代码
mv -f source_file destination
- 示例:`mv -f file1.txt /home/user/`  

强制覆盖目标文件。

  1. 显示移动过程
bash 复制代码
mv -v source_file destination
- 示例:`mv -v file1.txt /home/user/`  

显示文件移动的详细信息。


3. rm 命令

rm 命令用于删除文件或目录。

基本用法

  1. 删除文件
bash 复制代码
rm filename
- 示例:`rm file1.txt`  

删除 file1.txt

  1. 删除多个文件
bash 复制代码
rm file1.txt file2.txt
- 示例:删除 `file1.txt` 和 `file2.txt`。
  1. 递归删除目录
bash 复制代码
rm -r directory_name
- 示例:`rm -r mydir`  

删除目录 mydir 及其内容。

  1. 强制删除文件
bash 复制代码
rm -f filename
- 示例:`rm -f file1.txt`  

强制删除文件,忽略不存在的文件和提示。

  1. 递归强制删除目录
bash 复制代码
rm -rf directory_name
- 示例:`rm -rf mydir`  

强制删除目录 mydir 及其内容。

  1. 提示删除确认
bash 复制代码
rm -i filename
- 示例:`rm -i file1.txt`  

删除前逐一提示用户确认。


命令对比总结
命令 功能说明 常见场景
cp 复制文件或目录 文件备份、复制目录内容
mv 移动或重命名文件或目录 文件重命名、移动文件到指定目录
rm 删除文件或目录 删除无用文件或清理目录内容

注意事项

  1. **rm**** 删除操作不可逆**:删除后无法恢复,使用时需小心,尤其是 rm -rf
  2. 检查路径 :在使用 cpmv 时,确认目标路径正确,避免误操作。
  3. 权限问题 :如果操作失败,可能需要使用 sudo 提升权限。

帮助与手册

  • cpman cpcp --help
  • mvman mvmv --help
  • rmman rmrm --help

恢复快照就行了

4 查找命令(which、find)

以下是 Linux 系统中两个常用的查找命令:whichfind 的详细介绍及其用法。


1. which 命令

which 用于查找可执行文件的路径,它会在系统环境变量 $PATH 中查找命令的所在位置。

基本用法

  1. 查找命令的绝对路径
bash 复制代码
which command_name
- 示例:查找 `ls` 命令的路径 
bash 复制代码
which ls

输出:/bin/ls

  1. 查找多个命令的路径
bash 复制代码
which command1 command2
- 示例: 
bash 复制代码
which ls pwd

输出:

plain 复制代码
/bin/ls
/bin/pwd
  1. 查看某命令是否存在
    • 如果命令不存在,which 会返回空值。

适用场景

  • 确定某命令是否安装。
  • 确认正在使用的命令路径(如检查是否是系统自带还是自定义安装的命令)。

2. find 命令

find 是功能强大的查找工具,用于在目录中查找文件或目录,支持基于名称、大小、时间等多种条件的搜索。

基本用法

  1. 按名称查找文件
bash 复制代码
find path -name filename
- 示例:在 `/home/user` 中查找名为 `test.txt` 的文件 
bash 复制代码
find /home/user -name "test.txt"
  1. 按文件类型查找
bash 复制代码
find path -type file_type
- 文件类型说明: 
    * `f`:普通文件
    * `d`:目录
    * `l`:符号链接
- 示例:查找 `/var` 下的所有目录 
bash 复制代码
find /var -type d
  1. 按大小查找
bash 复制代码
find path -size [+|-]size
- 示例:查找大于 10MB 的文件 
bash 复制代码
find /home -size +10M
  1. 按修改时间查找
bash 复制代码
find path -mtime [+|-]days
- 示例:查找最近 7 天修改过的文件 
bash 复制代码
find /home -mtime -7
  1. 执行操作
bash 复制代码
find path -name filename -exec command {} \;
- 示例:删除 `/tmp` 目录下的所有 `.log` 文件 
bash 复制代码
find /tmp -name "*.log" -exec rm -f {} \;
  1. 查找并打印结果
    • 使用 -print 显式打印查找结果(一般默认启用)。
bash 复制代码
find /path -name "*.txt" -print

find 的高级选项

  1. 组合条件
    • 逻辑与-a 或省略
bash 复制代码
find /home -type f -size +1M -name "*.txt"
- **逻辑或**:`-o`
bash 复制代码
find /home -type f -name "*.txt" -o -name "*.log"
  1. 忽略大小写
bash 复制代码
find /home -iname "*.txt"
- `-iname` 用于忽略文件名大小写。
  1. 限制查找深度
bash 复制代码
find /home -maxdepth depth
- 示例:只在当前目录查找 
bash 复制代码
find /home -maxdepth 1 -name "*.txt"

whichfind 的对比
功能 which find
用途 查找命令的可执行路径 查找文件、目录或满足特定条件的对象
查找范围 $PATH 环境变量中的路径 用户指定的目录范围
支持条件 无条件 支持多种条件(名称、大小、时间等)
输出 可执行文件的路径 文件或目录的完整路径
使用场景 快速定位命令所在路径 灵活搜索文件、目录

帮助与手册

  • which
bash 复制代码
which --help
man which
  • find
bash 复制代码
find --help
man find

5 grep、wc和管道符

1. grep 命令

grep 是 Linux 中的强大工具,用于在文件或输入中搜索指定的字符串或模式,并输出匹配的行。

基本语法

bash 复制代码
grep [选项] "匹配模式" 文件

常用选项

  1. 搜索指定字符串
bash 复制代码
grep "关键字" 文件名

示例:搜索文件 test.txt 中包含 "error" 的行:

bash 复制代码
grep "error" test.txt
  1. 忽略大小写
bash 复制代码
grep -i "关键字" 文件名

示例:

bash 复制代码
grep -i "Error" test.txt
  1. 显示行号
bash 复制代码
grep -n "关键字" 文件名

示例:显示匹配行的行号:

bash 复制代码
grep -n "error" test.txt
  1. 递归搜索目录
bash 复制代码
grep -r "关键字" 目录

示例:递归搜索当前目录及其子目录中包含 "error" 的文件:

bash 复制代码
grep -r "error" .
  1. 使用正则表达式
bash 复制代码
grep -E "正则表达式" 文件名

示例:匹配包含数字的行:

bash 复制代码
grep -E "[0-9]+" test.txt

2. wc 命令

wc 用于统计文件的行数、单词数和字符数。

基本语法

bash 复制代码
wc [选项] 文件

常用选项

  1. 统计行数
bash 复制代码
wc -l 文件名

示例:统计文件 test.txt 的行数:

bash 复制代码
wc -l test.txt
  1. 统计单词数
bash 复制代码
wc -w 文件名

示例:统计文件 test.txt 的单词数:

bash 复制代码
wc -w test.txt
  1. 统计字符数
bash 复制代码
wc -c 文件名

示例:统计文件 test.txt 的字符数:

bash 复制代码
wc -c test.txt
  1. 同时显示行数、单词数和字符数
bash 复制代码
wc 文件名

示例:

bash 复制代码
wc test.txt

3. 管道符(|

管道符 | 用于将一个命令的输出作为另一个命令的输入,通常用于组合多个命令来处理数据。

管道符的用法

bash 复制代码
命令1 | 命令2

grep、wc 和管道符的组合示例

  1. 统计文件中包含关键字的行数
bash 复制代码
grep "关键字" 文件名 | wc -l

示例:统计 test.txt 中包含 "error" 的行数:

bash 复制代码
grep "error" test.txt | wc -l
  1. 统计当前目录下的文件数量
bash 复制代码
ls | wc -l

示例:统计当前目录下的文件和子目录数量:

bash 复制代码
ls | wc -l
  1. 查看系统日志中错误的行数
bash 复制代码
grep "error" /var/log/syslog | wc -l
  1. 结合正则表达式统计匹配的结果 示例:统计包含数字的行数:
bash 复制代码
grep -E "[0-9]+" test.txt | wc -l
  1. 动态过滤命令输出 示例:查看某个命令的输出并过滤包含特定关键词的行:
bash 复制代码
ps aux | grep "java"

总结
命令 功能 示例
grep 搜索文件内容 grep "error" test.txt
wc 统计文件行数、单词数、字符数 wc -l test.txt
管道符 将一个命令的输出作为另一个命令的输入 `ls

通过组合使用 grepwc 和管道符,可以高效完成文本筛选、统计和分析任务,是 Linux 系统中处理数据的常用技巧。

6 echo、tail和重定向符

1. echo 命令

基本功能

echo 用于在终端输出字符串或变量的值,是 Linux 中最基础的输出命令之一。

基本语法

bash 复制代码
echo [选项] [字符串]

常用选项

  1. 输出字符串
bash 复制代码
echo "Hello, World!"
- 输出结果:`Hello, World!`
  1. 显示变量的值
bash 复制代码
name="Linux"
echo "Welcome to $name!"
- 输出结果:`Welcome to Linux!`
  1. 不换行输出
bash 复制代码
echo -n "Hello"
- 输出结果:`Hello`(不换行)
  1. 转义特殊字符
bash 复制代码
echo -e "Hello\nWorld!"
- 输出结果: 
plain 复制代码
Hello
World!
- **常用转义字符**: 
    * `\n`:换行
    * `\t`:水平制表符(Tab)
    * `\\`:反斜杠
  1. 重定向输出到文件
bash 复制代码
echo "Hello, Linux!" > file.txt

2. tail 命令

基本功能

tail 用于显示文件的最后几行内容,常用于查看日志文件。

基本语法

bash 复制代码
tail [选项] 文件

常用选项

  1. 查看文件最后10行
bash 复制代码
tail file.txt
- 默认显示文件的最后10行。
  1. 指定显示行数
bash 复制代码
tail -n 行数 文件
- 示例:显示文件的最后5行: 
bash 复制代码
tail -n 5 file.txt
  1. 动态监控文件变化
bash 复制代码
tail -f 文件
- 示例:实时查看日志文件的更新: 
bash 复制代码
tail -f /var/log/syslog
  1. 查看从某一行开始的内容
bash 复制代码
tail -n +行号 文件
- 示例:从第3行开始显示文件内容: 
bash 复制代码
tail -n +3 file.txt

3. 重定向符

基本功能

重定向符用于将命令的输出或输入重定向到文件或其他命令。

重定向符种类

  1. 输出重定向
    • 覆盖写入:
bash 复制代码
echo "Hello, Linux!" > file.txt
    * 将 `echo` 的输出写入 `file.txt`,如果文件已存在,会覆盖原内容。
- 追加写入:
bash 复制代码
echo "Append this line." >> file.txt
    * 将内容追加到 `file.txt` 的末尾。
  1. 输入重定向
bash 复制代码
command < file.txt
- 示例:将 `file.txt` 的内容作为命令的输入。
  1. 错误输出重定向
    • 重定向错误信息到文件:
bash 复制代码
command 2> error.log
    * 将命令的错误输出写入 `error.log`。
- 同时重定向标准输出和错误输出:
bash 复制代码
command > output.log 2>&1
    * 将命令的正常输出和错误输出都写入 `output.log`。
  1. 管道符结合使用
    • 使用管道符和重定向符将多个命令组合处理:
bash 复制代码
command1 | command2 > output.txt

常见示例

  1. 将字符串写入文件并查看
bash 复制代码
echo "This is a test" > test.txt
tail test.txt
  1. 动态查看日志文件并保存更新
bash 复制代码
tail -f /var/log/syslog >> system_updates.log
  1. 过滤文件内容并写入新文件
bash 复制代码
echo -e "line1\nline2\nline3" > test.txt
tail -n 2 test.txt > last_two_lines.txt

总结
命令/符号 功能
echo 输出字符串或变量的值,常用于打印信息或写入文件
tail 查看文件的最后几行内容,动态监控文件更新
> 重定向输出到文件(覆盖写入)
>> 重定向输出到文件(追加写入)
< 将文件内容作为命令输入
2> 将错误输出重定向到文件
` `

通过灵活组合这些命令和符号,可以高效地处理文本、监控日志文件以及调试输出信息,是 Linux 系统中日常工作的基础工具。

7 vi编辑器

vi 是一个强大的文本编辑器,是 Linux 和 Unix 系统中最常用的编辑器之一。它功能强大,适用于编程、配置文件编辑等各种用途。

基本概念

vi 编辑器有三种模式:

  1. 命令模式:用于执行编辑命令(如删除、复制、粘贴等)。
  2. 插入模式:用于输入文本内容。
  3. 底行模式:用于执行特定命令(如保存、退出等)。
1. 启动 vi 编辑器
bash 复制代码
vi 文件名

如果文件存在,它将打开该文件。如果文件不存在,vi 会创建一个新文件。

2. vi 编辑器的基本操作
切换到插入模式
  • 命令模式 下,按 i 进入 插入模式 ,可以开始输入文本。
    • I:在当前行的开头进入插入模式。
    • a:在光标后进入插入模式。
    • A:在当前行的末尾进入插入模式。
    • o:在当前行下方新开一行并进入插入模式。
    • O:在当前行上方新开一行并进入插入模式。
切换到命令模式
  • 插入模式 下,按 Esc 键返回 命令模式
命令模式的基本操作
  1. 移动光标
    • h:向左移动一个字符。
    • j:向下移动一行。
    • k:向上移动一行。
    • l:向右移动一个字符。
    • w:跳到下一个单词的开头。
    • b:跳到上一个单词的开头。
    • 0:跳到行的开头。
    • $:跳到行的末尾。
  2. 删除文本
    • x:删除光标所在位置的字符。
    • dd:删除当前行。
    • d$:删除从光标位置到行尾的所有字符。
    • dw:删除当前单词。
  3. 复制与粘贴
    • yy:复制当前行(yank)。
    • p:粘贴已复制的内容到光标后面。
    • P:粘贴已复制的内容到光标前面。
  4. 撤销与重做
    • u:撤销上一步操作。
    • Ctrl + r:重做上一步撤销的操作。
  5. 查找与替换
    • /关键字:在文件中查找关键字。
    • n:查找下一个匹配的关键字。
    • N:查找上一个匹配的关键字。
    • :%s/旧字符串/新字符串/g:在整个文件中替换旧字符串为新字符串。
  6. 跳转
    • G:跳到文件的最后一行。
    • gg:跳到文件的第一行。
    • 数字G:跳到指定行号。
底行模式的基本操作

命令模式 下,按 : 进入 底行模式,可以执行以下命令:

  1. 保存文件
    • :w:保存文件但不退出。
    • :w 文件名:另存为指定的文件。
  2. 退出文件
    • :q:退出编辑器。
    • :q!:强制退出,不保存文件。
    • :wq:保存并退出编辑器。
    • ZZ(大写):保存并退出编辑器。
  3. 查找与替换
    • :s/旧字符串/新字符串/:替换当前行中的第一个匹配项。
    • :s/旧字符串/新字符串/g:替换当前行中的所有匹配项。
    • :%s/旧字符串/新字符串/g:替换整个文件中的所有匹配项。
  4. 跳转到指定行
    • :10:跳到文件的第10行。

3. 退出 vi 编辑器
  1. 保存并退出Esc:wqZZ
  2. 强制退出(不保存)Esc:q!
  3. 仅退出(如果文件已保存)Esc:q

4. vi 的高级功能
  1. 多文件编辑
    • 打开多个文件:
bash 复制代码
vi file1.txt file2.txt
- 切换文件: 
bash 复制代码
:n  # 切换到下一个文件
:prev  # 切换到上一个文件
  1. 剪切与粘贴
    • 剪切一行:dd
    • 剪切多行:数字dd,例如:3dd 剪切3行。
    • 粘贴到指定位置:p(光标后粘贴)、P(光标前粘贴)。
  2. 列操作
    • 选择列并编辑:按下 Ctrl + v 进入可视模式,然后使用光标键选择文本。
  3. 宏操作
    • 录制宏:按 q 然后按一个字母(例如 q)开始录制,完成操作后按 q 停止录制。
    • 执行宏:按 @ 后跟录制的字母(例如 @q)。

5. 总结
操作 命令
插入模式 i , I , a , A , o , O
命令模式 h , j , k , l , w , b , $
删除操作 x , dd , d$ , dw
复制和粘贴 yy , p , P
查找和替换 /关键字 , :%s/旧/新/g
保存和退出 :w , :q , :wq , :q!
撤销与重做 u , Ctrl + r

vi 编辑器的学习曲线可能较陡,但一旦掌握,它将是一个非常强大的工具,适合用于各种文本编辑任务。

快速体验

使用:vim hello.txt,编辑一个新文件,执行后进入的是命令模式

在命令模式内,按键盘 i ,进入输入模式

在输入模式内输入:hello world.

输入完成后,按esc回退会命令模式

在命令模式内,按键盘 : ,进入底线命令模式

在底线命令内输入:wq,保存文件并退出vi编辑器

补充

任何命令都支持:--help 选项, 可以通过这个选项,查看命令的帮助。

如:ls --help, 会列出ls命令的帮助文档

如果想要查看命令的详细手册,可以通过man(manual, 手册)命令查看

比如:

man ls,就是查看ls命令的详细手册

man cd,就是查看cd命令的详细手册

第三章 用户和权限

1 认识root用户

1 root用户

无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。

在Linux系统中,拥有最大权限的账户名为:root(超级管理员)

前期,我一直使用的账户是普通的用户:centos

2. su命令

可以切换用户,语法:su [-] [用户名]

  • 表示切换后加载环境变量,建议带上

用户可以省略,省略默认切换到root

在前面,我们接触过su命令切换到root账户。

su命令就是用于账户切换的系统命令,其来源英文单词:Switch User

语法:

  • 符号是可选的,表示是否在切换用户后加载环境变量(后续讲解),建议带上
  • 参数:用户名,表示要切换的用户,用户名也可以省略,省略表示切换到root
  • 切换用户后,可以通过exit命令退回上一个用户,也可以使用快捷键:ctrl + d
  • 使用普通用户,切换到其它用户需要输入密码,如切换到root用户
  • 使用root用户切换到其它用户,无需密码,可以直接切换
3. sudo命令

可以让一条普通命令带有root权限,语法:sudo 其他命令

需要以root用户执行visudo命令,增加配置方可让普通用户有sudo命令的执行权限

centos ALL=(ALL) NOPASSED:ALL不用密码也能执行sudo

可以使用sudo命令,为普通的命令授权,临时以root身份执行。

语法:sudo 其他命令

在其它命令之前,带上sudo,即可为这一条命令临时赋予root授权

但是并不是所有的用户,都有权利使用sudo,我们需要为普通用户配置sudo认证

2 用户、用户组管理

Linux系统中可以:

  • 配置多个用户
  • 配置多个用户组
  • 用户可以加入多个用户组中

Linux中关于权限的管控级别有2个级别,分别是:

  • 针对用户的权限控制
  • 针对用户组的权限控制

在 Linux 系统中,用户管理用户组管理是系统管理员常用的任务,旨在为系统中的各个用户分配权限并保持系统的安全性。用户可以被分配到一个或多个用户组中,通过组管理来更高效地控制文件和资源的访问权限。

1. 用户管理

创建用户

要在 Linux 系统中创建新用户,使用 useradd 命令。

bash 复制代码
sudo useradd [选项] 用户名

常见选项:

  • -m:创建用户的家目录(如果没有的话)。
  • -d:指定家目录的位置。
  • -s:指定用户的登录 shell。
  • -g:指定主用户组。
  • -G:指定附加用户组。
  • -p:为用户设置密码(需要使用加密过的密码)。

示例:

bash 复制代码
sudo useradd -m -s /bin/bash -g users -G sudo,developers username

这将创建一个名为 username 的用户,指定默认 shell 为 /bin/bash,主用户组为 users,并将该用户添加到 sudodevelopers 这两个附加用户组中。

设置用户密码

创建用户后,你通常需要为其设置密码。使用 passwd 命令:

bash 复制代码
sudo passwd 用户名

示例:

bash 复制代码
sudo passwd username

系统会要求输入两次密码,密码设置成功后,用户可以使用该密码登录。

查看用户信息

要查看当前系统中的用户信息,可以使用 cat 查看 /etc/passwd 文件。此文件包含了系统上所有用户的信息。

bash 复制代码
cat /etc/passwd

每行包括:

  • 用户名
  • 密码(通常已加密)
  • 用户ID(UID)
  • 用户组ID(GID)
  • 用户描述(可选)
  • 家目录路径
  • 登录 shell
删除用户

要删除一个用户,使用 userdel 命令:

bash 复制代码
sudo userdel 用户名

要删除用户及其家目录(如果存在),使用 -r 选项:

bash 复制代码
sudo userdel -r 用户名
修改用户

要修改用户的信息(如修改用户名、用户组等),使用 usermod 命令。

示例:

  • 修改用户名:
bash 复制代码
sudo usermod -l 新用户名 旧用户名
  • 修改用户的主目录:
bash 复制代码
sudo usermod -d /新路径 -m 用户名

-m 选项会移动用户的文件到新的目录。


2. 用户组管理
创建用户组

要创建一个新用户组,使用 groupadd 命令:

bash 复制代码
sudo groupadd 用户组名

示例:

bash 复制代码
sudo groupadd developers

这将创建一个名为 developers 的新用户组。

查看用户组信息

要查看当前系统中的所有用户组,可以查看 /etc/group 文件:

bash 复制代码
cat /etc/group

每行包括:

  • 用户组名
  • 密码(通常为空)
  • 用户组ID(GID)
  • 用户组成员
添加用户到用户组

可以使用 usermod 命令将用户添加到现有的用户组。使用 -aG 选项来追加用户到附加用户组。

bash 复制代码
sudo usermod -aG 用户组名 用户名

示例:

bash 复制代码
sudo usermod -aG developers username

这将把 username 添加到 developers 用户组中。

删除用户组

要删除用户组,使用 groupdel 命令:

bash 复制代码
sudo groupdel 用户组名

示例:

bash 复制代码
sudo groupdel developers
删除用户组中的用户

如果你想从用户组中移除用户,而不是删除整个用户组,可以使用 gpasswd 命令:

bash 复制代码
sudo gpasswd -d 用户名 用户组名

示例:

bash 复制代码
sudo gpasswd -d username developers

这将把 usernamedevelopers 用户组中移除。


3. 常用命令和文件
查看当前用户和组
  • 查看当前用户名whoamiid -un
  • 查看当前用户的 UID 和 GIDid
  • 查看当前用户的所有组groups

示例:

bash 复制代码
id username

输出结果:

bash 复制代码
uid=1001(username) gid=1001(username) groups=1001(username),1002(developers)
文件权限与用户组

Linux 使用三种权限(读、写、执行)来控制文件和目录的访问:

  • r:读权限,表示可以读取文件内容。
  • w:写权限,表示可以修改文件内容。
  • x:执行权限,表示可以执行文件或访问目录。

权限是按用户(owner)、用户组(group)和其他用户(others)来设置的。

  • 文件权限示例:
bash 复制代码
ls -l 文件名

输出示例:

bash 复制代码
-rwxr-xr-- 1 username developers 12345 May 1 12:34 filename

解释:

- `rwx`:文件所有者 (`username`) 有读、写、执行权限。
- `r-x`:文件所属用户组 (`developers`) 有读、执行权限。
- `r--`:其他用户有读权限。
  • 修改文件权限 : 使用 chmod 命令修改文件权限:
bash 复制代码
chmod 755 文件名

7 表示文件所有者的权限是读、写、执行(rwx),5 表示用户组的权限是读和执行(r-x),5 表示其他用户的权限是读和执行(r-x)。

  • 修改文件所属的用户和组 : 使用 chown 命令修改文件的所有者和所属用户组:
bash 复制代码
sudo chown 用户名:用户组 文件名

示例:

bash 复制代码
sudo chown username:developers file.txt

总结
命令 功能
useradd 创建新用户
passwd 设置或修改用户密码
usermod 修改现有用户的属性(如用户名、家目录等)
userdel 删除用户
groupadd 创建新用户组
groupdel 删除用户组
usermod -aG 将用户添加到附加用户组
gpasswd -d 从用户组中删除用户
id 查看当前用户的 UID、GID 以及所属的所有组
groups 查看当前用户所属的所有组

用户和用户组管理是系统管理员日常任务的重要组成部分。合理的用户组设计可以帮助简化权限管理,提高系统的安全性和可维护性。

3 权限控制

1 查看权限控制

通过ls -l 可以以列表形式查看内容,并显示权限细节

序号1,表示文件、文件夹的权限控制信息

序号2,表示文件、文件夹所属用户

序号3,表示文件、文件夹所属用户组

解析一下序号1,权限细节

权限细节总共分为10个槽位

举例:drwxr-xr-x,表示:

  • 这是一个文件夹,首字母d表示
  • 所属用户(右上角图序号2)的权限是:有r有w有x,rwx
  • 所属用户组(右上角图序号3)的权限是:有r无w有x,r-x (-表示无此权限)
  • 其它用户的权限是:有r无w有x,r-x

那么,rwx到底代表什么呢?

r表示读权限

w表示写权限

x表示执行权限

针对文件、文件夹的不同,rwx的含义有细微差别

r,针对文件可以查看文件内容

针对文件夹,可以查看文件夹内容,如ls命令

w,针对文件表示可以修改此文件

针对文件夹,可以在文件夹内:创建、删除、改名等操作

x,针对文件表示可以将文件作为程序执行

针对文件夹,表示可以更改工作目录到此文件夹,即cd进入

2 修改权限控制 - chmod

chmod(Change Mode)是一个用来修改文件或目录权限的 Linux 命令。通过它,用户可以指定文件或目录的访问权限,从而控制谁能访问和操作该文件或目录。

文件权限的基本概念

每个文件或目录在 Linux 中都有三种类型的权限:

  1. 读(r):允许查看文件内容或列出目录中的文件。
  2. 写(w):允许修改文件内容或在目录中添加、删除文件。
  3. 执行(x):允许执行文件(如脚本、程序等)或进入目录。

文件权限分为三个类别:

  • 用户(User):文件的拥有者。
  • 用户组(Group):与文件拥有者属于同一组的用户。
  • 其他用户(Others):不属于文件拥有者组和用户组的所有其他用户。
基本语法
bash 复制代码
chmod [选项] 权限 文件名
  • 选项:可选项,通常不需要。
  • 权限:指定文件或目录的权限。
  • 文件名:要修改权限的文件或目录。
权限的表示方法

chmod 有两种常见的权限表示方法:

  1. 符号模式(Symbolic Mode):使用字符表示权限。
  2. 数字模式(Numeric Mode):使用数字表示权限。

1. 符号模式

符号模式使用字符来表示权限:

  • r:读权限
  • w:写权限
  • x:执行权限
  • +:增加权限
  • -:去除权限
  • =:设置权限

格式chmod [who][operator][permissions] 文件名

  • who :表示要修改权限的用户类别:
    • u:用户(文件的拥有者)
    • g:用户组
    • o:其他用户
    • a:所有用户(包括用户、组和其他用户)
  • operator :表示权限的修改方式:
    • +:添加权限
    • -:移除权限
    • =:设置精确的权限(覆盖现有权限)

例子

  • 给文件 **file.txt** 添加用户组的写权限
bash 复制代码
chmod g+w file.txt

这将为文件 file.txt 添加用户组的写权限。

  • 移除文件 **file.txt** 中其他用户的执行权限
bash 复制代码
chmod o-x file.txt
  • 将文件 **file.txt** 的权限设置为用户拥有读写权限,其他用户只能读权限
bash 复制代码
chmod u=rw,go=r file.txt
  • 为所有用户添加读权限
bash 复制代码
chmod a+r file.txt

2. 数字模式

数字模式使用三个数字表示文件权限,每个数字由以下三种基本权限组成:

  • 4:读权限(r)
  • 2:写权限(w)
  • 1:执行权限(x)

数字模式中的每个数字表示用户类别的权限:

  • 第一个数字:用户(文件的拥有者)
  • 第二个数字:用户组
  • 第三个数字:其他用户

每个数字是这三个权限值的和:

  • 读(r)权限为 4
  • 写(w)权限为 2
  • 执行(x)权限为 1

例如:

  • 7(4 + 2 + 1):rwx读、写、执行权限
  • 6(4 + 2):rw-读、写权限
  • 5(4 + 1):r-x读、执行权限
  • 4(4):r--读权限
  • 3(2 + 1):-wx写、执行权限
  • 2(2):-w-写权限
  • 1(1):--x执行权限
  • 0---无权限

例子

  • 设置文件 **file.txt** 的权限为用户读写执行,组用户读写,其他用户只有读权限
bash 复制代码
chmod 764 file.txt
- `7`(用户:rwx)
- `6`(组:rw-)
- `4`(其他:r--)
  • 设置文件 **file.txt** 的权限为所有用户都有读写执行权限
bash 复制代码
chmod 777 file.txt
  • 设置文件 **file.txt** 的权限为用户只有读权限,组和其他用户没有任何权限
bash 复制代码
chmod 400 file.txt

将hello.txt的权限修改为: r-x--xr-x,数字序号为:

bash 复制代码
chmod 515 hello.txt

将hello.txt的权限修改为: -wx-w-rw-,数字序号为:

bash 复制代码
chmod 326 hello.txt
3. 修改目录权限

修改目录的权限和文件类似,但需要特别注意的是执行权限对于目录的作用:

  • 如果没有 执行权限 ,用户就无法进入(cd)该目录。
  • 只有 执行权限,用户才能进入目录。
  • 需要 读权限 来列出目录中的文件。

例如:

  • 为目录 **mydir** 设置权限
bash 复制代码
chmod 755 mydir
- 用户有读、写、执行权限,组和其他用户只有读和执行权限。

4. 常用选项
  • **-R**:递归地修改目录及其子目录中的文件权限。

示例:

bash 复制代码
chmod -R 755 mydir

这将递归地为 mydir 及其所有子目录和文件设置权限。


5. 权限的查看

使用 ls -l 命令查看文件或目录的权限:

bash 复制代码
ls -l 文件名

输出示例:

bash 复制代码
-rwxr-xr-- 1 user1 group1 1024 Apr 1 12:34 file.txt
  • **rwxr-xr--**:权限(文件所有者:读、写、执行,组用户:读、执行,其他用户:只读)
  • **1**:链接数
  • **user1**:文件的拥有者
  • **group1**:文件的所属用户组
  • **1024**:文件大小
  • **Apr 1 12:34**:最后修改时间
  • **file.txt**:文件名

总结
命令 描述
chmod 755 文件名 给文件设置权限:用户(rwx),用户组(r-x),其他用户(r-x)
chmod -R 755 目录名 递归设置目录及其子目录和文件的权限
chmod u+x 文件名 为文件所有者添加执行权限
chmod g-w 文件名 从文件所属用户组移除写权限
chmod 644 文件名 文件权限:用户(rw-),组用户(r--),其他用户(r--)
chmod 777 文件名 给所有用户设置读、写、执行权限

chmod 是管理文件和目录权限的重要工具,合理地设置权限能够有效地保护系统的安全性和数据的隐私性。

3 修改权限控制 - chown

chown 是 Linux 系统中用于修改文件或目录的所有者 (user)和用户组 (group)的命令。通过 chown 命令,系统管理员可以更改文件或目录的拥有者和所属组,从而管理文件的访问权限和控制哪些用户可以访问。

基本语法
bash 复制代码
chown [选项] 所有者:用户组 文件名
  • 所有者:指定新的文件拥有者。
  • 用户组:指定新的文件所属组(可选)。
  • 文件名:要修改的文件或目录。
常用的选项
  • **-R**:递归地修改目录及其子目录和文件的拥有者和用户组。
  • **--reference=文件**:将目标文件的所有者和用户组设置为与参考文件相同。

1. 修改文件或目录的所有者

如果你只想修改文件的拥有者(用户),可以使用 chown 并指定新的所有者:

bash 复制代码
chown 用户名 文件名

例如:

bash 复制代码
sudo chown alice file.txt

这将把文件 file.txt 的拥有者改为 alice


2. 修改文件或目录的用户组

如果你只想修改文件的所属用户组(组),可以使用 chown 并指定新的用户组:

bash 复制代码
chown :用户组 文件名

例如:

bash 复制代码
sudo chown :staff file.txt

这将把文件 file.txt 的所属用户组改为 staff


3. 修改文件的所有者和用户组

如果你需要同时修改文件的拥有者和用户组,可以使用以下格式:

bash 复制代码
chown 用户名:用户组 文件名

例如:

bash 复制代码
sudo chown alice:admin file.txt

这将把文件 file.txt 的拥有者改为 alice,所属用户组改为 admin


4. 递归修改目录及其内容的所有者和用户组

如果你想递归地修改一个目录及其所有子目录和文件的所有者和用户组,可以使用 -R 选项:

bash 复制代码
sudo chown -R 用户名:用户组 目录名

例如:

bash 复制代码
sudo chown -R alice:staff /home/alice

这将把目录 /home/alice 及其所有子文件和子目录的所有者改为 alice,所属用户组改为 staff


5. 使用参考文件设置所有者和用户组

你还可以使用 --reference 选项,将目标文件的所有者和用户组设置为与参考文件相同:

bash 复制代码
sudo chown --reference=参考文件 文件名

例如:

bash 复制代码
sudo chown --reference=file1.txt file2.txt

这将把文件 file2.txt 的所有者和用户组设置为与 file1.txt 相同。


6. 查看文件的所有者和用户组

可以使用 ls -l 命令来查看文件或目录的所有者和用户组:

bash 复制代码
ls -l 文件名

示例输出:

bash 复制代码
-rw-r--r-- 1 alice staff 1024 Apr 1 12:34 file.txt
  • alice:文件的所有者
  • staff:文件的用户组
  • 1024:文件大小
  • Apr 1 12:34:文件的最后修改时间
  • file.txt:文件名

7. 举例说明

修改文件的所有者:

bash 复制代码
sudo chown john file.txt

这将把 file.txt 的所有者修改为 john

修改文件的用户组:

bash 复制代码
sudo chown :developers file.txt

这将把 file.txt 的用户组修改为 developers

修改文件的所有者和用户组:

bash 复制代码
sudo chown john:developers file.txt

这将把 file.txt 的所有者修改为 john,用户组修改为 developers

递归修改目录及其内容的所有者和用户组:

bash 复制代码
sudo chown -R john:developers /home/john

这将把 /home/john 目录及其所有子目录和文件的所有者修改为 john,用户组修改为 developers


总结

chown 命令是 Linux 系统中用于修改文件和目录所有者及用户组的工具。通过合理使用 chown,你可以有效地管理文件的权限和安全性。

命令 功能
chown 用户名 文件名 修改文件的所有者
chown :用户组 文件名 修改文件的用户组
chown 用户名:用户组 文件名 同时修改文件的所有者和用户组
chown -R 用户名:用户组 目录名 递归修改目录及其子文件的所有者和用户组
chown --reference=参考文件 文件名 将目标文件的所有者和用户组设置为参考文件相同

通过正确使用 chown 命令,系统管理员可以有效地管理文件和目录的所有权,从而保证系统的安全性和资源的适当共享。

第四章 Linux实用操作

1 常用快捷键

在 Linux 系统中,命令行界面(CLI)是一个非常强大的工具,使用各种快捷键可以大大提高工作效率。以下是一些常用的 Linux 快捷键,帮助你在终端中更高效地操作。

  1. 基本命令行快捷键
快捷键 功能
Ctrl + C 终止当前正在运行的命令或程序(强制停止进程)。
Ctrl + Z 将当前进程挂起(暂停运行),并将其放到后台。
Ctrl + D 退出当前终端会话,相当于输入 exit 命令。
Ctrl + L 清屏,类似于输入 clear 命令。
Ctrl + U 删除光标前面的所有字符。
Ctrl + K 删除光标后面的所有字符。
Ctrl + W 删除光标前一个单词。
Ctrl + Y 恢复最后一次删除(如通过 Ctrl + UCtrl + W 删除的内容)。
Ctrl + A 将光标移动到行的开头。
Ctrl + E 将光标移动到行的结尾。
Ctrl + R 启动历史命令搜索,可以快速查找之前执行过的命令。
Ctrl + P 上一条历史命令。
Ctrl + N 下一条历史命令。
  1. 文件与目录操作快捷键
快捷键 功能
Tab 自动补全文件名或命令。如果有多个补全选项,按两次 Tab 会列出所有选项。
Ctrl + F 在命令行中向前查找字符。
Ctrl + B 在命令行中向后查找字符。
Alt + . 获取最后一个命令的最后一个参数。例如,执行 ls /home 后,按 Alt + . 会自动补全 /home
Ctrl + X nano 编辑器中剪切当前行。
Ctrl + V nano 编辑器中粘贴剪切的内容。
  1. 终端操作快捷键
快捷键 功能
Ctrl + Alt + T 打开一个新的终端窗口。
Alt + F4 关闭当前的终端窗口(与图形界面中的关闭窗口类似)。
Ctrl + Shift + T 打开一个新的终端标签页(适用于支持标签页的终端,如 GNOME Terminal)。
Ctrl + Shift + C 复制终端中的文本。
Ctrl + Shift + V 粘贴终端中的文本。
  1. 文本编辑与命令行编辑快捷键

在命令行中输入和编辑命令时,这些快捷键非常有用:

快捷键 功能
Ctrl + A 将光标移到行的开始位置。
Ctrl + E 将光标移到行的结束位置。
Ctrl + U 删除光标前面的所有字符。
Ctrl + K 删除光标后面的所有字符。
Ctrl + W 删除光标前一个单词。
Alt + D 删除光标后的一个单词。
Ctrl + Y 恢复最近一次的剪切(删除)内容。
Ctrl + T 交换光标前后两个字符。
Alt + B 将光标向后移动一个单词。
Alt + F 将光标向前移动一个单词。
Ctrl + Left Arrow 将光标向左移动一个单词。
Ctrl + Right Arrow 将光标向右移动一个单词。
  1. 进程控制快捷键

在终端中,控制进程时使用这些快捷键可以非常方便:

快捷键 功能
Ctrl + C 终止当前进程。
Ctrl + Z 暂停当前进程并将其放到后台。
bg 将暂停的进程从后台恢复到后台运行。
fg 将暂停的进程从后台恢复到前台运行。
jobs 显示当前的后台任务。
  1. 使用历史命令的快捷键

在 Linux 中,history 命令可以查看执行过的历史命令,快捷键让你更高效地使用历史命令:

快捷键 功能
Up Arrow 查找历史命令中的上一条命令。
Down Arrow 查找历史命令中的下一条命令。
Ctrl + R 启动反向搜索历史命令。
Ctrl + S 启动正向搜索历史命令(某些系统需要先设置)。
history 查看命令历史记录。
  1. 网络操作快捷键

在进行网络操作时,以下快捷键可以提高效率:

快捷键 功能
Ctrl + C 终止当前的网络命令或操作(例如 pingwget )。
Ctrl + D 退出当前的网络连接(例如 FTP)。
  1. 使用 man 页面的快捷键

查看帮助文档时,这些快捷键可以帮助你快速浏览和搜索:

快捷键 功能
Up Arrow 上滚一行
Down Arrow 下滚一行
Page Up 上滚一页
Page Down 下滚一页
/ man 页面中进行搜索。输入搜索词后按 Enter
n 跳转到下一个匹配的搜索结果。
q 退出 man 页面。
  1. ctrl + c 强制停止

  2. ctrl + d 退出登出

  3. history 查看历史命令

  4. !命令前缀,自动匹配上一个命令

  5. ctrl + r,搜索历史命令

  6. ctrl + a | e,光标移动到命令开始或结束

  7. ctrl + ← | →,左右跳单词

  8. ctrl + l 或 clear命令 清屏

2 软件安装

操作系统安装软件有许多种方式,一般分为:

下载安装包自行安装

如win系统使用exe文件、msi文件等

如mac系统使用dmg文件、pkg文件等

系统的应用商店内安装

如win系统有Microsoft Store商店

如mac系统有AppStore商店

使用yum为CentOS系统安装软件

在 CentOS 系统上,yum(Yellowdog Updater, Modified)是一个常用的包管理工具,用于从远程仓库下载和安装软件包、更新系统以及管理软件包依赖关系。以下是一些使用 yum 安装软件包的常见操作。

1**. 安装软件包**

使用 yum install 命令安装软件包:

bash 复制代码
sudo yum install 包名

例如,要安装 wget 工具:

bash 复制代码
sudo yum install wget

2. 安装多个软件包

你可以同时安装多个软件包,只需在命令中列出它们的名称即可:

bash 复制代码
sudo yum install 包名1 包名2 包名3

例如,要安装 wgetcurl

bash 复制代码
sudo yum install wget curl

3. 安装指定版本的软件包

如果你想安装特定版本的软件包,可以在包名后面加上版本号:

bash 复制代码
sudo yum install 包名-版本号

例如,要安装 wget 的特定版本 1.20.3-3.el8

bash 复制代码
sudo yum install wget-1.20.3-3.el8

4. 查找可用的软件包

如果你不确定软件包的名称,可以使用 yum search 来查找软件包:

bash 复制代码
yum search 软件包名称

例如,搜索包含 wget 的所有软件包:

bash 复制代码
yum search wget

5. 查看软件包信息

如果你想查看某个软件包的详细信息(例如版本、描述、大小等),可以使用 yum info 命令:

bash 复制代码
yum info 包名

例如,查看 wget 软件包的详细信息:

bash 复制代码
yum info wget

6. 更新已安装的软件包

要更新已安装的软件包,可以使用 yum update 命令:

bash 复制代码
sudo yum update 包名

例如,更新 wget

bash 复制代码
sudo yum update wget

如果不指定软件包名,yum update 会更新所有可以更新的软件包。

bash 复制代码
sudo yum update

7. 升级所有软件包

使用 yum upgrade 命令,可以升级所有安装的软件包到最新版本:

bash 复制代码
sudo yum upgrade

8. 删除软件包

如果你不再需要某个软件包,可以使用 yum remove 命令卸载它:

bash 复制代码
sudo yum remove 包名

例如,删除 wget

bash 复制代码
sudo yum remove wget

9. 清理缓存

yum 会在本地缓存已下载的软件包和元数据,以便在下次使用时加快速度。如果你需要清理缓存,可以使用 yum clean 命令:

  • 清理软件包缓存:
bash 复制代码
sudo yum clean packages
  • 清理所有缓存(包括元数据和软件包):
bash 复制代码
sudo yum clean all

10. 列出已安装的软件包

要查看系统上已安装的软件包列表,可以使用 yum list installed 命令:

bash 复制代码
yum list installed

11. 启用或禁用特定的软件仓库

CentOS 使用仓库来提供软件包。如果你需要启用或禁用某个仓库,可以修改仓库配置文件,或者在使用 yum 命令时指定:

  • 启用特定仓库:
bash 复制代码
sudo yum --enablerepo=repo_name install 包名
  • 禁用特定仓库:
bash 复制代码
sudo yum --disablerepo=repo_name install 包名

12. 获取帮助

如果你需要获取 yum 命令的帮助,使用以下命令:

bash 复制代码
yum --help
使用apt为Ubuntu安装软件

后续补充到Ubantu部分

3 systemctl

Linux系统很多软件(内置或第三方)均支持使用systemctl命令控制:启动、停止、开机自启

能够被systemctl管理的软件,一般也称之为:服务

语法:systemctl start | stop |status | enable | disable 服务名

start 启动

stop 关闭

status 查看状态

enable 开启开机自启

disable 关闭开机自启

系统内置的服务比较多,比如:

NetworkManager,主网络服务

network,副网络服务

firewalld,防火墙服务

sshd,ssh服务(FinalShell远程登录Linux使用的就是这个服务)

systemctl 是一个用于管理系统服务的命令行工具,适用于基于 systemd 的 Linux 系统。它可以用于启动、停止、重启服务,查看服务的状态,启用或禁用服务,管理开机启动等。

以下是一些常见的 systemctl 命令用法:

  1. 查看服务状态
bash 复制代码
systemctl status <服务名>

例如,查看 nginx 服务的状态:

bash 复制代码
systemctl status nginx
  1. 启动服务
bash 复制代码
systemctl start <服务名>

例如,启动 nginx 服务:

bash 复制代码
systemctl start nginx
  1. 停止服务
bash 复制代码
systemctl stop <服务名>

例如,停止 nginx 服务:

bash 复制代码
systemctl stop nginx
  1. 重启服务
bash 复制代码
systemctl restart <服务名>

例如,重启 nginx 服务:

bash 复制代码
systemctl restart nginx
  1. 重新加载服务配置(不重启服务)
bash 复制代码
systemctl reload <服务名>

例如,重新加载 nginx 服务的配置:

bash 复制代码
systemctl reload nginx
  1. 启用服务开机自启动
bash 复制代码
systemctl enable <服务名>

例如,设置 nginx 开机自启动:

bash 复制代码
systemctl enable nginx
  1. 禁用服务开机自启动
bash 复制代码
systemctl disable <服务名>

例如,禁用 nginx 开机自启动:

bash 复制代码
systemctl disable nginx
  1. 查看所有正在运行的服务
bash 复制代码
systemctl list-units --type=service
  1. 查看已启动的服务及其状态
bash 复制代码
systemctl is-active <服务名>

例如,检查 nginx 是否处于激活状态:

bash 复制代码
systemctl is-active nginx
  1. 查看服务日志

systemctljournalctl 配合使用,可以查看服务的日志:

bash 复制代码
journalctl -u <服务名>

例如,查看 nginx 的日志:

bash 复制代码
journalctl -u nginx
  1. 查看所有服务的日志
bash 复制代码
journalctl
  1. 关闭并关闭所有服务(仅对管理系统时有用)
bash 复制代码
systemctl poweroff
  1. 重启系统
bash 复制代码
systemctl reboot

这些是常用的 systemctl 命令,用于管理和控制服务。如果你需要更多的帮助,可以通过 man systemctl 来查看 systemctl 的手册页面,获取更详细的用法。

4 使用ln创建软连接

ln 命令用于在 Linux 系统中创建文件的硬链接或软链接(符号链接)。如果你希望创建软链接(即符号链接),可以使用 -s 选项。

创建软连接的基本语法:

bash 复制代码
ln -s <目标文件/目录> <链接文件/目录>
  • 目标文件/目录:你要创建软链接的原始文件或目录。
  • 链接文件/目录:你希望创建的软链接的名称或位置。

什么是软连接?

可以将文件、文件夹链接到其它位置

链接只是一个指向,并不是物理移动,类似Windows系统的快捷方式

例子:

1. 创建软链接到文件

假设你有一个文件 original.txt,你想在当前目录中创建一个名为 link.txt 的软链接。

bash 复制代码
ln -s /path/to/original.txt link.txt

这样,你就在当前目录下创建了一个指向 original.txt 的软链接 link.txt

2. 创建软链接到目录

假设你有一个目录 /home/user/old_dir,你想在当前目录中创建一个名为 new_dir 的软链接。

bash 复制代码
ln -s /home/user/old_dir new_dir

这样,你就创建了一个指向 /home/user/old_dir 目录的软链接 new_dir

查看软链接

你可以使用 ls -l 命令查看软链接的详细信息。软链接会显示出其指向的目标:

bash 复制代码
ls -l link.txt

输出类似:

plain 复制代码
lrwxrwxrwx 1 user user 20 Jan  9 12:34 link.txt -> /path/to/original.txt
  • l 开头表示这是一个符号链接。
  • -> 后面显示链接的目标路径。

删除软链接

要删除软链接,可以使用 rm 命令:

bash 复制代码
rm link.txt

注意:删除软链接只会删除链接本身,不会影响原始文件或目录。

注意事项

  • 软链接 只是指向目标文件或目录的路径,并不包含目标内容。删除软链接不会删除目标文件,但如果目标文件被删除,软链接将失效,显示为 "坏链接"。
  • 如果目标是目录,软链接仍然可以作为目录使用。

希望这些能帮助你更好地理解和使用 ln 命令创建软链接。

5 日期、时区

1. 查看日期和时间(date 命令)

date 命令用于显示当前的系统日期和时间。使用它时,您可以看到格式化的输出信息,也可以进行自定义输出。

基本命令:

bash 复制代码
date

输出示例:

plain 复制代码
Mon Jan  9 12:34:56 CST 2025

这表示:星期一,2025年1月9日,时间是12:34:56,时区是 CST(中国标准时间)。

自定义格式:

您可以使用 + 选项来指定输出格式,常用的格式化选项有:

  • %Y:年份(4位数字)
  • %m:月份(01-12)
  • %d:日期(01-31)
  • %H:小时(00-23)
  • %M:分钟(00-59)
  • %S:秒(00-59)

例如,显示 YYYY-MM-DD HH:MM:SS 格式的日期时间:

bash 复制代码
date "+%Y-%m-%d %H:%M:%S"

输出示例:

plain 复制代码
2025-01-09 12:34:56
2. 修改 Linux 系统时区

修改时区的过程一般涉及以下步骤:

2.1 查看当前时区

要查看当前系统的时区,可以使用以下命令:

bash 复制代码
timedatectl

输出示例:

plain 复制代码
Local time: Mon 2025-01-09 12:34:56 CST
           Universal time: Mon 2025-01-09 04:34:56 UTC
                 RTC time: Mon 2025-01-09 04:34:56
                Time zone: Asia/Shanghai (CST, +0800)

2.2 查看可用时区

可以列出所有可用的时区:

bash 复制代码
timedatectl list-timezones

这将列出所有时区,如:

plain 复制代码
Africa/Abidjan
Africa/Accra
...
Asia/Shanghai
...

2.3 设置新的时区

要更改时区,可以使用 timedatectl 命令。例如,要将时区更改为 Asia/Shanghai

bash 复制代码
sudo timedatectl set-timezone Asia/Shanghai

2.4 验证时区更改

更改时区后,您可以再次使用 timedatectl 查看是否更改成功:

bash 复制代码
timedatectl

您应该看到新的时区设置。

2.5 手动配置时区(如果没有 timedatectl

在某些老版本的 Linux 系统中,您可能没有 timedatectl 工具,您可以手动更改时区。方法是通过符号链接更改 /etc/localtime 文件。

  • 查找您需要的时区:
bash 复制代码
ls /usr/share/zoneinfo
  • 创建符号链接到正确的时区文件。例如:
bash 复制代码
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3. 使用 NTP 进行时间同步和校准

NTP(Network Time Protocol)用于同步计算机的系统时间和全球时间标准。使用 NTP 可以确保您的系统时间是准确的。

3.1 安装 NTP 服务

首先,确保安装了 NTP 服务。如果尚未安装,可以通过以下命令进行安装:

  • 对于 CentOS/RHEL 系统
bash 复制代码
sudo yum install ntp
  • 对于 Ubuntu/Debian 系统
bash 复制代码
sudo apt-get install ntp

3.2 启动并启用 NTP 服务

安装完 NTP 后,您需要启动并启用服务,以便它在系统启动时自动运行。

  • 启动 NTP 服务:
bash 复制代码
sudo systemctl start ntpd
  • 设置 NTP 服务开机自启动:
bash 复制代码
sudo systemctl enable ntpd

3.3 使用 ntpdate 命令手动同步时间

如果您只想手动同步时间,可以使用 ntpdate 命令。首先安装 ntpdate 工具(如果没有安装):

  • 对于 CentOS/RHEL 系统
bash 复制代码
sudo yum install ntpdate
  • 对于 Ubuntu/Debian 系统
bash 复制代码
sudo apt-get install ntpdate

然后使用以下命令手动同步时间:

bash 复制代码
sudo ntpdate pool.ntp.org

这将从 pool.ntp.org 服务器同步时间。

3.4 使用 chrony (替代 NTP)

在一些现代的 Linux 系统中,chrony 已经替代了 ntpd,并且它在某些环境下比 NTP 更加精确和稳定。使用 chrony 的方法:

  • 安装 chrony
    • 对于 CentOS/RHEL:
bash 复制代码
sudo yum install chrony
- 对于 Ubuntu/Debian:
bash 复制代码
sudo apt-get install chrony
  • 启动并启用 chrony 服务
bash 复制代码
sudo systemctl start chronyd
sudo systemctl enable chronyd
  • 查看时间同步状态
bash 复制代码
chronyc tracking
  1. 总结
  • 使用 date 命令可以查看和自定义系统时间。
  • 使用 timedatectl 可以修改系统时区。
  • 使用 NTP 或 chrony 工具来同步和校准系统时间,确保系统时间与全球标准时间同步。

6 IP地址、主机名

ip地址

每一台联网的电脑都会有一个地址,用于和其它计算机进行通讯

IP地址主要有2个版本,V4版本和V6版本(V6很少用,课程暂不涉及)

IPv4版本的地址格式是:a.b.c.d,其中abcd表示0~255的数字,如192.168.88.101就是一个标准的IP地址

可以通过命令:ifconfig,查看本机的ip地址,如无法使用ifconfig命令,可以安装:

yum -y install net-tools

特殊IP地址

除了标准的IP地址以外,还有几个特殊的IP地址需要我们了解:

  • 127.0.0.1,这个IP地址用于指代本机
  • 0.0.0.0,特殊IP地址

可以用于指代本机

可以在端口绑定中用来确定绑定关系(后续讲解)

在一些IP地址限制中,表示所有IP的意思,如放行规则设置为0.0.0.0,表示允许任意IP访问

主机名

每一台电脑除了对外联络地址(IP地址)以外,也可以有一个名字,称之为主机名

无论是Windows或Linux系统,都可以给系统设置主机名

Windows系统主机名

Linux系统主机名

在Linux中修改主机名

可以使用命令:hostname查看主机名

可以使用命令:hostnamectl set-hostname 主机名,修改主机名(需root)

重新登录FinalShell即可看到主机名已经正确显示

域名解析

访问www.baidu.com的流程如下:

先查看本机的记录(私人地址本)

Windows看:C:\Windows\System32\drivers\etc\hosts

Linux看:/etc/hosts

再联网去DNS服务器(如114.114.114.114,8.8.8.8等)询问

配置主机名映射

比如,我们FinalShell是通过IP地址连接到的Linux服务器,那有没有可能通过域名(主机名)连接呢?

可以,我们只需要在Windows系统的:C:\Windows\System32\drivers\etc\hosts文件中配置记录即可

虚拟机配置固定IP

当前我们虚拟机的Linux操作系统,其IP地址是通过DHCP服务获取的。

DHCP:动态获取IP地址,即每次重启设备后都会获取一次,可能导致IP地址频繁变更

原因1:办公电脑IP地址变化无所谓,但是我们要远程连接到Linux系统,如果IP地址经常变化我们就要频繁修改适配很麻烦

原因2:在刚刚我们配置了虚拟机IP地址和主机名的映射,如果IP频繁更改,我们也需要频繁更新映射关系

综上所述,我们需要IP地址固定下来,不要变化了。

在VMware Workstation中配置固定IP

配置固定IP需要2个大步骤:

在VMware Workstation(或Fusion)中配置IP地址网关和网段(IP地址的范围)

在Linux系统中手动修改配置文件,固定IP

首先让我们,先进行第一步,跟随图片进行操作


现在进行第二步,在Linux系统中修改固定IP

使用vim编辑/etc/sysconfig/network-scripts/ifcfg-ens33文件,填入如下内容

执行:systemctl restart network重启网卡,执行ifconfig即可看到ip地址固定为192.168.88.130了

7 网络传输

1 下载和网络请求

以下是关于 网络传输工具 的详细介绍,以及如何使用 pingwgetcurl 命令进行网络操作:


1. 使用 ping 检查服务器是否可联通

ping 命令是一个简单的工具,用于测试从本地计算机到目标主机之间的网络连接情况。它通过发送 ICMP 回显请求数据包,测量网络延迟并检测目标主机是否可达。

基本语法

bash 复制代码
ping [选项] 目标地址

常用选项

  • 不指定选项:默认会持续发送数据包,直到手动终止。
  • -c <次数>:指定发送数据包的数量。
  • -i <间隔时间>:指定发送数据包的间隔时间(默认 1 秒)。
  • -s <数据包大小>:指定数据包的大小(默认 56 字节)。

示例

  1. 检查是否能连通 Google DNS:
bash 复制代码
ping 8.8.8.8
  1. 发送 4 个数据包并停止:
bash 复制代码
ping -c 4 www.example.com
  1. 设置数据包大小为 128 字节:
bash 复制代码
ping -s 128 www.example.com

2. 使用 wget 下载文件

wget 是一个用于从网络上非交互式下载文件的工具,支持 HTTP、HTTPS 和 FTP 协议。

基本语法

bash 复制代码
wget [选项] <URL>

常用选项

  • -O <文件名>:指定下载的文件保存为指定名称。
  • -c:继续上次未完成的下载(断点续传)。
  • -r:递归下载(适用于整个网站)。
  • -q:静默模式(不输出信息)。
  • --limit-rate=<速率>:限制下载速度。
  • --no-check-certificate:忽略 HTTPS 的证书检查(在证书无效时有用)。

示例

plain 复制代码
下载apache-hadoop 3.3.0版本:
wget http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
在后台下载:wget -b http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
通过tail命令可以监控后台下载进度:tail -f wget-log
  1. 下载单个文件:
bash 复制代码
wget https://example.com/file.zip
  1. 指定文件名保存下载内容:
bash 复制代码
wget -O myfile.zip https://example.com/file.zip
  1. 断点续传:
bash 复制代码
wget -c https://example.com/file.zip
  1. 限制下载速度为 100 KB/s:
bash 复制代码
wget --limit-rate=100k https://example.com/file.zip

3. 使用 curl 发起网络请求

curl 是一个功能强大的命令行工具,用于从服务器请求或发送数据,支持多种协议(如 HTTP、HTTPS、FTP 等)。

基本语法

bash 复制代码
curl [选项] <URL>

常用选项

  • -o <文件名>:将输出保存到文件。
  • -O:使用远程文件名保存下载的内容。
  • -L:跟随重定向。
  • -X <请求方法>:指定 HTTP 请求方法(如 GET、POST、PUT、DELETE)。
  • -d <数据>:发送 POST 请求时附加数据。
  • -H <头部>:设置自定义 HTTP 头。
  • -I:仅显示 HTTP 响应头。
  • -k:忽略 HTTPS 证书检查。

示例

plain 复制代码
通过curl下载hadoop-3.3.0安装包:
curl -O http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz 
  1. 下载文件:
bash 复制代码
curl -O https://example.com/file.zip
  1. 保存文件到自定义文件名:
bash 复制代码
curl -o myfile.zip https://example.com/file.zip
  1. 发送 POST 请求并传递数据:
bash 复制代码
curl -X POST -d "name=John&age=30" https://example.com/api
  1. 发送自定义头部信息:
bash 复制代码
curl -H "Authorization: Bearer <token>" https://example.com/api
  1. 查看响应头信息:
bash 复制代码
curl -I https://example.com
  1. 跟随重定向:
bash 复制代码
curl -L https://short.url

总结

命令 功能 示例
ping 检查主机是否可达,测量延迟。 ping -c 4 8.8.8.8
wget 从网络上下载文件。 wget -O file.zip https://example.com/file.zip
curl 发起网络请求或下载文件。 curl -X POST -d "key=value" https://example.com/api

通过掌握这些工具,你可以在 Linux 系统中高效地进行网络操作,包括测试网络连接、下载文件以及与服务器交互。

2 端口
  1. 什么是端口?

端口是指计算机和外部交互的出入口,可以分为物理端口和虚拟端口

物理端口:USB、HDMI、DP、VGA、RJ45等

虚拟端口:操作系统和外部交互的出入口

IP只能确定计算机,通过端口才能锁定要交互的程序

  1. 端口的划分

公认端口:1~1023,用于系统内置或常用知名软件绑定使用

注册端口:1024~49151,用于松散绑定使用(用户自定义)

动态端口:49152~65535,用于临时使用(多用于出口)

  1. 查看端口占用

nmap IP地址,查看指定IP的对外暴露端口

netstat -anp | grep 端口号,查看本机指定端口号的占用情况

可以通过Linux命令去查看端口的占用情况

使用nmap命令,安装nmap:yum -y install nmap

语法:nmap 被查看的IP地址

可以看到,本机(127.0.0.1)上有5个端口现在被程序占用了。

其中:

22端口,一般是SSH服务使用,即FinalShell远程连接Linux所使用的端口

可以通过netstat命令,查看指定端口的占用情况

语法:netstat -anp | grep 端口号 ,安装netstat:yum -y install net-tools

如图,可以看到当前系统6000端口被程序(进程号7174)占用了

其中,0.0.0.0:6000,表示端口绑定在0.0.0.0这个IP地址上,表示允许外部访问

可以看到,当前系统12345端口,无人使用哦。

总结

命令 功能
netstat -a 显示所有连接和监听端口
netstat -l 显示正在监听的端口
netstat -t 查看 TCP 连接
netstat -u 查看 UDP 连接
netstat -p 显示端口对应的进程 ID 和名称
netstat -r 查看系统的路由表
ss -tln 显示监听的 TCP 端口(现代工具推荐)

8 进程管理

在 Linux 系统中,进程管理是确保系统高效运行的重要组成部分。它涉及到进程的查看、启动、终止、优先级调整等操作。

以下是进程管理的主要内容:


1. 查看进程

1.1 使用 ps 命令

ps 是一个常用的查看进程信息的命令。

  • 查看当前用户的所有进程:
bash 复制代码
ps
  • 查看所有进程:
bash 复制代码
ps -e
  • 查看所有进程的详细信息:
bash 复制代码
ps -ef

从左到右分别是:

UID:进程所属的用户ID

PID:进程的进程号ID

PPID:进程的父ID(启动此进程的其它进程)

C:此进程的CPU占用率(百分比)

STIME:进程的启动时间

TTY:启动此进程的终端序号,如显示?,表示非终端启动

TIME:进程占用CPU的时间

CMD:进程对应的名称或启动路径或启动命令

  • 实时查看某个用户的进程:
bash 复制代码
ps -u username

1.2 使用 top 命令

top 是一个动态监控系统运行状态的工具,可以实时显示所有进程的资源使用情况。

bash 复制代码
top

输出示例:

plain 复制代码
PID   USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
1234  user      20   0  163852   2320   1234 S   0.7  0.1   0:02.35 bash
2345  user      20   0  546728  15432   8765 S   1.3  0.5   0:05.87 python3
  • PID:进程 ID。
  • %CPU:进程占用的 CPU 百分比。
  • %MEM:进程占用的内存百分比。
  • COMMAND:执行进程的命令。

1.3 使用 htop

htop 是一个增强版的 top,提供更友好的界面(需要安装):

bash 复制代码
sudo apt install htop  # Debian/Ubuntu 系统
sudo yum install htop  # CentOS/RHEL 系统
htop

1.4 使用 pgrep

pgrep 可以通过进程名称直接查找进程 ID:

bash 复制代码
pgrep <进程名>

例如,查找 sshd 进程的 PID:

bash 复制代码
pgrep sshd

2. 终止进程

2.1 使用 kill 命令

kill 命令通过进程 ID (PID) 来终止进程。

  • 发送默认信号(SIGTERM)终止进程:
bash 复制代码
kill <PID>
  • 强制终止进程(SIGKILL):
bash 复制代码
kill -9 <PID>

2.2 使用 pkill 命令

pkill 通过进程名称来终止进程。

  • 终止名称为 **python3** 的进程:
bash 复制代码
pkill python3
  • 强制终止:
bash 复制代码
pkill -9 python3

2.3 使用 killall

killall 可以终止所有指定名称的进程。

  • 终止所有 **ssh** 相关的进程:
bash 复制代码
killall ssh

3. 修改进程优先级

Linux 中,每个进程都有一个优先级(Priority) ,通过 nice 值 控制,范围从 -20(最高优先级)到 19(最低优先级)。

3.1 查看进程的优先级

使用 topps 命令查看 PR(优先级)和 NI(nice 值)列。

3.2 修改进程优先级

  • 启动时设置优先级: 使用 nice 命令以指定优先级启动进程。
bash 复制代码
nice -n 10 command
  • 运行中的进程调整优先级: 使用 renice 命令调整优先级。
bash 复制代码
renice -n <新的优先级> -p <PID>

例如,将 PID 为 1234 的进程优先级设置为 5:

bash 复制代码
renice -n 5 -p 1234

4. 后台进程管理

4.1 将进程放到后台

通过在命令末尾添加 &,可以将进程放到后台运行:

bash 复制代码
command &

4.2 查看后台任务

使用 jobs 命令查看后台运行的任务:

bash 复制代码
jobs

4.3 恢复后台任务到前台

使用 fg 命令将后台任务恢复到前台:

bash 复制代码
fg <任务号>

任务号可以通过 jobs 命令获取。

4.4 暂停前台任务

使用 Ctrl + Z 可以暂停正在运行的前台任务,并将其移到后台。


5. 查看和管理系统资源

5.1 使用 free 查看内存使用

bash 复制代码
free -h

输出示例:

plain 复制代码
total        used        free      shared  buff/cache   available
Mem:          7.8Gi       2.1Gi       3.2Gi       312Mi       2.5Gi       5.0Gi
Swap:         2.0Gi          0B       2.0Gi

5.2 使用 vmstat 查看 CPU、内存、I/O 状态

bash 复制代码
vmstat 1

每秒刷新一次系统资源状态。


6. 常用进程管理命令总结
命令 功能
ps 查看进程信息
top 动态查看进程资源占用
htop 增强版的 top ,图形界面友好
pgrep 查找指定名称的进程
kill 通过 PID 终止进程
pkill 通过进程名称终止进程
killall 终止所有指定名称的进程
nice 启动进程时设置优先级
renice 修改运行中进程的优先级
jobs 查看后台任务
fg 将后台任务恢复到前台

9 主机状态

查看系统资源占用

可以通过top命令查看CPU、内存使用情况,类似Windows的任务管理器

 默认每5秒刷新一次,语法:直接输入`top`即可,按q或ctrl + c退出

PID:进程id

USER:进程所属用户

PR:进程优先级,越小越高

NI:负值表示高优先级,正表示低优先级

VIRT:进程使用虚拟内存,单位KB

RES:进程使用物理内存,单位KB

SHR:进程使用共享内存,单位KB

S:进程状态(S休眠,R运行,Z僵死状态,N负数优先级,I空闲状态)

%CPU:进程占用CPU率

%MEM:进程占用内存率

TIME+:进程使用CPU时间总计,单位10毫秒

COMMAND:进程的命令或名称或程序文件路径

top命令选项

top命令也支持选项:

选项 功能
**-p** 仅显示指定进程的信息。
**-d** 设置刷新时间间隔(秒),默认值是 5 秒。例如: **top -d 2** ** 将每 2 秒刷新一次。**
**-c** 显示产生进程的完整命令,默认只显示进程名。
**-n** 指定刷新次数后退出。例如: **top -n 3** ** 会刷新 3 次后退出程序。**
**-b** 以非交互、批量模式运行 **top** ,适合将输出重定向到文件或其他工具处理,常与 **-n** 配合使用。例如: **top -b -n 3 > /tmp/top.tmp** ** 会将统计信息输出到文件中。**
**-i** 不显示任何空闲(idle)或僵尸(zombie)的进程,适合专注于活跃进程。
**-u** 按用户过滤进程,只显示特定用户启动的进程。例如: **top -u username** ** 显示特定用户的进程信息。**
top交互式选项
按键 功能
h 显示帮助信息,列出所有交互式命令的说明。
c 切换显示模式,显示/隐藏进程的完整命令行,与启动时的 -c 参数功能相同。再次按下 c 键切换回默认模式。
f 选择需要显示的列(字段),用户可以通过按键来调整显示哪些信息。
M 按驻留内存大小(RES)对进程排序(从高到低)。
P 按 CPU 使用百分比对进程排序(从高到低)。
T 按累计运行时间排序(从高到低)。
E 切换顶部内存显示单位(KB、MB、GB)。
e 切换进程内存显示单位(KB、MB、GB)。
1 切换显示每个 CPU 的负载信息(默认显示所有 CPU 的平均负载)。
i 显示/隐藏闲置(idle)或僵尸(zombie)进程,与 -i 参数功能相同。
t 切换显示 CPU 状态信息的内容,包括用户时间、系统时间、空闲时间等。
m 切换显示内存信息的内容,包括物理内存和交换分区的使用情况。
磁盘信息监控

在 Linux 系统中,磁盘信息监控是系统管理的重要部分。以下是常用的磁盘监控命令及其功能,可以帮助您查看磁盘的使用情况、性能指标以及具体的文件占用信息。


1. df 命令:查看磁盘空间使用情况

df 命令(Disk Free)用于显示文件系统的磁盘使用情况,包括总空间、已用空间、剩余空间等。

基本语法

bash 复制代码
df [选项]

常用选项

-h:以人类可读的格式显示(单位为 KB、MB、GB)。

-T:显示文件系统的类型。

-i:显示 inode 使用情况。

--total:显示所有文件系统的总计。

示例

显示所有磁盘的使用情况(以人类可读格式):

bash 复制代码
df -h

输出示例:

plain 复制代码
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   20G   30G  40% /
tmpfs           2.0G     0  2.0G   0% /dev/shm

查看文件系统的类型:

bash 复制代码
df -T

显示 inode 的使用情况:

bash 复制代码
df -i

2. du 命令:查看目录和文件的磁盘使用情况

du 命令(Disk Usage)用于查看目录或文件占用的磁盘空间大小。

基本语法

bash 复制代码
du [选项] [路径]

常用选项

-h:以人类可读格式显示。

-s:只显示总计。

-a:显示所有文件和目录的大小。

-c:显示总计大小。

--max-depth=<n>:限制显示目录的深度。

示例

显示当前目录及其子目录的大小:

bash 复制代码
du -h

显示指定目录的总大小:

bash 复制代码
du -sh /path/to/directory

限制显示深度为 1:

bash 复制代码
du -h --max-depth=1

显示目录中每个文件的大小:

bash 复制代码
du -ah

3. lsblk 命令:显示磁盘分区信息

lsblk 命令用于以树状结构显示系统中的所有块设备信息。

基本语法

bash 复制代码
lsblk [选项]

常用选项

-f:显示文件系统类型。

-d:只显示磁盘,不显示分区或挂载点。

-o:自定义显示的列(如 NAME、SIZE、MOUNTPOINT 等)。

示例

显示磁盘和分区的详细信息:

bash 复制代码
lsblk

显示文件系统类型:

bash 复制代码
lsblk -f

自定义列显示:

bash 复制代码
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT

4. fdiskparted 命令:查看磁盘分区

fdisk

fdisk 是用于查看和管理磁盘分区的工具。

查看磁盘的分区表:

bash 复制代码
sudo fdisk -l

parted

parted 是一个更高级的分区工具,支持 GPT 分区。

显示分区信息:

bash 复制代码
sudo parted -l

5. iostat 命令:查看磁盘性能

iostat 命令(I/O Statistics)用于监控磁盘的 I/O 性能。

基本语法

bash 复制代码
iostat [选项]

常用选项

-d:显示磁盘设备的统计信息。

-x:显示扩展统计信息。

-k:以 KB 为单位显示。

示例

显示磁盘 I/O 性能统计:

bash 复制代码
iostat -d

显示详细的扩展统计信息:

bash 复制代码
iostat -dx

  1. mount 命令:查看挂载的文件系统

mount 命令用于显示当前系统挂载的文件系统。

查看挂载的文件系统

bash 复制代码
mount

  1. blkid 命令:查看设备 UUID 和文件系统类型

blkid 命令用于查看块设备的文件系统类型和 UUID。

示例

bash 复制代码
blkid

输出示例:

plain 复制代码
/dev/sda1: UUID="abcd-1234" TYPE="ext4"
/dev/sda2: UUID="efgh-5678" TYPE="swap"

  1. smartctl 命令:磁盘健康状态监控

smartctl 是用于查看磁盘健康状态的工具(需要安装 smartmontools)。

查看磁盘健康状态

安装工具:

bash 复制代码
sudo apt install smartmontools  # Debian/Ubuntu
sudo yum install smartmontools  # CentOS/RHEL

查看磁盘健康状态:

bash 复制代码
sudo smartctl -H /dev/sda

查看详细的磁盘信息:

bash 复制代码
sudo smartctl -a /dev/sda

总结

命令 功能 示例
df -h 查看磁盘使用情况 df -h
du -sh 查看目录或文件占用磁盘空间 du -sh /path/to/directory
lsblk 显示磁盘和分区信息 lsblk -f
fdisk -l 显示分区信息 sudo fdisk -l
iostat -dx 查看磁盘 I/O 性能 iostat -dx
smartctl -H 查看磁盘健康状态 sudo smartctl -H /dev/sda
blkid 查看设备 UUID 和文件系统类型 blkid
网络状态监控

在 Linux 系统中,监控网络状态是确保网络正常运行、排查问题和优化性能的关键任务。以下是常用的网络状态监控工具和命令。


1. ifconfig / ip 命令:查看网络接口信息

1.1 ifconfig 命令

ifconfig 用于查看和配置网络接口。

bash 复制代码
ifconfig

输出示例:

plain 复制代码
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::1e5:9dff:fe42:8368  prefixlen 64  scopeid 0x20<link>
        RX packets 10000  bytes 5000000 (4.7 MiB)
        TX packets 8000  bytes 4000000 (3.8 MiB)

1.2 ip 命令

ipifconfig 的现代替代工具,功能更强大。

查看所有网络接口:

bash 复制代码
ip addr

查看特定接口:

bash 复制代码
ip addr show dev eth0

2. netstat / ss 命令:查看网络连接和端口

2.1 netstat 命令

netstat 用于显示网络连接、监听端口、路由表等信息。

常用选项:

  • -a:显示所有连接和监听端口。
  • -t:仅显示 TCP 连接。
  • -u:仅显示 UDP 连接。
  • -n:以数字形式显示地址和端口(不进行 DNS 解析)。
  • -p:显示进程 ID 和名称。

示例:

  1. 显示所有网络连接:
bash 复制代码
netstat -an
  1. 显示监听的 TCP 端口:
bash 复制代码
netstat -tlp

2.2 ss 命令

ssnetstat 的现代替代工具,速度更快,功能更强大。

常用选项:

  • -t:显示 TCP 连接。
  • -u:显示 UDP 连接。
  • -n:数字显示。
  • -l:仅显示监听端口。
  • -p:显示进程。

示例:

  1. 显示所有 TCP 连接:
bash 复制代码
ss -t
  1. 显示监听的端口:
bash 复制代码
ss -ltn

3. ping 命令:测试网络连通性

ping 命令通过发送 ICMP 数据包来测试主机是否可达,以及延迟时间。

基本用法:

bash 复制代码
ping <目标地址>

示例:

  1. 测试与 8.8.8.8 的连通性:
bash 复制代码
ping 8.8.8.8
  1. 限制发送次数:
bash 复制代码
ping -c 4 google.com

4. traceroute 命令:追踪网络路径

traceroute 用于追踪从本地主机到目标主机的路径,显示经过的所有路由。

基本用法:

bash 复制代码
traceroute <目标地址>

示例:

  1. 追踪到 google.com 的网络路径:
bash 复制代码
traceroute google.com

如果系统没有安装,可以通过以下命令安装:

bash 复制代码
sudo yum install traceroute    # CentOS/RHEL
sudo apt install traceroute    # Debian/Ubuntu

5. nmap 命令:端口扫描和网络安全

nmap 是一个强大的网络扫描工具,可用于检测网络主机、端口和服务。

基本用法:

bash 复制代码
nmap [选项] <目标地址>

常用选项:

  • -sS:TCP SYN 扫描。
  • -sU:UDP 扫描。
  • -p <端口范围>:扫描指定端口。

示例:

  1. 扫描某个主机的所有端口:
bash 复制代码
nmap -p 1-65535 192.168.1.1
  1. 扫描主机并检测其服务版本:
bash 复制代码
nmap -sV 192.168.1.1

6. iftop 命令:实时流量监控

iftop 是一个实时流量监控工具,可以显示网络接口上连接的实时流量。

安装:

bash 复制代码
sudo yum install iftop    # CentOS/RHEL
sudo apt install iftop    # Debian/Ubuntu

使用:

bash 复制代码
sudo iftop

按键说明:

  • p:切换显示端口。
  • n:切换显示主机名或 IP。
  • b:切换显示流量的方向。

7. tcpdump 命令:抓包工具

tcpdump 是一个强大的抓包工具,用于捕获和分析网络流量。

基本用法:

bash 复制代码
sudo tcpdump [选项]

常用选项:

  • -i <接口>:指定要监控的接口。
  • -n:数字显示,不进行主机名解析。
  • -w <文件>:将抓取的数据保存到文件中。

示例:

  1. 监控 eth0 接口的流量:
bash 复制代码
sudo tcpdump -i eth0
  1. 抓取指定主机的流量:
bash 复制代码
sudo tcpdump -i eth0 host 192.168.1.1
  1. 保存抓取结果到文件:
bash 复制代码
sudo tcpdump -i eth0 -w output.pcap

8. vnstat 命令:带宽监控

vnstat 是一个轻量级的网络带宽监控工具,可以记录和查看流量统计信息。

安装:

bash 复制代码
sudo yum install vnstat    # CentOS/RHEL
sudo apt install vnstat    # Debian/Ubuntu

使用:

  1. 查看实时流量:
bash 复制代码
vnstat -l
  1. 查看每日流量统计:
bash 复制代码
vnstat -d

总结

命令 功能 示例
ifconfig / ip 查看网络接口信息 ip addr
netstat / ss 查看网络连接和监听端口 ss -ltn
ping 测试网络连通性 ping -c 4 8.8.8.8
traceroute 追踪网络路径 traceroute google.com
nmap 扫描端口和服务 nmap -p 1-65535 192.168.1.1
iftop 实时流量监控 iftop
tcpdump 抓包和分析网络流量 tcpdump -i eth0 host 192.168.1.1
vnstat 带宽流量统计 vnstat -d

10 环境变量

在 Linux 系统中,环境变量是存储在内存中的变量,它们影响系统和程序的运行行为。环境变量包含系统配置信息、用户信息、路径信息等,用于控制操作系统和应用程序的运行。


  1. 什么是环境变量

环境变量 是一个带有名称和值的键值对,如 PATH=/usr/bin:/bin

它们用来存储与系统或用户相关的信息,比如:

路径变量:指定可执行文件的搜索路径。

语言变量:指定系统语言和字符集。

用户变量:存储当前登录用户的信息。

环境变量在 Shell 和系统运行中扮演重要角色。


  1. 常见环境变量
变量名 作用
PATH 定义可执行文件的搜索路径,用冒号分隔路径。
HOME 当前用户的主目录路径。
USER 当前登录的用户名。
SHELL 当前用户的默认 Shell 类型(如 /bin/bash )。
LANG 系统语言和字符编码设置。
PWD 当前工作目录。
EDITOR 默认文本编辑器的路径。
PS1 定义 Shell 的提示符格式。
TERM 当前终端类型(如 xtermvt100 )。

  1. 查看环境变量

3.1 使用 echo 查看单个变量

bash 复制代码
echo $PATH

输出示例:

plain 复制代码
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

3.2 使用 env 查看所有环境变量

bash 复制代码
env

3.3 使用 printenv 查看所有环境变量

bash 复制代码
printenv

3.4 使用 set 查看所有 Shell 变量(包括环境变量和本地变量)

bash 复制代码
set

  1. 临时设置环境变量

临时设置的环境变量仅在当前会话(Shell)有效,关闭终端后会失效。

设置临时变量

bash 复制代码
export VARIABLE_NAME=value

示例:

bash 复制代码
export MY_VAR="Hello, World!"

然后查看变量值:

bash 复制代码
echo $MY_VAR

添加路径到 PATH

bash 复制代码
export PATH=$PATH:/new/path

  1. 永久设置环境变量

永久设置环境变量需要将其添加到配置文件中,例如用户的 Shell 配置文件 或系统的 环境配置文件。

5.1 用户级别环境变量

修改当前用户的 Shell 配置文件:

对于 Bash(大多数 Linux 系统默认 Shell),编辑 ~/.bashrc

bash 复制代码
vi ~/.bashrc

对于 Zsh,编辑 ~/.zshrc

bash 复制代码
vi ~/.zshrc

在文件末尾添加:

bash 复制代码
export VARIABLE_NAME=value

示例:

bash 复制代码
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin

保存文件后,执行以下命令使配置生效:

bash 复制代码
source ~/.bashrc

5.2 系统级别环境变量

系统范围的环境变量对所有用户有效,编辑 /etc/profile/etc/environment

bash 复制代码
sudo vi /etc/profile

或:

bash 复制代码
sudo vi /etc/environment

添加变量:

bash 复制代码
JAVA_HOME=/usr/local/java
PATH=$PATH:$JAVA_HOME/bin

保存后,执行以下命令使配置生效:

bash 复制代码
source /etc/profile

  1. 删除环境变量

临时删除变量

使用 unset 命令可以删除变量(仅限当前会话):

bash 复制代码
unset VARIABLE_NAME

示例:

bash 复制代码
unset MY_VAR

永久删除变量

从对应的配置文件(如 ~/.bashrc/etc/profile)中删除相关定义,并重新加载文件。


  1. 特殊环境变量文件

/etc/environment

用于设置系统范围的环境变量。

格式:VAR=value(不支持 Shell 的语法扩展)。

/etc/profile

系统范围的 Shell 配置文件,在用户登录时加载。

~/.bashrc

当前用户的 Bash 配置文件,在每次打开新终端时加载。

~/.bash_profile

当前用户的登录 Shell 配置文件。


  1. 常见任务示例

添加自定义路径到 PATH

临时添加:

bash 复制代码
export PATH=$PATH:/usr/local/my_program/bin

永久添加: 在 ~/.bashrc 文件中添加:

bash 复制代码
export PATH=$PATH:/usr/local/my_program/bin

设置 Java 环境变量

编辑 ~/.bashrc 文件:

bash 复制代码
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$PATH:$JAVA_HOME/bin

更新环境变量:

bash 复制代码
source ~/.bashrc

总结

命令 功能
echo $VAR_NAME 查看单个环境变量的值
env 查看所有环境变量
export VAR_NAME=value 临时设置环境变量
unset VAR_NAME 删除环境变量
source <文件> 使环境变量文件修改立即生效

通过掌握环境变量的操作,您可以灵活配置运行环境,优化系统和软件的使用体验。

11 上传、下载

当然,除了通过FinalShell的下方窗体进行文件的传输以外,也可以通过rz、sz命令进行文件传输。

rz、sz命令需要安装,可以通过:yum -y install lrzsz,即可安装。

rz命令,进行上传,语法:直接输入rz即可

sz命令进行下载,语法:sz 要下载的文件

文件会自动下载到桌面的:fsdownload文件夹中。

注意,rz、sz命令需要终端软件支持才可正常运行

FinalShell、SecureCRT、XShell等常用终端软件均支持此操作

**rz**** 和 **sz** 是独立的命令,分别用于上传和下载文件**,二者之间没有依赖关系。你可以根据具体需求单独使用这两个命令。

  1. **rz**** 命令:上传文件到远程服务器**
    • 用于将本地文件上传到远程服务器。
    • 上传完成后,文件会直接存放在远程服务器的当前工作目录中(可以通过 pwd 查看当前工作目录)。
    • 上传完成后,不需要再执行 sz,因为 sz 是用于下载文件的命令。
  2. **sz**** 命令:下载文件到本地**
    • 用于从远程服务器下载文件到本地。
    • 下载完成后,文件会存储到本地指定的目录中。
    • 如果你只需要下载文件,而不需要上传,那么只用 sz 即可。

12 压缩、解压

在 Linux 系统中,文件的压缩和解压是非常常见的操作。以下是常用的压缩和解压工具及其使用方法:


  1. 常见的压缩和解压工具

tar:用于打包和解压文件,通常结合 gzipbzip2 使用。

gzip/gunzip:用于压缩和解压 .gz 文件。

bzip2/bunzip2:用于压缩和解压 .bz2 文件。

xz/unxz:用于压缩和解压 .xz 文件。

zip/unzip:用于压缩和解压 .zip 文件。

7z:用于压缩和解压 .7z 文件。


2. 使用 tar 进行打包和解压

2.1 打包文件

tar 命令主要用于将多个文件或目录打包成一个归档文件。

语法

bash 复制代码
tar -cvf [打包后的文件名] [文件或目录]

示例

打包目录 mydirmydir.tar

bash 复制代码
tar -cvf mydir.tar mydir

打包多个文件为 files.tar

bash 复制代码
tar -cvf files.tar file1 file2 file3

2.2 打包并压缩

可以结合 gzipbzip2,将打包的文件进行压缩。

语法

bash 复制代码
tar -cvzf [压缩后的文件名] [文件或目录]

示例

使用 gzip 压缩目录 mydirmydir.tar.gz

bash 复制代码
tar -cvzf mydir.tar.gz mydir

使用 bzip2 压缩目录 mydirmydir.tar.bz2

bash 复制代码
tar -cvjf mydir.tar.bz2 mydir

2.3 解压 tar 包

解压 tar 文件或压缩包时,使用以下命令:

语法

bash 复制代码
tar -xvf [压缩包]

示例

解压 mydir.tar

bash 复制代码
tar -xvf mydir.tar

解压 mydir.tar.gz

bash 复制代码
tar -xvzf mydir.tar.gz

解压 mydir.tar.bz2

bash 复制代码
tar -xvjf mydir.tar.bz2

2.4 常用选项

选项 功能
-c 创建打包文件
-v 显示详细信息
-f 指定打包的文件名
-x 解包文件
-z 使用 gzip 压缩/解压
-j 使用 bzip2 压缩/解压

  1. 使用 gzipgunzip 压缩/解压

3.1 压缩文件

gzip 用于将单个文件压缩为 .gz 文件。

语法

bash 复制代码
gzip [文件名]

示例

压缩 file.txtfile.txt.gz

bash 复制代码
gzip file.txt

3.2 解压文件

gunzip 用于解压 .gz 文件。

语法

bash 复制代码
gunzip [压缩文件]

示例

解压 file.txt.gz

bash 复制代码
gunzip file.txt.gz

  1. 使用 bzip2bunzip2 压缩/解压

4.1 压缩文件

bzip2 用于将单个文件压缩为 .bz2 文件。

语法

bash 复制代码
bzip2 [文件名]

示例

压缩 file.txtfile.txt.bz2

bash 复制代码
bzip2 file.txt

4.2 解压文件

bunzip2 用于解压 .bz2 文件。

语法

bash 复制代码
bunzip2 [压缩文件]

示例

解压 file.txt.bz2

bash 复制代码
bunzip2 file.txt.bz2

5. 使用 zipunzip 压缩/解压

5.1 压缩文件

zip 用于将文件或目录压缩为 .zip 文件。

语法

bash 复制代码
zip [压缩后的文件名] [文件或目录]

示例

压缩 file.txtfile.zip

bash 复制代码
zip file.zip file.txt

压缩目录 mydirmydir.zip

bash 复制代码
zip -r mydir.zip mydir

5.2 解压文件

unzip 用于解压 .zip 文件。

语法

bash 复制代码
unzip [压缩文件]

示例

解压 file.zip

bash 复制代码
unzip file.zip
plain 复制代码
unzip [-d] 参数 

-d,指定要解压去的位置,同tar的-C选项

参数,被解压的zip压缩包文件

plain 复制代码
unzip test.zip,将test.zip解压到当前目录
unzip test.zip -d /home/it,将test.zip解压到指定文件夹内(/home/it)

  1. 使用 7z 压缩/解压

6.1 压缩文件

7z 用于创建 .7z 格式的压缩文件。

语法

bash 复制代码
7z a [压缩后的文件名] [文件或目录]

示例

压缩 file.txtfile.7z

bash 复制代码
7z a file.7z file.txt

压缩目录 mydirmydir.7z

bash 复制代码
7z a mydir.7z mydir

6.2 解压文件

7z 也可以解压 .7z 文件。

语法

bash 复制代码
7z x [压缩文件]

示例

解压 file.7z

bash 复制代码
7z x file.7z

  1. 总结
工具 操作 命令
tar 打包文件 tar -cvf archive.tar files/
tar 解包文件 tar -xvf archive.tar
gzip 压缩文件 gzip file.txt
gunzip 解压 .gz 文件 gunzip file.txt.gz
bzip2 压缩文件 bzip2 file.txt
bunzip2 解压 .bz2 文件 bunzip2 file.txt.bz2
zip 压缩文件/目录 zip -r archive.zip files/
unzip 解压 .zip 文件 unzip archive.zip
7z 压缩文件 7z a archive.7z files/
7z 解压 .7z 文件 7z x archive.7z

通过以上工具和命令,您可以在 Linux 系统中灵活地进行文件的压缩和解压操作,满足不同的需求。

相关推荐
昵称难产中20 分钟前
浅谈云计算10 | 服务器虚拟化支撑技术(长文)
运维·服务器·云计算
是店小二呀21 分钟前
【Linux】从零开始:编写你的第一个Linux进度条小程序
linux·运维·小程序
Hi竹子35 分钟前
Jenkins简单的安装运行
运维·servlet·jenkins
zhxueverme1 小时前
操作系统八股文学习笔记
笔记·学习
weisian1511 小时前
Mysql--运维篇--安全性(数据库访问控制,最小权限原则,表空间加密,TLS加密,证书签发,SQL注入及防范等)
运维·数据库·mysql
chian-ocean1 小时前
进程的家园:探索 Linux 地址空间的奥秘
android·java·linux
学习嵌入式的小羊~1 小时前
RV1126+FFMPEG推流项目(3)VI模块视频编码流程
linux·音视频
广东数字化转型1 小时前
FFmpeg开发笔记(七)欧拉系统编译安装FFmpeg
笔记·ffmpeg
垂杨有暮鸦⊙_⊙2 小时前
有限元分析学习——Anasys Workbanch第一阶段笔记(9)带孔矩形板与L型支架案例的对称平面处理方案
笔记·学习·有限元分析