linux初级_基础知识

TJCcc 发布于 2025-11-03 32 次阅读


一、常用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

补充

  1. 假脱机文件(spool):作为输入输出设备之间数据交换的缓冲文件,用于实现不同输入输出速度的设备之间的协调。
  2. 记录文件 ( log ):作为系统的日志文件,记录系统运行状态,事件和错误的文件。
  3. 加锁文件(lock):作为一种用于进程间同步和资源管理的文件,防止不同进程同时对数据进行读写,实现互斥访问。
  4. 临时文件(temp):程序运行时创建的短期存储文件。
  5. 页格式化文件:为分页显示或打印而预格式化的文件,常见的格式有:.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