Linux 基础学习笔记:从入门到踩坑全记录(对笔记一的补充)

Linux 基础学习笔记:从入门到踩坑全记录(对笔记一的补充)


基础概念:命令解析器和内核

名词解释

刚开始学 Linux 的时候,我经常被各种名词搞混。这里记一下最核心的两个:

  • 命令解析器:默认运行在终端里,负责解析你敲进去的每条命令。相当于你和系统之间的翻译官。
  • 内核:操作系统的核心,我们平时说“系统”其实大多指的是内核。没有内核,啥也干不了。

Linux 内核结构示意图

终端提示符长啥样

root@itcast:~$ 

每个字符都有含义:用户名@主机名:当前工作路径$。注意 $ 是普通用户,# 表示 root。

常用快捷键(真香整理)

这些快捷键我一开始死活记不住,但用多了就离不开了:

快捷键作用
Tab自动补全文件名、目录、命令(强烈推荐!)
Ctrl+P / Ctrl+N上下翻历史命令
Ctrl+A光标跳到行首
Ctrl+E光标跳到行尾
Ctrl+D相当于 Delete
Ctrl+U删掉光标到行首的内容

文件系统:Linux 的目录结构

根目录下什么东西?

初学 Linux 时,我被 /bin/dev/etc 这些目录搞得很懵。后来明白了,每个目录都有专门用途:

  • /bin:存放常用二进制可执行文件,比如 lscatecho
  • /dev:硬件设备对应的文件。Linux 里 一切皆文件,鼠标键盘都是文件。记得之前踩了个坑,想测试鼠标设备,运行了 sudo cat /etc/input/mice,结果终端里乱码喷涌……吓得我赶紧按 Ctrl+C。
  • /etc:系统配置文件的大本营。
  • /home:普通用户的宿主目录,比如用户 itcast 的家在 /home/itcast
  • /lib:系统库文件,比如标准 C 库在 /lib/x86_64-linux-gnu
  • /root:超级管理员 root 的家。
  • /tmp:临时文件存放处,谁都能写,但是权限有讲究(后面会讲粘滞位)。
  • /usr:用户相关的资源,很多软件装在这里。

文件类型:Linux 不靠后缀名

这一点和 Windows 很不一样。Linux 里文件类型通过 ls -l 的第一个字符判断:

  • - 普通文件
  • d 目录
  • l 软链接(相当于快捷方式)
  • p 管道文件
  • s 套接字文件
  • c 字符设备
  • b 块设备

前三种是真正的文件,后四种是伪文件,不占用磁盘空间。 这个知识点面试经常考。

文件访问属性:rwx 组合拳

ls -l 输出中,权限部分有 9 个字符,分为三组,每组 rwx(读、写、执行),缺失用 - 表示。

分组对应:所有者(文件创建者)、所属组(用户所在组)、其他人(路人)。

比如 drwxr-xr-- 表示:目录,所有者可读写执行,所属组可读可执行,其他人只读。

硬链接与软链接:终于搞懂了

硬链接

创建一个文件 file1,然后用 ln file1 file1.hard 创建硬链接。特点是同步更新——修改一个,另一个也跟着变。

原理是它们共享同一个 inode(文件数据索引节点)。查看 inode 可以用:

stat 文件名
ls -i 文件名

注意:不能给目录创建硬链接,只能对文件做。

软链接

ln -s 文件名 软链接名 创建,相当于 Windows 的快捷方式。

踩过一个坑:创建软链接最好用绝对路径,否则移动软链接文件后,它会失效。因为软链接只存路径字符串,相对路径一移动就找不到了。

ln -s /home/user/bbb b.soft   # 推荐绝对路径

软链接可以给目录创建,硬链接不行。


文件与目录操作:日常高频命令

ls 命令:参数组合拳

我最常用的几个:

  • ls -l:显示详细信息
  • ls -a:显示所有文件(包括隐藏文件 .xxxx
  • ls -R:递归显示子目录
  • ls -h:人性化显示文件大小(配合 -l 使用)

还有两个别名:

  • ll 等价于 ls -alF
  • la 等价于 ls -a
ls -l 输出详解
-rw-r--r--  1 itcast itcast  1024 Jun  6 19:56 hello.txt

这七部分分别是:

  1. 文件类型 + 权限(10个字符)
  2. 硬链接数
  3. 所有者
  4. 所属组
  5. 文件大小(普通文件是实际大小,目录是占用空间,4K 整数倍)
  6. 最后修改时间
  7. 文件名

ls -l 详细图解

创建文件与目录

  • touch 文件名:创建空文件。Linux 不认后缀名,所以 qa.cc.a.a.f.a 这样的文件名完全合法。
  • mkdir 目录名:创建空目录。mkdir -p a/b/c/d 可以创建多级目录。

删除:rm 要谨慎

rm 删除的文件不能恢复(虽然磁盘恢复工具很复杂,但别指望)。所以一定要小心。

  • rmdir 目录名:只能删除空目录。
  • rm -r 目录名:递归删除,目录非空必须加 -r
  • rm -f 文件名:强制删除,不提示。
  • rm -i 文件名:交互式确认。

复制与移动

cp 命令

  • cp 文件A 目录B:把文件A复制到目录B(目录B必须存在)。
  • cp 文件A 文件B:把A覆盖到B(如果B存在)。
  • cp -r 目录A 目录B:递归复制目录。
  • cp -a 目录A 目录B:保留文件属性复制。

mv 命令

  • mv 源文件 目标文件:改名字(目标文件不存在时)。
  • mv 源文件 目标目录:移动文件到目录(目录存在)。
  • 操作目录不需要加 -r

查看文件内容

  • cat 文件名:打印到屏幕。
  • cat f1 > f2:覆盖写入。cat f1 >> f2:追加写入。
  • tac 文件名:倒序输出(挺好玩的)。

大文件查看

  • more 文件名:分屏显示,按空格翻页,Enter 翻行,q 退出。上下箭头无效。
  • less 文件名:类似 more,但支持上下箭头滚动。
  • head -5 文件名:看前五行。
  • tail -5 文件名:看后五行。

查找命令路径

  • which 命令名:查看命令对应的可执行文件位置。比如 which ls 一般输出 /bin/ls

用户与权限管理:终于搞懂了“为什么我不能删这个文件”

什么是权限?为什么需要权限?

简单说,权限就是“能不能访问资源”的问题。Linux 是多用户操作系统,权限是为了隔离用户,避免乱搞。

权限的组成:人(用户/组) + 文件属性(rwx)

用户分类

  • 超级用户 root:99% 不受权限约束,特权阶级。
  • 普通用户:受权限约束。

切换用户:

  • su 用户名:切换到其他用户(需要密码)。
  • su - 用户名:以重新登录方式切换,环境变量更干净。
  • Ctrl+D:回到上一个账号。

sudo:让普通用户临时提权

当普通用户想安装软件或修改系统文件时,可以用 sudo 命令。但用户必须在 /etc/sudoers 白名单里(只有 root 能改)。

添加/删除用户

sudo adduser 新用户名   # 交互式添加
sudo deluser 用户名      # 删除用户,宿主目录不会自动删

查看用户信息:/etc/passwd 文件末行新增了用户 UID、GID、宿主目录等;/etc/group 文件末行新增了组信息。

修改权限:chmod

文字设定法
chmod u+x 文件名    # 给所有者添加执行权限
chmod g-w,o+r 文件名  # 组去掉写,其他人加读
chmod a=rwx 文件名   # 所有人读写执行

操作对象:u(所有者)g(组)o(其他人)a(所有人,默认)。
操作符:+ 添加,- 去掉,= 赋予并取消其他权限。

⚠️ 踩坑提示:文件要执行必须具备两个条件:1)文件本身是可执行文件(如脚本、二进制);2)有 x 权限。缺一不可。

数字设定法
  • r=4, w=2, x=1
  • 每组权限范围 0~7
chmod 755 文件名    # 所有者 rwx,组 r-x,其他人 r-x
chmod 463 文件名    # 所有者 r--,组 rw-,其他人 -wx

修改所有者与所属组

sudo chown 用户名 文件名        # 改所有者
sudo chgrp 组名 文件名          # 改所属组
sudo chown 用户名:组名 文件名   # 同时改

面试高频问题

1. 进入一个目录需要什么权限?

需要可执行权限(x)

  • r 决定能否查看目录下文件列表。
  • w 决定能否增删改目录下文件。
2. 为什么新建文件的起始权限是 644/755?

Linux 有 权限掩码 umask。默认起始权限:

  • 普通文件:666
  • 目录文件:777

最终权限 = 起始权限 & (~umask)。
常见 umask 为 0022(八进制),去掉后三位 022(二进制 000 010 010),所以:

  • 文件最终:666 & ~022 = 644
  • 目录最终:777 & ~022 = 755

可以通过 umask 数字 临时修改。

3. 粘滞位(Sticky Bit)

问题:一个公共目录(如 /tmp),任何人都可以写,但我不想让别人删除我的文件怎么办?

粘滞位 就是干这个的。开启后,用户只能删除自己创建的文件,不能删除别人的

  • 数字表示:1000(特殊权限位),如 chmod 1777 目录名
  • 字符表示:ls -l 中,其他用户执行权限位显示 t(小写)或 T(无执行权限时)。

示例:drwxrwxrwt 就是 /tmp 目录的典型权限。


查找与过滤:find、grep 等

find 命令:超实用

语法:find 搜索路径 参数 条件

常用参数:

  • -name:按文件名,支持通配符 *?
  • -type:按类型(f 文件,d 目录,l 链接等)
  • -size:按大小(+3M -5M 表示大于3M小于5M)
  • -maxdepth:限制搜索深度,必须放在其他参数前面。
  • -exec:对搜索结果执行命令,如 find ./ -name "*.txt" -exec rm {} \;
  • 管道 | xargs:也可以将结果传给其他命令,配合 -print0 处理带空格的文件名。

示例:

find ~/ -name "*.jpg" -size +1M -size -5M | xargs ls -lh

grep:行文本过滤

grep '关键词' 文件名 可以筛选出包含关键词的行。常用选项:

  • -v:反向选择(不包含关键词的行)
  • -n:显示行号
  • -i:忽略大小写

进阶用法:管道组合

cat hello.txt | head -2100 | tail -10 | grep '8'

这条命令先取文件前 2100 行,再取后 10 行,最后筛选出包含 8 的行——可以用来快速定位日志。

其他小工具

  • file 文件名:查看文件实际类型(不靠后缀名)
  • whereis 命令:查找命令的二进制、源码、手册位置
  • alias 别名='命令':设置命令别名,注意是内存级别,重启失效。
  • top:资源查看器,top -d 2 -n 5 表示每2秒刷新一次,共刷新5次。

后记

这篇笔记是我学 Linux 基础时边学边记的,可能有些地方啰嗦,但都是自己踩坑后的真实感悟。比如软链接用绝对路径、粘滞位的应用场景、umask 的计算……当初没注意这些细节,调试了好半天。

Linux 的学习就是一个不断踩坑、填坑的过程。希望这篇能帮你少走一些弯路。有问题欢迎评论交流,一起进步!

下次我打算整理一下 gcc 编译和 Makefile 的内容,感兴趣的话可以关注~


十、粘滞位对目录内其他操作的详细影响

除了删除权限,粘滞位对文件的重命名移动也有限制:

  1. 普通用户:无法重命名其他用户的文件,也无法将其移动到目录外;但可以对自己的文件执行任何操作。
  2. 文件自身权限:如果文件本身对他人有写权限(如 666),粘滞位依然阻止他人删除或重命名该文件——目录级粘滞位优先级高于文件权限。
  3. 目录所有者/root:不受粘滞位限制,可对目录内任何文件进行删除、重命名、移动。

验证命令(接上文测试):

# 用户B尝试重命名用户A的文件
mv public_dir/test1.txt public_dir/test2.txt   # 报错:Operation not permitted

# 用户B尝试将用户A的文件移出目录
mv public_dir/test1.txt /tmp/   # 报错:Operation not permitted

# 目录所有者(root或目录创建者)执行上述操作成功

十一、粘滞位与 ACL 的交互

当目录同时设置了 ACL(访问控制列表)和粘滞位时:

  • ACL 可以赋予特定用户额外权限(例如写入),但粘滞位的删除限制仍然生效
  • 即便某用户通过 ACL 获得了目录的写权限,也无法删除其他用户的文件——粘滞位是“最后一道防线”。

典型场景:共享项目目录,通过 ACL 允许特定用户组读写,开启粘滞位防止误删他人工作成果。

十二、生产环境建议

  1. 公共上传目录(如 web 应用的文件上传目录):必须设置粘滞位,防止用户覆盖或删除他人上传的文件。
  2. 共享数据目录(团队协作):推荐权限 1775(所有者组可写,其他只读)或 1777(完全公开),配合粘滞位使用。
  3. 检查现有目录:定期执行 find / -type d -perm -1000 2>/dev/null,找出所有开启了粘滞位的目录,评估是否必要。
  4. 不要随意去除系统默认粘滞位/tmp/var/tmp 的粘滞位是安全基线,移除可能导致系统混乱。

十三、与其他特殊权限的对比

特殊权限标识位作用对象效果
SUID4xxx文件执行时获得文件所有者权限
SGID2xxx文件/目录文件:执行时获得文件组权限;目录:新文件继承目录组
粘滞位1xxx目录限制用户删除不属于自己的文件

三者互不冲突,可组合设置,例如 chmod 1777 仅用了粘滞位,必要时可叠加 2777(粘滞位 + SGID)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值