Linux 基础指令与权限管理

发布于:2025-08-18 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、Linux 操作系统概述

1.1 操作系统的核心价值

        操作系统的本质是 "使计算机更好用"。它作为用户与硬件之间的中间层,负责内存管理、进程调度、文件系统管理和设备驱动管理等核心功能,让用户无需直接操作硬件即可完成复杂任务。在服务器领域,Linux 凭借其稳定性、安全性和开源特性,已成为全球最主流的操作系统之一。

1.2 Linux 的发展历程

1.2.1 UNIX 的起源

        Linux 的故事始于 UNIX。1968 年,通用电器、贝尔实验室和麻省理工学院合作开发了 Multics 系统,为后续操作系统奠定了多任务、多用户的设计基础。1969-1970 年,贝尔实验室的 Ken Thompson 和 Dennis Ritchie 在 Multics 基础上开发了 UNIX 系统,其高效性和可移植性使其迅速在学术界传播。

        1972 年,UNIX 开始商业发行,加州大学伯克利分校在此基础上开发了 BSD 版本,与 AT&T 的 System V 形成两大分支。1991 年,UNIX 系统实验室推出 System V Release 4,整合了多个版本的特性,成为重要的商业标准。

1.2.2 Linux 的诞生

        1991 年 10 月 5 日,赫尔辛基大学研究生 Linus Torvalds 在 Usenet 新闻组宣布了 Linux 操作系统的诞生。这款受 Minix 启发的系统最初仅作为个人项目,却意外引发全球开发者协作热潮。1994 年,Linux 1.0 版本正式发布,标志着其进入实用阶段。

        与 UNIX 不同,Linux 采用 GNU GPL 开源协议,允许用户自由使用、修改和分发源代码,这种开源模式极大加速了其发展。如今,Linux 已从最初的个人项目成长为支撑全球互联网基础设施的核心系统。

1.3 Linux 的应用现状

  • 服务器领域:占据全球 75% 的服务器市场份额,在政府、金融、电信等关键领域广泛应用
  • 桌面领域:国内有中标麒麟、深度 Linux 等发行版,国际上 Ubuntu 凭借易用性积累了大量用户,但在软硬件兼容性上仍与 Windows 存在差距
  • 移动嵌入式领域:Android 系统基于 Linux 内核开发,占据全球 84.6% 的智能手机市场;路由器、智能电视等设备也大量采用定制化 Linux
  • 云计算 / 大数据领域:86% 的企业使用 Linux 构建云计算和大数据平台,逐步取代 UNIX 成为主流

1.4 主流发行版本

  • Debian:以稳定性著称,适合服务器场景,适合高级用户和系统管理员
  • Ubuntu:Debian 的衍生版,易用性强,广泛应用于桌面、服务器和云计算领域
  • 红帽企业级 Linux(RHEL):首个商业 Linux 发行版,通过 RHCSA/RHCE 认证体系培养了大量系统管理员
  • CentOS:基于 RHEL 源代码重构的免费版本,与 RHEL 兼容性极高,适合预算有限的企业
  • Fedora:红帽的测试平台,包含最新技术,适合开发者尝鲜
  • Kali Linux:专注于渗透测试的发行版,预装大量安全工具,是网络安全从业者的首选

二、Linux 基础操作指令

2.1 远程登录工具 XShell

        在服务器管理中,图形界面因资源消耗大、效率低而极少使用,远程终端成为主要操作方式。XShell 是常用的远程终端工具,其免费版本(home/school)可满足个人学习需求(也可以使用虚拟机,但是不推荐新手使用虚拟机)。

登录步骤

  1. 查看 Linux 主机 IP:ifconfig(可在各大平台购买云服务器)
  2. 建立连接:ssh [IP地址]
  3. 输入用户名和密码完成登录

2.2 文件与目录操作

2.2.1 目录查看(ls)

ls命令用于列出目录内容,选项:

  • -a:显示所有文件(包括以.开头的隐藏文件)
  • -l:显示详细信息(权限、所有者、大小、修改时间等)
  • -d:将目录本身作为文件显示
  • -i:显示 inode 编号
  • -t:按修改时间排序
  • -r:反向排序
  • -R:递归显示子目录内容

示例

# 显示当前目录所有文件的详细信息
ls -al

# 显示/var目录的inode信息
ls -id /var

# 按大小排序显示/tmp目录内容
ls -lS /tmp

这里常用选项有 -l -a记住这两个就行

2.2.2 路径查看(pwd)

        在这里介绍几个标识符 '.' 代表当前工作路径 '..'代表上一级工作路径'/'代表根目录

pwd命令用于显示当前工作目录的绝对路径:

2.2.3 目录切换(cd)

cd命令用于切换工作目录,Linux 的路径分为:

  • 绝对路径:从根目录/开始的完整路径(如/home/whb/test
  • 相对路径:相对于当前目录的路径(如../temp表示上级目录的 temp 文件夹)

常用操作

# 切换到/tmp目录
cd /tmp

# 返回上级目录
cd ..

# 切换到用户家目录
cd ~

# 切换到上一次所在目录
cd -
2.2.4 文件创建(touch)

touch命令用于创建空文件或修改文件时间戳:

  • -a:仅修改访问时间
  • -m:仅修改修改时间

示例

# 创建新文件
touch newfile.txt

# 修改文件访问时间
touch -a oldfile.txt

# 查看文件时间信息
stat newfile.txt

文件的时间戳包含三种:

  • Access:最后访问时间
  • Modify:内容最后修改时间
  • Change:元数据(权限、所有者等)最后修改时间

2.2.5 目录创建(mkdir)

mkdir命令用于创建目录,关键选项-p可递归创建多级目录:

# 创建单级目录
mkdir docs

# 创建多级目录
mkdir -p project/src/main/java

# 查看创建结果 tree命令可能会没有安装 安装指令为:(sudo) yum/apt install -y tree (root账户不需要sudo)
tree project
2.2.6 目录删除(rmdir)

rmdir用于删除空目录,-p选项可删除空的父目录(指令不常用,推荐使用rm):

# 删除空目录
rmdir empty_dir

# 递归删除空目录链
rmdir -p a/b/c

注意:若目录非空,rmdir 会提示错误,需使用rm -r命令

2.2.7 文件 / 目录删除(rm)

rm是删除文件和目录的核心命令,常用选项:

  • -f:强制删除,不提示
  • -i:删除前询问确认
  • -r:递归删除目录及内容

示例

# 删除文件(会提示)
rm file.txt

# 强制删除目录及所有内容
rm -rf old_project

# 删除前询问的递归删除
rm -ri data/

警告:rm -rf /是极其危险的命令,会删除系统所有文件,绝对禁止使用

2.2.8 文件复制(cp)

cp用于复制文件或目录,核心选项:

  • -i:覆盖前询问
  • -r:递归复制目录
  • -f:强制覆盖

示例

# 复制文件
cp document.txt backup/

# 递归复制目录
cp -r src/ dest/

# 覆盖前询问
cp -i new.txt old.txt

# 复制所有txt文件到archive目录
cp *.txt archive/
2.2.9 文件移动 / 重命名(mv)

mv可实现文件移动或重命名,常用选项:

  • -i:覆盖前询问
  • -f:强制覆盖

示例

# 重命名文件
mv oldname.txt newname.txt

# 移动文件到目录
mv report.pdf docs/

# 移动多个文件到归档目录
mv *.log logs/

# 覆盖前询问
mv -i temp.txt data/

2.3 文件内容查看

2.3.1 文本查看(cat)

cat用于查看文件内容,适合小文件:

  • -n:显示所有行号
  • -b:仅显示非空行号
  • -s:压缩连续空行为一行

示例

# 查看文件内容
cat README.md

# 显示行号
cat -n script.sh

# 压缩空行
cat -s notes.txt
2.3.2 分页查看(more/less)
  • more:基本分页工具,仅支持向前滚动

    • -n:指定每页显示行数
    • q:退出查看
  • less:增强版分页工具,支持前后滚动和搜索

    • -N:显示行号
    • /关键词:向下搜索
    • ?关键词:向上搜索
    • n:重复上一次搜索
    • q:退出

示例

# 分页查看长文件
more -20 large_file.log

# 带行号查看并允许搜索
less -N access.log
2.3.3 头尾查看(head/tail)
  • head:显示文件开头内容(默认 10 行)
  • tail:显示文件结尾内容(默认 10 行),-f选项可实时监控文件更新

示例

# 显示前5行
head -5 config.ini

# 显示最后3行
tail -3 results.txt

# 实时监控日志文件
tail -f /var/log/syslog

高级用法:显示文件的 180-200 行

head -200 file.txt | tail -20

2.4 系统信息查询

2.4.1 帮助手册(man)

man命令用于查看命令手册,手册分为 9 个章节:

  1. 普通命令
  2. 系统调用(如 open、write)
  3. 库函数(如 printf)
  4. 特殊文件(/dev 下的设备文件)
  5. 文件格式(如 passwd 文件结构)
  6. 游戏程序
  7. 系统变量和附件
  8. 系统管理命令
  9. 内核相关

示例

# 查看ls命令手册
man ls

# 查看printf库函数(第三章)
man 3 printf

# 查看系统调用fork(第二章)
man 2 fork
2.4.2 命令定位(which/whereis)
  • which:查找命令的可执行文件路径
  • whereis:查找命令的二进制文件、源代码和手册页

示例

# 查找ls命令位置
which ls

# 查找gcc的相关文件
whereis gcc
2.4.3 时间管理(date/cal)

date命令用于显示和设置系统时间:

# 显示当前时间
date

# 按指定格式显示(年/月/日-时:分:秒)
date +%Y/%m/%d-%H:%M:%S

# 显示时间戳(从1970-01-01开始的秒数)
date +%s

# 时间戳转换为可读时间
date -d @1673432636

cal(calendar)命令用于查看日历:

# 显示当前月日历
cal

# 显示2024年全年日历
cal 2024

# 显示包含上月、本月、下月的日历
cal -3

# 显示当天是当年的第几天
cal -j
2.4.4 系统信息(uname)

uname用于查看系统内核信息:

# 显示内核版本
uname -r

# 显示所有系统信息
uname -a

# 查看操作系统版本(部分发行版支持)
lsb_release -a

2.5 搜索与文本处理

2.5.1 文件搜索(find)

find在目录树中搜索文件,常用选项:

  • -name:按文件名搜索
  • -type:按文件类型搜索(f:普通文件,d:目录,l:链接)
  • -size:按文件大小搜索
  • -mtime:按修改时间搜索

示例

# 在当前目录搜索test.c文件
find . -name "test.c"

# 在/home下搜索所有目录
find /home -type d

# 搜索大于100MB的文件
find / -size +100M

# 搜索近7天修改过的文件
find /var/log -mtime -7
2.5.2 文本搜索(grep)

grep用于在文件中搜索字符串,支持正则表达式:

  • -i:忽略大小写
  • -n:显示行号
  • -v:反向匹配(显示不包含关键词的行)
  • -r:递归搜索目录

示例

# 在文件中搜索关键词
grep "error" app.log

# 忽略大小写搜索
grep -i "warning" system.log

# 显示行号并反向匹配
grep -vn "debug" debug.log

# 递归搜索目录中的关键词
grep -r "config" /etc/

2.6 压缩与打包

2.6.1 zip/unzip(知道)

zipunzip用于处理 ZIP 格式压缩文件:

# 压缩目录
zip -r docs.zip documents/

# 解压到指定目录
unzip docs.zip -d /tmp/
2.6.2 tar(重要)

tar是 Linux 最常用的打包工具,支持多种压缩算法:

  • -c:创建打包文件
  • -x:解包
  • -t:查看包内文件
  • -z:使用 gzip 压缩 / 解压
  • -j:使用 bzip2 压缩 / 解压
  • -v:显示过程
  • -f:指定文件名
  • -C:指定解压目录

示例

# 打包目录(不压缩)
tar -cvf data.tar data/

# 用gzip压缩
tar -zcvf logs.tar.gz /var/log/

# 用bzip2压缩
tar -jcvf docs.tar.bz2 documents/

# 查看压缩包内容
tar -ztvf logs.tar.gz

# 解压到指定目录
tar -zxvf logs.tar.gz -C /tmp/

# 仅解压包中的特定文件
tar -zxvf docs.tar.bz2 README.md

三、Linux 权限管理系统

3.1 权限的核心概念

        Linux 是多用户操作系统,权限系统确保不同用户对资源的访问受到合理控制。权限管理基于三个维度:

  • 访问者分类

    • u(User):文件所有者
    • g(Group):所有者所在组的用户
    • o(Others):其他用户
    • a(All):所有用户
  • 文件类型

    • d:目录
    • -:普通文件
    • l:软链接(快捷方式)
    • b:块设备文件(如硬盘)
    • c:字符设备文件(如终端)
    • p:管道文件
    • s:套接口文件

3.2 基本权限表示

Linux 为每种访问者分配三种基本权限:

权限 字符表示 数字表示 文件含义 目录含义
r 4 可读取文件内容 可列出目录内容
w 2 可修改文件内容 可创建 / 删除目录内文件
执行 x 1 可执行文件 可进入目录
无权限 - 0 无对应权限 无对应权限

        权限组合采用三位数表示(类似八进制如755),第一位表示所有者权限,第二位表示组权限,第三位表示其他用户权限。例如:

  • rwxr-xr-x(755):所有者拥有全部权限,组和其他用户有读和执行权限
  • rw-r--r--(644):所有者有读写权限,组和其他用户仅有读权限

3.3 权限修改命令

3.3.1 chmod:修改文件权限

chmod用于修改文件或目录的权限,支持两种修改方式:

符号法chmod [u/g/o/a][+/-/=][r/w/x] 文件名

# 给所有者增加执行权限
chmod u+x script.sh

# 移除其他用户的写权限
chmod o-w data.txt

# 给所有用户设置读写权限
chmod a=rw config.ini

# 递归修改目录权限
chmod -R g+rx docs/

数字法chmod 三位数字 文件名

# 设置权限为rw-r--r--
chmod 644 article.txt

# 设置目录权限为rwxr-x---
chmod 750 project/

# 递归设置目录及内容权限
chmod -R 775 shared/
3.3.2 chown:修改所有者

chown用于修改文件的所有者(仅 root 或文件所有者可执行):

# 改变文件所有者
chown alice report.txt

# 同时改变所有者和所属组
chown bob:devs data.csv

# 递归修改目录所有者
chown -R www:www /var/www/
3.3.3 chgrp:修改所属组

chgrp用于修改文件的所属组:

# 改变文件所属组
chgrp devs code.c

# 递归修改目录所属组
chgrp -R admins docs/

3.4 权限掩码(umask)

umask 用于设置新建文件和目录的默认权限,其值为 "要去掉的权限"。计算方式为:

  • 新建文件默认权限:0666 & ~umask(文件默认无执行权限)
  • 新建目录默认权限:0777 & ~umask

示例

# 查看当前umask
umask

# 设置umask(root默认0022,普通用户默认0002)
umask 002

# 验证:新建文件权限为664(666-002)
touch test.txt
ls -l test.txt  # -rw-rw-r--

3.5 特殊权限:粘滞位

        在默认权限下,只要用户对目录有写权限,就可以删除目录中的任何文件,无论该文件的所有者是谁。为解决此问题,Linux 引入粘滞位(Sticky Bit):

  • 目录设置粘滞位后(权限末尾显示t),仅以下用户可删除文件:
    1. 超级管理员(root)
    2. 目录所有者
    3. 文件所有者

操作示例

# 给目录添加粘滞位
chmod +t /tmp

# 查看权限(显示drwxrwxrwt)
ls -ld /tmp

# 移除粘滞位
chmod -t /tmp

系统临时目录/tmp默认设置粘滞位,确保普通用户不能删除他人文件。

3.6 sudo 权限管理(需要学习vim工具,后续会讲)

sudo 允许普通用户临时执行 root 权限命令,配置步骤:

  1. 修改 sudo 配置文件(需 root 权限):
chmod 740 /etc/sudoers
vi /etc/sudoers
  1. 添加权限配置(格式:用户名 主机=(执行用户) 命令):
# 允许alice执行所有命令
alice ALL=(ALL) ALL

# 允许bob仅执行useradd和userdel命令
bob ALL=(root) /usr/sbin/useradd, /usr/sbin/userdel
  1. 普通用户使用 sudo 执行命令:
# 以root权限创建用户
sudo -u root useradd newuser

四、Linux 常用进阶操作

4.1 管道与重定向

  • 重定向:改变命令输出方向

    • >:覆盖写入文件
    • >>:追加写入文件
    • <:从文件读取输入
  • 管道:将一个命令的输出作为另一个命令的输入(|

示例

# 将命令输出写入文件
ls -l > filelist.txt

# 追加输出到文件
echo "new line" >> notes.txt

# 统计文件行数
cat large_file.txt | wc -l

# 搜索进程并显示详细信息
ps aux | grep "nginx"

4.2 系统进程管理(top)

top用于实时监控系统进程和资源占用:

  • -d:设置刷新间隔(秒)
  • -n:设置刷新次数

操作快捷键

  • q:退出
  • P:按 CPU 使用率排序
  • M:按内存使用率排序
  • k:终止指定进程
  • h:显示帮助

示例

# 每2秒刷新一次,共刷新5次
top -d 2 -n 5

4.3 别名设置(alias)

alias用于创建命令别名,简化复杂操作:

# 设置别名
alias ll='ls -alF'
alias rm='rm -i'  # 删除前自动询问

# 查看别名
alias

# 取消别名
unalias ll

永久生效需将别名添加到~/.bashrc~/.bash_profile文件。

4.4 文件传输(rz/sz)

通过 XShell 在 Windows 和 Linux 间传输文件:

# 安装工具
sudo yum install -y lrzsz

# 上传文件(从Windows到Linux)
rz  # 执行后选择本地文件

# 下载文件(从Linux到Windows)
sz filename.txt

五、权限管理实践案例

5.1 网站目录权限配置

为确保 Web 服务器安全,合理配置目录权限:

# 创建网站根目录
mkdir -p /var/www/example.com

# 设置所有者为www-data(Web服务用户)
chown -R www-data:www-data /var/www/example.com

# 目录权限:所有者读写执行,组读执行,其他无权限
find /var/www/example.com -type d -exec chmod 750 {} \;

# 文件权限:所有者读写,组读,其他无权限
find /var/www/example.com -type f -exec chmod 640 {} \;

5.2 多用户协作目录

创建团队共享目录,确保成员可读写但不能删除他人文件:

# 创建共享目录
mkdir /team/share

# 设置所属组为dev
chgrp -R dev /team/share

# 允许组内用户读写,添加粘滞位
chmod -R 775 /team/share
chmod +t /team/share

5.3 日志文件权限控制

确保日志文件可被服务写入,同时仅管理员可查看:

# 创建日志目录
mkdir /var/log/app

# 设置所有者为应用用户,所属组为adm
chown -R appuser:adm /var/log/app

# 目录权限:所有者全权限,组读执行,其他无
chmod 750 /var/log/app

# 日志文件权限:所有者读写,组读,其他无
chmod 640 /var/log/app/*.log

六、总结与扩展学习

        Linux 指令和权限管理是系统运维的基础,掌握这些知识不仅能提高工作效率,更能构建安全可靠的系统环境。学习建议:

  1. 刻意练习:通过实际操作记忆指令,避免死记硬背
  2. 查看手册:善用man命令查询参数细节
  3. 理解原理:不仅要知道 "怎么做",更要理解 "为什么"
  4. 安全意识:操作权限和删除命令时务必谨慎,养成备份习惯

        进阶学习方向:Shell 脚本编程、Linux 内核原理、容器化技术(Docker)等,这些都需要扎实的 Linux 基础作为支撑。

        Linux 的开源生态和丰富工具链为技术人员提供了无限可能,持续探索和实践,才能真正发挥其强大能力。


网站公告

今日签到

点亮在社区的每一天
去签到