Linux的哲学思想
- 一切皆文件
把几乎所有资源统统抽象为文件形式,包括硬件设备,甚至通信接口等,便于统一管理和定义;对文件的操作有:open,read,write,close,delete,create - 由众多功能单一的小程序组成
一个程序只做一件事,并且做好,保证了Linux内核的高效运行 - 组合小程序完成复杂任务
通过连接多个简单的程序实现复杂的功能 - 尽量避免和用户交互
更贴近编程,易于以编程的方式实现自动化任务 - 使用文本文件保存配置信息
修改配置信息只需要任意一款文本编辑器就可以进行
文件系统与目录结构
- 文件和目录被组织成一个单根倒置树结构
- 文件系统从根目录下开始,用“/”表示
- 根文件系统(rootfs):root filesystem
- 文件名称区分大小写
- 以.开头的文件为隐藏文件
- 路径分隔的 /
- 文件有两类数据:
- 元数据:metadata(用于存放索引信息)
- 数据:date
文件系统结构
- /boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)、initramfs都存放于此目录
- /bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
- /sbin:基本的管理类命令;不能关联至独立分区,OS启动即会用到的程序
- /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
- /lib64:专用于x86_64系统上的辅助共享库文件存放位置
- /etc:配置文件目录
- /home/USERNAME:普通用户家目录
- /root:管理员的家目录
- /media:便携式移动设备挂载点
- /mnt:临时文件系统挂载点
- /dev:设备文件及特殊文件存储位置
- b: block device,随机访问
- c: character device,线性访问
- /opt:第三方应用程序的安装位置
- /srv:系统上运行的服务用到的数据
- /tmp:临时文件存储位置
- /usr: universal shared, read-only data(全局共享只读数据)
- bin: 保证系统拥有完整功能而提供的应用程序
- sbin:
- lib:32位使用
- lib64:只存在64位系统
- include: C程序的头文件(header files)
- share:结构化独立的数据,例如doc, man等
- local:第三方应用程序的安装位置
- bin, sbin, lib, lib64, etc, share
- /var: variable data files
- cache: 应用程序缓存数据目录
- lib: 应用程序状态信息数据
- local:专用于为/usr/local下的应用程序存储可变数据;
- lock: 锁文件
- log: 日志目录及文件
- opt: 专用于为/opt下的应用程序存储可变数据;
- run: 运行中的进程相关数据,通常用于存储进程pid文件
- spool: 应用程序数据池
- tmp: 保存系统两次重启之间产生的临时数据
- /proc: 用于输出内核与进程信息相关的虚拟文件系统
- /sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
- /selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置
- getenforce:查询是否关闭命令
- setenforce 0:关闭selinux(只是暂时的修改)
- 永久修改方法:nano /etc/selinux/config
命令行扩展
括号扩展:{ }
- 打印重复字符串的简化形式
echo file{1,3,5}
file1 file3 file5
rm -f file{1,3,5}
echo {1..10}
echo {a..z}
echo {000..20..2}
Linux的文件权限
- 上图第一个字符是d,他代表了文件的类型,d的意思就是目录文件。
- 接下来的九个字符以三个为一组分别是
- rwx:属主的权限。
- r-x:属组的权限。
- r-x:其他人的权限。
- r(read):可读取
- w(write):可写入
- x(execute):可执行
Linux下的文件类型
- -:普通文件
d: 目录文件
b: 块设备
c: 字符设备
l: 符号链接文件
p: 管道文件pipe,FIFO(First In,First Out)
s: 套接字文件socket
硬链接
- 创建硬链接会增加额外的记录项以引用文件
对应于同一文件系统上一个物理文件
每个目录引用相同的inode号 - ls -i :显示文件的innode编号
创建时链接数递增 - 删除文件时:
rm命令递减计数的链接
文件要存在,至少有一个链接数
当链接数为零时,该文件被删除
不能跨越驱动器或分区 - 语法:
ln filename [linkname ]
软链接
- 一个符号链接指向另一个文件
- ls - l的 显示链接的名称和引用的文件
- 一个符号链接的内容是它引用文件的名称
可以对目录进行
可以跨分区
指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数; - 语法:
ln -s filename [linkname]
管道
- 管道(使用符号“|”表示)用来连接命令
- 命令1 | 命令2 | 命令3 | …
将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
最后一个命令会在当前shell进程的子shell进程中执行用来
组合多种工具的功能 - ls | tr ‘a-z’ ‘A-Z’
- less :一页一页地查看输入
- ls -l /etc | less
- mail: 通过电子邮件发送输入
- echo “test email” | mail -s “test” user@example.com
- lpr:把输入发送给打印机
- echo “test print” | lpr -P printer_name
标准输入和输出
- 程序:指令+数据
读入数据:Input
输出数据:Output - 打开的文件都有一个fd: file descriptor (文件描述符)
- Linux给程序提供三种I/O设备
- 标准输入(STDIN)-0 默认接受来自键盘的输入
- 标准输出(STDOUT)-1 默认输出到终端窗口
- 标准错误(STDERR)-2 默认输出到终端窗口
- I/O重定向:改变默认位置