一、常用shortcuts
- ctrl + a :将光标切换到行首
- ctrl + e :将光标切换到行尾
- ctrl + l / clear:清空屏幕内容
- ctrl + u :剪切光标前的内容
- ctrl + k :剪切光标后的内容
- ctrl + y :粘贴剪切的内容
二、常用命令
- history :显示你所有执行过的命令,可以配合“!”来执行某某命令
- !! :执行最后一条指令
- !$ :显示最后一条指令的参数。
!$的妙用
先cat /etc/sysconfig/netwrok-scripts/ifconfig-eth0,然后我突然想用nano/vim。
则直接# nano !$ 或 # vim !$即可。
三、目录结构
目录结构及主要内容“/”根目录部分有以下子目录:
- /usr 目录包含所有的命令、程序库、文档和其它文件。这些文件在正常操作中不会被改变的。这个
目录也包含你的 Linux 发行版本的主要的应用程序,譬如,Netscape。 - /var 目录包含在正常操作中被改变的文件:假脱机文件、记录文件、加锁文件、临时文件和页格式
化文件等。这个目录中存放着那些不断在扩充着的东西,为了保持/usr 的相对稳定,那些经常被修改的目录可以放在这个目录下,实际上许多系统管理员都是这样干的。顺带说一下系统的日志文件就在
/var/log 目录中。 - /home 目录包含用户的文件:参数设置文件、个性化文件、文档、数据、EMAIL、缓存数据等。这个目录在系统省级时应该保留。
- /proc 目录整个包含虚幻的文件。它们实际上并不存在磁盘上,也不占用任何空间。(用 ls –l 可以显示它们的大小)当查看这些文件时,实际上是在访问存在内存中的信息,这些信息用于访问系统。
- /bin 系统启动时需要的执行文件(二进制),这些文件可以被普通用户使用。
- /sbin 系统执行文件(二进制),这些文件不打算被普通用户使用。(普通用户仍然可以使用它们,但要指定目录。)
- /etc 操作系统的配置文件目录。
- /root 系统管理员(也叫超级用户或根用户)的 Home 目录。
- /dev 设备文件目录。LINUX 下设备被当成文件,这样一来硬件被抽象化,便于读写、网络共享以及需要临时装载到文件系统中。正常情况下,设备会有一个独立的子目 录。这些设备的内容会出现在独立的子目录下。LINUX 没有所谓的驱动符。
- /lib 根文件系统目录下程序和核心模块的共享库。
- /boot 用于自举加载程序(LILO 或 GRUB)的文件。当计算机启动时(如果有多个操作系统,有可能允许你选择启动哪一个操作系统),这些文件首先被装载。这个目录也会包含LINUX核(压缩文件vmlinuz),但 LINUX 核也可以存在别处,只要配置 LILO 并且 LILO 知道 LINUX 核在哪儿。
- /opt 可选的应用程序,譬如,REDHAT 5.2 下的 KDE (REDHAT 6.0 下,KDE 放在其它的 XWINDOWS 应用程序中,主执行程序在/usr/bin 目录下)
- /tmp 临时文件。该目录会被自动清理干净。
- /lost+found 在文件系统修复时恢复的文件
- /usr 目录下比较重要的部分有:
- /usr/X11R6 X-WINDOWS 系统(version 11, release 6)
- /usr/X11 同/usr/X11R6 (/usr/X11R6 的符号连接)
- /usr/X11R6/bin 大量的小 X-WINDOWS 应用程序(也可能是一些在其它子目录下大执行文件的符号连接)。
- /usr/doc LINUX 的文档资料(在更新的系统中,这个目录移到/usr/share/doc)。
- /usr/share 独立与你计算机结构的数据,譬如,字典中的词。
- /usr/bin 和/usr/sbin 类似与“/”根目录下对应的目录(/bin 和/sbin),但不用于基本的启动(譬如,在紧急维护中)。大多数命令在这个目录下。
- /usr/local 本地管理员安装的应用程序(也可能每个应用程序有单独的子目录)。在“main”安装后,这个目录可能是空的。这个目录下的内容在重安装或升级操作系统后应该存在。
- /usr/local/bin 可能是用户安装的小的应用程序,和一些在/usr/local 目录下大应用程序的符号连接。
- /proc 目录的内容:
- /proc/cpuinfo 关于处理器的信息,如类型、厂家、型号和性能等。
- /proc/devices 当前运行内核所配置的所有设备清单。
- /proc/dma 当前正在使用的 DMA 通道。/proc/filesystems 当前运行内核所配置的文件系统。
- /proc/interrupts 正在使用的中断,和曾经有多少个中断。
- /proc/ioports 当前正在使用的 I/O 端口。
举例,使用下面的命令能读出系统的 CPU 信息
cat /proc/cpuinfo


补充
- 假脱机文件(spool):作为输入输出设备之间数据交换的缓冲文件,用于实现不同输入输出速度的设备之间的协调。
- 记录文件 ( log ):作为系统的日志文件,记录系统运行状态,事件和错误的文件。
- 加锁文件(lock):作为一种用于进程间同步和资源管理的文件,防止不同进程同时对数据进行读写,实现互斥访问。
- 临时文件(temp):程序运行时创建的短期存储文件。
- 页格式化文件:为分页显示或打印而预格式化的文件,常见的格式有:.ps(页面描述语言postscript),.pdf(便携式文档格式),PCL(打印机命令语言)。
四、Linux 特殊设备文件完全笔记
一、核心概念
这些是设备文件,位于 /dev/ 目录下。它们不与物理存储关联,而是作为与内核设备驱动交互的接口。
| 文件 | 用途 | 数据特性 |
|---|---|---|
/dev/null | 数据黑洞,丢弃所有输入 | 无输出 |
/dev/zero | 产生无限的零字节流 | 全部是 0x00 |
/dev/urandom | 产生伪随机数流 | 密码学安全的随机数据 |
二、/dev/null - 数据黑洞
基本特性
- 写入操作:所有写入的数据被立即丢弃
- 读取操作:立即返回 EOF(文件结束)
- 相当于一个只进不出的黑洞
实用场景
1. 丢弃标准输出
# 安静运行命令,不显示任何输出
ls -la > /dev/null
# 丢弃标准输出,但保留错误输出
make > /dev/null
2. 丢弃标准错误
# 丢弃错误信息,只显示正常输出
command 2> /dev/null
3. 丢弃所有输出
# 完全静默执行,不产生任何输出
command > /dev/null 2>&1
# 或者更简洁的写法
command &> /dev/null
4. 清空文件内容
# 快速清空文件(比 rm + touch 更高效)
cat /dev/null > filename.txt
> filename.txt # 简写形式
5. 测试脚本时不产生输出
#!/bin/bash
# 在调试时暂时屏蔽输出
echo "Debug info" > /dev/null
result=$(calculate_something) > /dev/null 2>&1
三、/dev/zero - 零字节源
基本特性
- 读取操作:产生无限的 零字节流 (
0x00) - 写入操作:丢弃所有写入的数据(类似
/dev/null)
实用场景
1. 创建指定大小的空文件
# 创建 1MB 的空文件
dd if=/dev/zero of=empty_file bs=1M count=1
# 创建 100MB 的文件
dd if=/dev/zero of=large_file.bin bs=1M count=100
2. 用零填充磁盘空间(安全擦除)
# 用零填充磁盘剩余空间(增强安全性)
dd if=/dev/zero of=/tmp/zero.fill
rm /tmp/zero.fill
3. 测试内存分配
# 测试内存分配(谨慎使用!可能使系统卡死)
dd if=/dev/zero of=/dev/shm/memory_test bs=1M count=512
4. 创建交换文件
# 创建 1GB 的交换文件
dd if=/dev/zero of=/swapfile bs=1M count=1024
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
5. 生成特定格式的测试数据
# 创建全零的 1KB 测试数据
head -c 1024 /dev/zero > zero_data.bin
四、/dev/urandom 和 /dev/random - 随机数源
两者区别
| 特性 | /dev/random | /dev/urandom |
|---|---|---|
| 阻塞行为 | 熵耗尽时阻塞 | 永不阻塞 |
| 随机质量 | 理论上更"随机" | 密码学安全 |
| 使用场景 | 极敏感的密钥生成 | 绝大多数应用 |
| 性能 | 可能较慢 | 快速 |
现代建议:在大多数情况下使用 /dev/urandom
实用场景
1. 生成随机密码
# 生成 16 字节的随机密码(32个十六进制字符)
head -c 16 /dev/urandom | base64
# 生成 20 字符的字母数字密码
head -c 20 /dev/urandom | base64 | tr -dc 'a-zA-Z0-9' | head -c 20
2. 创建随机数据文件
# 创建 10MB 的随机文件
dd if=/dev/urandom of=random_data.bin bs=1M count=10
# 创建 1KB 的随机数据
head -c 1024 /dev/urandom > random_1k.bin
3. 安全擦除文件
# 用随机数据覆盖文件后删除(安全擦除)
dd if=/dev/urandom of=file_to_wipe bs=1M
rm file_to_wipe
4. 生成随机数
# 生成 0-99 的随机数
echo $(( $(od -An -N2 -i /dev/urandom) % 100 ))
# 生成 1-6 的随机数(模拟骰子)
echo $(( $(head -c 3 /dev/urandom | od -An -i) % 6 + 1 ))
5. 加密相关用途
# 生成加密密钥
head -c 32 /dev/urandom > secret_key.bin
# 生成 SSL 私钥(需要 OpenSSL)
openssl genpkey -algorithm RSA -out private.key
五、高级用法和技巧
1. 性能测试
# 测试磁盘写入速度
dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=direct
# 测试磁盘读取速度
dd if=/tmp/testfile of=/dev/null bs=1G
2. 创建虚拟文件系统
# 创建基于内存的文件系统(使用零填充)
mount -t tmpfs -o size=100m tmpfs /mnt/ramdisk
3. 网络测试
# 发送零数据到网络端口(带宽测试)
cat /dev/zero | nc hostname port
4. 填充文件到指定大小
# 如果文件小于 1MB,用零填充到 1MB
filesize=$(stat -c%s file.bin)
if [ $filesize -lt 1048576 ]; then
dd if=/dev/zero of=file.bin bs=1 count=0 seek=1048576
fi
5. 安全的临时文件创建
# 创建安全的临时文件(随机名称)
temp_file=$(mktemp)
cat /dev/urandom | head -c 1000 > "$temp_file"
# 使用完成后
rm "$temp_file"
六、安全注意事项
使用 /dev/urandom 的安全建议
# ✅ 推荐:生成加密密钥
head -c 32 /dev/urandom > encryption_key
# ✅ 推荐:生成随机密码
openssl rand -base64 32
# ❌ 避免:使用 $RANDOM 变量用于安全目的
echo $RANDOM # 仅适用于非安全场景
资源使用警告
# ❌ 危险:可能耗尽磁盘空间
dd if=/dev/zero of=/root/fill_disk
# ❌ 危险:可能耗尽内存
dd if=/dev/zero of=/dev/shm/fill_ram
七、常用命令速查表
| 用途 | 命令 |
|---|---|
| 丢弃命令输出 | command > /dev/null 2>&1 |
| 清空文件内容 | > filename |
| 创建空文件 | dd if=/dev/zero of=file bs=1M count=10 |
| 生成随机密码 | head -c 16 /dev/urandom | base64 |
| 安全擦除文件 | dd if=/dev/urandom of=file bs=1M && rm file |
| 测试写入速度 | dd if=/dev/zero of=testfile bs=1G count=1 |
| 生成随机数据 | head -c 1K /dev/urandom > random.bin |
八、总结对比
| 场景 | 推荐设备文件 |
|---|---|
| 丢弃不需要的输出 | /dev/null |
| 创建空白/测试文件 | /dev/zero |
| 生成随机密码/密钥 | /dev/urandom |
| 安全擦除敏感数据 | /dev/urandom |
| 性能基准测试 | /dev/zero |
Comments NOTHING