LInux基础
计算机概论
电脑硬件的五大单元
-
输入单元
-
输出单元
-
**CPU控制单元:**主要协调
周边组件以及个单元的工作 -
**CPU算数逻辑单元:**主要负责
逻辑运算和逻辑判断 -
**内存:**CPU所有能够
直接使用的数据都来自于内存所有的数据都要经过内存传输,所以说要加快系统的性能,通常直接加大内存容量
计算机的重点在于 CPU ,它是一个具有一定功能的芯片,内部含有 指令集
常用计算单位(容量,速度)
容量单位:
二进制:
电脑只认识 0和 1,0/1二进制的单位就是位(bit),8位就是1字节(byte),B,K,M,G之间进制为2的10次方=1024
这是因为计算机底层使用二进制(2的10次方 = 1024)。这是操作系统(如Windows, macOS) 和软件通常使用的标准。
十进制:
以 1000 为进制,遵循国际单位制(SI)标准。这是硬盘、U盘、SSD等存储设备制造商通常使用的标准。
如何区分(单位)
为了消除混淆,国际电工委员会(IEC)在1998年引入了专门的二进制单位符号:
- KiB: Kibibyte(1 KiB = 1024 Bytes)
- MiB: Mebibyte(1 MiB = 1024 KiB)
- GiB: Gibibyte(1 GiB = 1024 MiB)
- TiB: Tebibyte(1 TiB = 1024 GiB)
而传统的十进制单位应严格表示为:
- KB: Kilobyte(1 KB = 1000 Bytes)
- MB: Megabyte(1 MB = 1000 KB)
- GB: Gigabyte(1 GB = 1000 MB)
- TB: Terabyte(1 TB = 1000 GB)
U盘容量不符
- 制造商的角度(十进制):
- 1 TB = 1,000,000,000,000 Bytes
- 操作系统的角度(二进制):
- 操作系统将这 1,000,000,000,000 个字节按照 1024 的进制转换成它显示的“GB”。
- 计算过程: 1,000,000,000,000 Bytes / (1024 Bytes/KiB) / (1024 KiB/MiB) / (1024 MiB/GiB)
- 结果 ≈ 931.32 GiB
- 但Windows把它显示为 931 GB。
所以,你并没有丢失空间,这只是两种不同计数标准造成的“视觉差异”。
速度单位
在网络传输方面,是以位(bit)为单位,所以常听到的 20M/5M光纤传输速度,其实指的是Mib/s
所以转换位字节时其速度应该是 2.5MB/s和625KB/s
计算机相关设备组件
CPU
CPU,全称是中央处理器,是计算机的核心部件。它的主要功能是解释和执行来自计算机硬件和软件的指令。你可以把它想象成计
算机的“大脑”,负责所有的计算、逻辑判断和控制协调工作。
CPU的架构
CPU内部已经含有一些微指令,所有的软件都要经过CPU中的指令集来完成
这些指令集主要有 两种设计理念:
-
精简指令集(RISC)
-
优点:
- 性能潜力高:简单的指令和固定的格式非常适合于流水线、超标量和乱序执行等现代高性能技术。
- 硬件设计简单:节省的晶体管可以用于增加寄存器、缓存或更多执行单元。
- 功耗控制优秀:硬件简单直接,功耗更低,非常适合移动和嵌入式领域。
-
缺点:
- 代码密度低:早期需要更多内存。
- 对编译器要求高:需要智能的编译器来生成高效的指令序列。
-
常见CPU系列
| CPU系列 | 使用场景 |
|---|---|
甲骨文 SPARC 系列 |
学术领域大型工作站,银行金融体系的主服务器 |
IBM PowerPC 系列 |
... |
ARM arm 系列 |
各品牌手机,PDA,导航系统,网络设备 |
RAM架构CPU是世界上使用范围最广的CPU
-
复杂指令集(CISC)
-
优点:
- 代码密度高:在内存昂贵的时代是巨大优势。
- 对编译器要求较低:硬件替程序员和编译器完成了复杂工作。
- 向后兼容性好:x86架构通过不断增加新指令和微码方式,保持了极好的向后兼容性。
-
缺点:
- 硬件复杂:指令解码器非常复杂,占用了大量晶体管。
- 指令利用率低:研究表明,CISC指令集中只有约20%的简单指令最常用,那些复杂的指令反而很少被使用,造成了硬件资源的浪费。
- 不利于流水线和并行执行:指令长度不一、执行时间相差巨大,使得流水线难以设计和优化。
-
常见有Intel,AMD大量使用于个人电脑
个人电脑CPU又分为
X86架构和 X86-64架构
X86架构一般是32位,而X86-64为64位,位(bit)表示的是CPU寄存器的宽度
核心
- 核心就一个独立的物理处理单元。早期的CPU只有一个核心,现在的主流CPU有多个核心(如双核、四核、八核等)。
- 多个核心意味着CPU可以同时执行多个任务。就像从一个厨师变成了一个厨师团队,可以同时做多道菜,大大提高了效率。
- 超线程技术:一种
虚拟的核心技术。通过超线程技术,一个物理核心可以模拟出两个逻辑核心,让一个核心也能同时处理两个任务,进一步提升并行效率。例如,“4核8线程”表示有4个物理核心,但能像8个核心一样同时处理任务。
频率
核心关系:主频 = 外频 × 倍频
-
主频也称为时钟频率,比如3.6 GHz。这是我们
最终看到的CPU速度指标,表示CPU内核工作的节奏。在核心架构相同的情况下,主频越高,CPU每秒执行的指令就越多,处理单个任务的速度就越快。
-
外频又名基频,通常与系统基准频率相关。它是整个主板上各个部件(如内存、芯片组)之间同步运行的基准速度。你可以把它想象成整个计算机系统的“基础心跳”或“节拍器”。现代CPU的外频(基准频率)通常是100 MHz。
-
倍频
是一个
乘数。CPU通过这个乘数来放大外频,从而得到更高的内部工作频率(主频)
位宽
CPU的位数,通常我们听到的是 32位 或 64位,这是一个最根本的设计特性。它主要指的是CPU的寄存器的宽度以及它一次能处理的数据量。
- 32位CPU:它的寄存器是32位宽的,这意味着它一次可以处理一个32位长的数据(例如,一个32位的整数)。
- 64位CPU:它的寄存器是64位宽的,因此它一次可以处理一个64位长的数据。
缓存
- 职责:位于CPU内部,速度介于寄存器和内存之间的一块存储区域。用于存放CPU即将可能用到的数据和指令,以减少访问速度较慢的内存次数,从而大幅提升效率。通常分为L1、L2、L3三级,L1最快最小,L3最慢最大。
- 比喻:就像CEO办公室里的文件柜,存放着近期需要的重要文件,比去公司档案室(内存)取文件快得多。
剩余组件省略
初识Linux
安装Linux
选择合适的的Linux发行版
下载 ISO镜像
...
U盘安装
虚拟机安装
VMware 挺好用的一个虚拟机软件
磁盘分区
| 目录/设备 | 基础磁盘容量 | 文件系统 | 分区格式 |
|---|---|---|---|
| BIOS boot | 2MB | 系统自定义 | 标准分区 |
| /boot | 1GB | xfs | 标准分区 |
| / | 10GB | xfs | LVM方式 |
| /home | 5GB | xfs | LVM方式 |
| 交换分区 | 1GB | swap | LVM方式 |
切换终端
通过键入 Crtl+Alt+F1~F6 切换终端tty1~tty6
登录
登录没什么好说的,无非就是输入 账号名和 密码
注销Linux
exit
这里的注销并不是关机,而是推出登录,此时其它任务还在进行
初次接触命令
命令格式
command [-options] [参数1] [参数2]
- **command(命令)**指令或文件的名称
- option(选项)
-option(缩写,如-h),--option(全称,如--help) - 回车即执行,可使用
/转义 - 区分大小写
选项前除了可以是
-以外,在某些特殊情况下还可以是+
重要的几个热键
[Tab]键入一次补全代码或文件,键入两次输出所有可能指令或文件[Ctrl]+C中断当前命令[Ctrl]+D推出登录,类似于exit
基础指令
- 显示日期和时间:
date //显示当前时间
date +%Y/%m/%d //格式化输出格式
- 显示日历
cal [month] [year]
- 简易计算机
bc
- +加法
- -减法
- *乘法
- /除法
- %取余
- ^指数
scsle=2设置小数位数quit退出
帮助指令
--help
command --help
command -h
这是命令本身自带的一个选项。当你执行一个命令并加上 --help 时,该命令会直接打印出它自己预先定义好的、简短的帮助信息。
man
man command
man 是 manual(手册)的缩写。它是一个独立的系统命令,用于查看系统上安装的“手册页”。这些手册页是独立于二进制程序的文档文件,通常位于 /usr/share/man/ 目录下。
info
Info command
info 也是一个独立的命令,是 GNU 项目为了克服 man 页面结构过于简单、不适合复杂软件文档而创建的。它的核心思想是超文本。
doc(文档文件)
这不是一个命令,而是指软件包通常安装在 /usr/share/doc/ 目录下的详细文档集合。
使用建议
- 快速查询:忘记
tar命令怎么解压?先试试tar --help,快速扫一眼选项。 - 详细学习:
--help看不明白,或者想了解tar的详细原理和例子?用man tar系统学习。 - 深度掌握:如果你是一个系统管理员,需要写复杂的
tar备份脚本,想知道所有细节和边界情况,可以试试info tar(如果存在的话)。对于像bash这样的 shell,info bash是必读的宝藏。 - 终极参考:如果你在开发一个与
tar相关的工具,或者遇到极其棘手的问题,去/usr/share/doc/tar/目录下找找官方提供的最全面的文档。
关机/重启
立即执行
systemctl poweroff //关机
systemctl reboot //重启
systemctl suspend //休眠模式
执行这些指令前后系统会先执行
synp,将内存的数据写入磁盘,当然最好在执行前手动执行几次
例如
synp;synp;synp;systemctl poweroff
计划执行
shutdown [-hrkc] [时间] [警告信息]
shutdown -h 1 //一分钟后关机
shutdown -r 2 //两分钟后重启
shutdown -c //取消计划
shutdown -k "服务器即将关机!" //仅提示
shutdown -hk 11:30 "服务器即将关闭!" //提示并在11:30关机
实际上这些指令都调用了
systemctl
文件权限与目录配置
有很多时候,我们可能会用到root权限,这时请执行
su -来切换root用户,你也可以执行sudo command来直接用root权限执行指令
用户与用户组
$ ls -l important_document.txt
-rw-r--r-- 1 alice developers 1024 Sep 28 11:30 important_document.txt
# ^^^ ^^^ ^^^
# | | |
# | | +------ 其他人(Others)的权限
# | +---------- 用户组(Group)的权限
# +-------------- 文件拥有者(Owner)的权限
文件拥有者/用户
- 创建这个文件或目录的那个用户。也称为 用户(User)。
- 在
ls -l的输出中,alice就是这个文件的所有者。
用户组
- 文件所属的一个特定的用户组。这个组里的所有成员共享相同的权限。
- 目的: 为了协作而生。它允许系统管理员将权限批量授予一组相关的用户,而不是逐个用户设置。
其他人
- 除了文件所有者和文件所属组的成员之外,系统上的所有其他用户。
- 特点: 这是权限范围最广的一类,因为它包含了系统中除所有者和组员外的所有人。因此,给 "其他人" 授予权限时需要特别小心。
文件权限
文件常见属性/权限
我们通过 ls -l列出文件的属性
$ ls -l
total 16
-rw-r--r-- 1 alice developers 2048 Sep 28 10:30 document.txt
drwxr-xr-x 2 alice developers 4096 Sep 28 11:15 my_folder/
-rwxr-xr-- 1 bob users 10240 Sep 28 09:45 script.sh*
|---------|-|-----|----------|-----|------------|-----------|
文件类型权限 |拥有者 用户组 大小 修改时间 文件/目录名
链接数
-
文件类型与权限
-
第一个字母表示其类型是
文件,目录,还是链接文件-为文件d为文件夹l为链接文件b为可存储设备c为串行端口设备(键盘鼠标等)
-
其后每三个为一组,分别表示
拥有者权限,用户组权限和其他人权限,每组均为[rwx]对应读,写,可执行(文件)/可操作(目录)x权限对于文件来说,是表示是否有执行该文件的权限而对于目录来说则是能否将该目录设置为
工作目录,要在该目录下执行指令,就得有x权限,[rw-]这种情况下即使有读写权限,但是没有操作权限,也无法读取文件或删除移动文件
-
权限的数字表示模式
使用三位八进制数字,每位数字是权限值的总和。
r(读) = 4w(写) = 2x(执行) = 1-(无) = 0
计算每组权限时,将对应的值相加。
rwx= 4+2+1 = 7rw-= 4+2+0 = 6r-x= 4+0+1 = 5r--= 4+0+0 = 4---= 0+0+0 = 0
root基本上不受系统权限所限制,即使是文件权限是
----------root用户任可操作
修改文件属性与权限
修改文件用户组
chgrp [-R] 用户组 文件/目录名
选项说明
-R进行递归修改,修改该目录下的所有子目录,文件的用户组
修改文件拥有者
chown [-R] 用户名 文件/目录名
chown [-R] 用户名:用户组 文件/目录名 //同时修改拥有者和用户组
选项说明
- -R 进行递归修改,修改该目录下的所有子目录,文件的拥有者及其用户组
修改文件权限
- 数字修改法(常用)
chmod [-R] 754 sakura //修改sakura目录及其下的所有文件的权限为[rwxr-xr--]
- 符号修改法
chmod [-R] [ugoa][=+-][rwx] 文件/目录
| 身份类型 | 操作 | 权限 |
|---|---|---|
| u (user)用户/拥有者 | = 设置 | r |
| g (group)用户组 | + 添加 | w |
| o (others)其他人 | - 删除 | x |
| a (all)所有 |
文件类型
1. 普通文件
-
标识符:
-(连字符) -
描述: 最常见的文件类型,用于存储数据。包括:
- 文本文件(.txt, .sh, .py, .c)
- 图片、音频、视频文件(.jpg, .mp3, .mp4)
- 可执行二进制程序(/bin/ls, /usr/bin/git)
- 压缩包、文档等。
-
特点: 不包含任何特殊的文件系统结构。
-
示例:
bash
-rw-r--r-- 1 alice developers 1024 Sep 28 10:30 report.txt
2. 目录
-
标识符:
d -
描述: 一种特殊的文件,其内容是文件名和指向这些文件的索引(inode)。可以理解为文件夹。
-
特点: 对目录的
w(写)权限允许在其中创建、删除文件;x(执行)权限允许进入(cd)和访问其中的文件元数据。 -
示例:
bash
drwxr-xr-x 5 alice developers 4096 Sep 28 11:15 Projects/
3. 符号链接
-
标识符:
l -
描述: 指向另一个文件的快捷方式。类似于 Windows 的快捷方式。
-
特点:
- 文件很小,只包含它指向的文件的路径信息。
- 如果删除符号链接,不会影响原始文件。但如果删除原始文件,符号链接就会成为"悬空链接"(dangling link),指向一个不存在的文件。
- 权限显示为
lrwxrwxrwx,但实际权限由它指向的原始文件决定。
-
示例:
bash
lrwxrwxrwx 1 root root 20 Sep 28 09:00 /usr/bin/python -> /usr/bin/python3.9
4. 字符设备文件
-
标识符:
c -
描述: 表示一种按字符流进行数据传输的设备。这种设备没有缓存,数据逐个字符处理。
-
常见设备: 键盘、终端(/dev/tty1)、串口、虚拟控制台等。
-
特点: 在
ls -l输出中,文件大小字段显示的是设备的主设备号和次设备号。 -
示例:
crw--w---- 1 root tty 4, 1 Sep 28 08:00 /dev/tty1 # 主设备号 4, 次设备号 1
5. 块设备文件
-
标识符:
b -
描述: 表示一种按数据块进行数据传输的设备。这种设备有缓存,数据传输以块为单位,效率更高。
-
常见设备: 硬盘(/dev/sda)、U盘(/dev/sdb)、光盘驱动器、磁盘分区等。
-
特点: 和字符设备一样,文件大小字段显示的是设备的主设备号和次设备号。
-
示例:
brw-rw---- 1 root disk 8, 0 Sep 28 08:00 /dev/sda # 主设备号 8, 次设备号 0 (代表第一块硬盘)
6. 命名管道
-
标识符:
p -
描述: 一种特殊的文件,用于进程间通信(IPC)。一个进程向管道写入数据,另一个进程从管道读取数据。
-
特点: 数据是 FIFO(先进先出)的。也称为 FIFO 文件。
-
创建命令:
mkfifo -
示例:
# 创建管道 mkfifo my_pipe ls -l my_pipe prw-r--r-- 1 user user 0 Sep 28 12:00 my_pipe # 终端1:写入数据(会阻塞,直到有进程读取) echo "Hello from Terminal 1" > my_pipe # 终端2:读取数据 cat < my_pipe
7. 套接字
-
标识符:
s -
描述: 另一种用于进程间通信的文件,通常用于网络通信,但也可以用于同一台机器上的进程间通信。
-
特点: 比管道更强大,支持双向通信和多个客户端连接。
-
常见位置: 很多数据库和网络服务会创建套接字文件。
-
示例:
srwxrwxrwx 1 mysql mysql 0 Sep 28 08:00 /var/run/mysqld/mysqld.sock
文件拓展名
基本上在Linux中是没有文件拓展名的,一个文件是否能被执行,取决于其 本身和 权限x
但是我们还是会以适当的拓展名来表示文件的种类
归档与压缩文件
| 扩展名 | 文件类型 | 描述 | 常用命令 |
|---|---|---|---|
| .tar | 归档文件 | 将多个文件打包成一个文件(不压缩)。 | tar -cf创建,tar -xf解包 |
| .gz | Gzip 压缩文件 | 单个文件的压缩,压缩率高。 | gzip, gunzip |
| .tar.gz 或 .tgz | Tar + Gzip | 先打包后使用 Gzip 压缩,非常常见。 | tar -xzf 解压,tar -czf 压缩 |
系统与配置文件
| 扩展名 | 文件类型 | 描述 | 示例 |
|---|---|---|---|
| .conf | 配置文件 | 程序的配置文件。 | /etc/ssh/sshd.conf |
| .cfg | 配置文件 | 同 .conf,也是配置文件。 |
|
| .yml / .yaml | YAML 配置文件 | 现代软件(如 Docker Compose, Ansible)常用的易读配置格式。 | docker-compose.yml |
| .json | JSON 配置文件 | 另一种非常流行的结构化数据配置格式。 | package.json (Node.js) |
| .service | Systemd 服务文件 | 定义系统服务的启动、停止等行为。 | /etc/systemd/system/nginx.service |
| .lock | 锁文件 | 表示某个资源正在被使用,防止冲突。 | /var/lib/dpkg/lock |
| .pid | 进程ID文件 | 存储某个守护进程的进程ID(PID)。 |
程序与脚本文件
| 扩展名 | 文件类型 | 描述 | 说明 |
|---|---|---|---|
| (无扩展名) | 二进制可执行文件 | 编译后的程序,可以直接运行。 | /bin/ls, /usr/bin/bash |
| .sh | Bash Shell 脚本 | 包含一系列 Shell 命令的文本文件。 | install.sh, backup.sh |
Linux目录配置-FHS
Linux 的目录结构遵循 文件系统层次结构标准,这是一个定义了目录用途和存放文件类型的规范。这使得不同发行版的 Linux 都具有相似的结构,方便用户和管理员使用。
与 Windows 的“分驱”(C:、D:)概念不同,Linux 只有一个根目录 /,所有其他目录、文件、设备都在这个根目录下以树状结构展开。
核心目录概览表
| 目录 | 英文全称/含义 | 主要用途 | 简单类比 Windows |
|---|---|---|---|
/ |
根目录 | 整个文件系统的起点,所有目录的父目录。 | C: 盘的根目录 |
/bin |
Binary | 存放所有用户(包括管理员和普通用户)都需要使用的基本命令,如 ls, cp, cat 等。 |
C:\Windows\System32 (部分功能) |
/boot |
Boot | 存放系统启动所需的文件,如内核文件、引导加载程序。不要随意删除! | 引导分区文件 |
/dev |
Device | 存放设备文件。在 Linux 中,一切皆文件,硬件设备也以文件形式存在,如 /dev/sda 代表硬盘。 |
设备管理器 |
/etc |
Etcetera | 存放系统的配置文件。几乎所有系统和程序的配置都在这里。非常重要! | C:\ProgramData 和注册表的结合 |
/home |
Home | 普通用户的个人目录。每个用户在此有一个以自己用户名命名的子目录,用于存放个人文件。 | C:\Users 或 C:\Documents and Settings |
/lib, /lib64 |
Library | 存放系统启动和 /bin, /sbin 中命令所需的共享库文件(类似于 Windows 的 .dll 文件)。 |
C:\Windows\System32 (部分功能) |
/media |
Media | 系统自动挂载可移动设备的目录,如 U 盘、光盘。 | 自动识别的 U 盘盘符 |
/mnt |
Mount | 临时手动挂载文件系统的目录,比如挂载另一个硬盘或网络共享。 | 手动分配的盘符 |
/opt |
Optional | 存放可选的第三方应用程序。通常是一些大型商业软件或自己编译的软件。 | C:\Program Files (部分软件) |
/proc |
Process | 一个虚拟文件系统,存在于内存中,存放当前系统内核和进程的实时信息。 | 任务管理器中的详细信息 |
/root |
Root | 系统管理员(root 用户)的个人目录。注意,这不是根目录 /。 |
C:\Users\Administrator |
/run |
Run | 存放自系统启动以来描述系统信息的临时文件,如进程 PID 文件。 | 临时运行时数据 |
/sbin |
System Binary | 存放系统管理员使用的系统管理命令,如 fdisk, ifconfig 等。 |
C:\Windows\System32 (管理员命令) |
/srv |
Service | 存放一些服务启动后需要提供的数据,如网站数据、FTP 数据等。 | C:\inetpub\wwwroot |
/sys |
System | 一个虚拟文件系统,用于与内核交互,统一管理硬件设备。 | 设备管理器的底层接口 |
/tmp |
Temporary | 存放临时文件,所有用户都可读写。系统重启后,此目录下的文件可能会被清除。 | C:\Users\[User]\AppData\Local\Temp |
/usr |
Unix System Resources | 存放用户安装的应用程序和文件,是占用空间最大的目录之一。 | C:\Program Files 和 C:\Windows 的结合体 |
/var |
Variable | 存放经常变化的数据,如日志文件、缓存、邮件等。 |
现在许多操作系统已将
/bin``/sbin``/lib转移到了/usr/...下并在原位置创建了个链接文件
Linux文件和目录管理
命令搜索路径
命令搜索路径是一个由冒号分隔的目录列表,当你输入一个命令时,系统会按照顺序在这些目录中查找可执行文件。
echo $PATH # 注意大小写
临时添加 PATH路径:
PATH="${PATH}:/sakura"
路径
路径的作用是唯一标识文件或目录在文件系统树状结构中的位置。
绝对路径
绝对路径是从根目录 / 开始,逐级指向目标文件或目录的完整路径。
- 特点:
- 总是以正斜杠
/开头。 - 提供了文件或目录在文件系统中的完整地址。
- 无论你的当前工作目录在哪里,绝对路径指向的位置都是唯一且不变的。
- 总是以正斜杠
- 使用场景:
- 在脚本或程序中,为了可靠性,通常使用绝对路径。
- 当你无法确定当前工作目录时,使用绝对路径最保险。
- 引用系统文件时(如
/etc下的配置文件)。
相对路径
相对路径是从当前工作目录开始,指向目标文件或目录的路径。
- 特点:
- 不以
/开头。 - 它的参照物是当前目录。
- 路径的解析依赖于你当前所在的位置。
- 不以
- 特殊符号:
.:一个点,代表当前目录。..:两个点,代表当前目录的上一级目录(父目录)。
文件与目录管理
查看当前目录 pwd
pwd
# 输出示例: /home/username
查看目录内容 ls
- 常用选项
ls [-al...] [目录]
-a: 全部文件,包括隐藏文件
-A: 全部文件但排除"."和".."这两个目录
-d: 仅列出目录
-f: 不进行排序,直接输出
-F: 添加文件类型标识
/:目录
*:可执行文件
@:符号链接
|:管道文件
=:套接字文件
-h: 使用合适的容量表示单位(M,G)
-i: 显示inode号码
-l: 以列表形式,显示更多信息
-r: 反向排序
-R: 遍历输出子文件
-S: 以容量大小排序
-t: 以时间排序
切换工作目录 cd
cd [目录]
cd .. #返回上级目录
cd - #返回前一个工作目录(并非上级)
cd #切换到Home目录
cd ~ #切换到Home目录
常见文件夹 mkdir
mkdir [-mp] 文件夹名称
# -m: 设置权限
# -p: 递归创建父文件夹
mkdir -m 775 sakura #创建sakura文件夹并且设置权限
mkdir -p parent/child/grandchild # 递归创建目录,如果父目录不存在则一并创建
mkdir dir1 dir2 dir3 # 一次性创建多个并列目录
mkdir -p project/{src,doc,bin} # 一次性创建 project 和其下的 src, doc, bin 子目录
# 创建带空格目录名(不推荐,但需要知道如何操作)
mkdir "my folder" # 使用引号
mkdir my\ folder # 使用反斜杠转义空格
删除文件夹 rmdir
rmdir [-p] 文件夹
# -p 递归删除空的父文件夹
复制文件 cp
cp [-irlsad...] 源文件名 目标文件名
#选项
-i interactive 交互式,覆盖前确认
-r/-R recursive 递归复制目录
-v verbose 显示复制过程
-u update 更新,只复制更新的文件
-p preserve 保留文件属性
-a archive 归档,相当于 -dpR,用于完整备份
-l link 创建硬链接
-s symbolic-link 创建软链接
-n no-clobber 不覆盖已存在文件
-d 若源文件为链接文件,则复制该链接文件的属性,而非源文件本身
删除文件 rm
rm [选项] 文件...
#选项
-r, -R:递归删除目录
-f:强制删除,不提示
-i:删除前提示确认
-v:显示详细操作信息
-d:删除空目录
❌ 危险操作警告
# 绝对不要执行这些命令!
rm -rf / # 删除整个系统!
rm -rf * # 删除当前目录所有文件!
rm -rf . # 删除当前目录及所有子目录!
移动文件 mv
mv [选项] 源文件 目标文件
mv [选项] 源文件... 目标目录
#选项
-i:覆盖前提示确认
-v:显示详细操作信息
-b:为覆盖的文件创建备份
-f:强制覆盖,不提示
-n:不覆盖已存在文件
-u:只移动比目标文件新的源文件
查看文件内容
- cat
直接输出文件内容
-n打印行号
- more
可翻页查看,但是没有 less好用
/向下查找:f显示当前文件名和行号q退出空格下一页b上一页
- less
可翻页查看,功能更强大,man就是调用的该指令
空格下一页pg down下一页pg up上一页/向下查找?向上查找n下一个查找项N上一个查找项g跳转到第一行G跳转到最后一行q退出
- od
od [-t 类型] 文件
打开 非文本文件,例如 二进制可执行文件等
-t转变的a默认的字符输出cASCLLd十进制f浮点数o八进制x十六进制
建议自行搜索
touch
用于修改文件时间,以及创建空文件
文件时间:
- 修改时间:
mtime - **访问时间: **
atime最后一次文件访问的时间 - 状态时间:
ctime文件元数据修改时间,具有ctime不可复制性
touch [-amcdt] 文件
#选项
-a 修改文件atime(若没有d则设置为当前时间)
-m 修改文件mtime(同)
-c 仅修改时间,若文件不存在,不创建文
-d 自定义时间(格式多样)
umask
umask用来指定用户创建文件时的权限默认值
umask相当于一个遮罩,过滤掉不需要的权限
-
文件的默认权限
-rw-rw-rw- -
文件夹的默认权限
drwxrwxrwx
查看umask
umask
>0022
#第一位为特殊权限
设置umask
umask 022
#最终创建文件的默认权限为:-rw-r--r--
#最终创建文件夹的默认权限为:drwxr-xr-x
文件特殊权限
ll sakura
> -rwsrwsrwt .....
#在权限中,st分别表示 SUID,SGID,SBIT权限
#umask 0022中的第一个0表示特殊权限
- SUID(4):执行者获得该程序拥有者的权限
- 仅对可执行文件有效
- 执行则需x权限
- 本权限仅在执行期间有效
- SGID(2)
- 文件:
- 仅对二进制可执行文件有效
- 执行者需x权限
- 执行期间获得该程序用户组权限
- 目录:
- 用户需r,x权限
- 用户在此目录下的有效用户组会变成该目录的用户组
- 若拥有w权限,则用户在该目录下创建的内容的用户组,与该目录用户组相同
- 文件:
- SBTD(1):在该目录下重建的文件只有拥有者和root可以删除
- 仅对目录有效
- 用户需w,x权限
对于大写的SST,表示文件没有放开x权限,即sst无效
观察文件类型file
file 文件
文件查找
- which:用来查找指令的文件位置,查找路径几所当然为**$PASH**
- whereis用来查找指令的相关文件
-l列出查找路径-b仅查找二进制文件-m仅查找帮助文档
-
**locate:**通过数据库查找文件
- 数据库可使用
updatedb手动更新 -i忽略文件大小写差异-c只输出搜索到的文件数量-l限制查找个数(行数)-s输出使用的数据库信息
- 数据库可使用
-
**find:**多限定条件搜索文件(慢)
自行搜索用多了就会了