文件管理

ordinary file–普通文件

普通文件包含两种类型

text file & binary file

Test files

  • 一般用于存储文本数据,shell脚本,源程序等等

Binary file

  • 包含非文本数据,和一些只能被程序读懂的文件

如照片 音乐 视频等等

directory–目录文件

目录用于装载其它文件或目录,来整理文件系统以形成一个体系

而Unix系统是一个大型层次树结构(文件包含文件)

pseudo file–伪文件

非普通文件或目录,本身不用来存储数据,也不占用空间

功能:

  • 用来执行一些由kernel提供的服务

access a service provided by the kernel

special file / device file–特殊文件

代表:

  • 物理设备 如键盘,显示器,监视器

Linux将这类文件放在**/dev**(device)目录中,这些文件一般被系统程序应用

其中一些平时会见到的文件如下表:

硬件

[start-plane type=“1”]

/dev/sda1 SCSI hard disk SCSI硬盘

/dev/fd0 floppy disk 软盘分区 数字0代表第一个分区

/dev/hda hard disk 硬盘

[/start-plane]

终端

[start-plane type=“1”]

/dev/tty 当前终端

/dev/tyy1 虚拟终端 本地登陆

tty 再代指终端,原意思是Teletype machines 电传打字机

另外 输入命令tty可以查看当前使用的终端位置

1
2
3
4
5
tty
/dev/pts/4 #说明我正在远程连接,并使用了虚拟终端4
#如果输入
cp /etc/passwd /dev/pts/4
#结果是将passwd内容显示在终端

/dev/pts/0 伪终端 远程登陆或用使用GUI

/dev/ttyp0 伪终端

[/start-plane]

伪设备

[start-plane type=“1”]

/dev/null 黑洞

/dev zero 小黑洞

运行 cat /dev/zero时消耗流量速度很大,但没有任何输出!

/dev/random 随机数

[/start-plane]

named pipe–可命名管道符

pipe facility的高级版本,将一个程序的输出与 下一程序输入相连接

一般使用pipe时,如

1
cat /etc/passwd | grep root

这里的pipe是自动创建的,而且只在程序运行时存在

现在,可以使用**mkfifo** 命令来创建一个可一直存在的pipe

1
mkfifo fifotest

现在创建了一个fifotest的pipe

第一个终端下,使用以下命令

1
2
3
4
5
6
7
8
9
grep root /etc/passwd >fifotest 
#将root的内容,传给fifotest 这个pipe

#在第二个终端下,命令以下读取命令
wc -c < fifotest
#此Pipe的目的是,让不同终端间,可以相互传输信息

#如要删除pipe
rm fifotest

proc file—进程文件

允许我们接入kernel

最初,这些文件被用来提供有关正在运行的程序(processes)的信息

全部的进程文件被保存在/proc 目录中,目录里面有许多子目录,目录名是进程的id

1
2
3
4
5
如 :正在运行的进程是#1099 则对应的进程信息在/proc/1099中找到

cat /proc/cpuinfo 查看当前cpu信息

cat /proc/version 显示当前Linux版本

FileSystem–文件系统

  • 终级目录 root(目录中包含另一个root是管理员的home目录) 是唯一的主目录,其它所有文件或目录都是root的子文件

Linux系统至少包含10万个文件,一个有序的树结构将这些文件显示清

ls -R / | wc -l 可以给出root(main)包含的文件数40000+多个

因为root directory 根目录太重要了,如果一直用root代表根目录就有些麻烦,所以

/ (slash) 代表root目录

1
2
3
ls /   #查看根目录下文件

ls /bin #查看根目录下的bin 目录

Mount 挂载

  • Linux文件系统中,这些目录并不存储在同一物理设备中,往往存放在不同设备中,包括多磁盘分区中
  • 每个磁盘中有独立的文件系统,包含目录和子目录

当我们连接这些子文件系统时,可用Mount 断开连接用umount

当一个unix系统启动时,一系列的文件系统将自动连接到一起。但有时,也要手动连接一些文件系统**(只有root有此权限)**

如:

1
2
#将软盘/dev/fd0 附加到主区 /media/floppy
mount /dev/fd0 /media/floppy

可以让用户通用media floppy来使用dev fd0文件

简介根目录

bin目录

  • bin下面存放的都是二进制文件,是各种最最重要的系统程序,和一些基本的工具

一般运行程序在bin中,管理员程序在sbin中,第三方程序在opt中

dev目录

  • 设备文件,每个特殊文件代表一个物理设备,一些代表伪设备

etc目录设置文件

  • 系统启动时就会执行的设置文件,包含一些影响系统的命令
  • 其中就有rc文件(初始化文件)

home用户目录

  • 所有的用户,会有个单独以用户名为名字的目录,存放个人文件

1
2
3
4
/home/lthero
/home/linda
#查看当前用户在home中文件位置
echo $HOME或echo ~

lib目录

libary

  • 基本的共享库,内核模块。这些模块是运行/bin下程序的基础

lost and found 目录:损坏文件

  • 如果Linux突然关闭,下次重启时,fsck(filesystem check)程序会检查文件系统并修复问题,如果有一些被打断的文件被找到,fsck 将他们移动到lost and found目录中,管理员可以从中恢复数据。

media目录

  • 可移动媒体挂载点,用来挂载CD,DVD,软盘等

mnt 用来挂载修复的媒体

opt目录

  • 第三方应用(optional software)

proc目录

  • 进程信息文件

root目录

  • 管理员home目录,类似于用户home目录

sbin目录

  • (system binaries )最最基本的管理员程序,包含一些系统管理程序,这里的程序只能由管理员运行

srv目录

  • 本地系统提供的服务数据

tmp—临时文件夹

  • 所有人都能用,但这里的文件将被自动删除,所以只能短时间存放文件

usr目录

  • 静态数据的第二大文件系统,静态数据是没有管理员干预不会改变的数据

/usr下包含一些常用的程序

/usr/bin

  • 包含可执行程序,而且数据比/bin更多,系统大部分可执行程序都来源于/usr/bin

为什么有两个bin文件夹呢?

由于历史问题,原来应该存放在一起的文件,因为容量不足,开发者们将文件分成两组,/bin下面将装载最基本的启动程序,和最基本的系统文件,余下的部分装在/usr/bin下面。在系统启动时,最先进入drum,也就是/bin下文件。系统运行后再挂载/usr/bin文件系统,接入剩下文件

/usr/games

  • 包含一些游戏和有趣程序像 fortune\sl(火车)\

/usr/include

  • 包含被c c++用的文件

/usr/lib

  • 像/lib 存放预先存在的数据模型、资源库和一些被程序接入服务使用的代码

同/usr/bin一样,最基本的模型和资源被存放在/lib中,系统启动时用/lib内容。之后再挂载/usr/lib文件,接入剩下的资源

/usr/local

  • 为管理员支持本地用户时使用,可以在此找到本地文档和程序,典型用途是创建/usr/local/bin目录,来保存不属于主系统的程序

/usr/sbin

  • 被管理员用的系统程序 system binaries

var目录

  • 动态数据的第二文件系统