Haste makes waste

linux-07-文件管理

Posted on By lijun

1. Linux中的文件管理

要在Linux中使用harddisk,就需要了解文件系统和操作command。

1.1 什么是文件系统

文件系统是高效管理文件(文件日期,文件名,文件属性以及自身)的一种结构。 使用不同文件系统时,其访问效率和安全性也不同。

1.2 什么是partition

使用harddisk时,需要将harddisk分成几个单位,即partition,如Windows中的C盘。

1.3 Linux中的目录结构

Linux中的目录结构如下:

/
 -- boot
 -- bin
 -- sbin
 -- usr
	-- bin
	-- sbin
	-- lib
	-- local
	-- etc
 -- lib
 -- var
	-- log
	-- lib
	-- local
	-- spool
 -- etc
 -- home
 -- dev
 -- proc
 -- mnt
 -- tmp

关于各个目录的作用,参考如下:

  • boot・・・起動に必要な設定ファイルとプログラム
  • bin・・・・一般ユーザ用プログラム
  • sbin・・・システム管理用プログラム
  • lib・・・・複数のプログラムで共通に使われるライブラリプログラム(library)
  • var・・・・ログやメールやホームページなどの可変(Variable)なファイル
  • etc・・・・設定ファイル
  • home・・・ユーザの作業領域であるホームディレクトリ
  • dev・・・デバイスファイル
  • proc・・・カーネルやプロセスを参照するための仮想ファイルシステム
  • mnt・・・ファイルシステムの一時マウントポインタ(ディレクトリ)≒/media
  • tmp・・・一時(Temporary)ファイル

1.4 文件系统的创建方法

harddisk在使用之前,需要如下的操作:

  • partition作成:fdisk command
  • file system作成:mkfs command (在Windows中叫做format即格式化)
  • mount:mount command

这些command大多是/sbin目录中的系统管理用command,大部分系统管理用command只能root用户执行。 一般user因为没有系统管理权限,要么是不能执行这些系统管理命令,要么因为无法访问所需要的自由导致执行失败。 一般用户的初始设定中,是无法访问/sbin目录的,执行命令时需要使用绝对路径/sbin/fdisk ,如果当前是user用户,需要使用su - 切换到root 用户执行。

2. Disk的partition磁盘分区

使用fdisk命令,能确认分区情况,作成分区和删除分区。

fdisk [オプション] [デバイスファイル] 
1. -l 显示device的partition信息

2.1 创建分区

harddisk可以有三种类型接口,即IDE / SATA / SCSI。 harddisk可以分成1-4个分区,三个基本分区和一个扩展分区,扩展分区最多只能一个,扩展分区内能继续划分逻辑分区。 下面是不同接口harddisk,最多允许的分区数:

  • IDE:63(基本 3+論理 60)
  • SATA:15(基本 3+論理 12)
  • SCSI:15(基本 3+論理 12)

2.2 harddisk的追加流程

  1. 当前分区信息确认
  2. 创建分区
  3. 分区种类变更
  4. 分区信息保存
  5. 重启
  6. 创建文件系统
  7. mount
  8. swap分区的创建
  9. swap追加
  10. 设定自动mount

2.2.1 确认分区信息 fdisk /dev/sdcp

# fdisk /dev/sdc 

コマンド (m でヘルプ): p ↵                        現在のパーティション情報を表示 

Disk /dev/sdc: 6442 MB, 6442450944 bytes 
255 heads, 63 sectors/track, 783 cylinders 
Units = シリンダ数 of 16065 * 512 = 8225280 bytes 
デバイス Boot      Start         End      Blocks   Id  System
分割されていない状態で何も表示されない 

  1. 先使用fdisk /dev/sdc,将/dev/sdc启动。
  2. 再使用p command将现在的分区情况显示出来。

2.2.2 创建分区 n

  • 例,nコマンドで新しいパーティションを確保します。 pを指定して、基本パーティションを2つ作成します。
コマンド (m でヘルプ): n ↵ 新しいパーティションの確保 
コマンドアクション
	e   拡張
	p   基本パーティション (1-4) 
p ↵ 基本パーティション 

パーティション番号 (1-4): 1 ↵ 初めてパーティションを作成するので1 
最初 シリンダ (1-783, default 1): ↵     入力でデフォルトの先頭シリンダを指定 
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-783, default 783): +1024M
↵ 確保するサイズ 

コマンド (m でヘルプ): n ↵ 新しいパーティションの確保 
コマンドアクション
	e   拡張
	p   基本パーティション (1-4) 
p ↵ 基本パーティション 

パーティション番号 (1-4): 2 ↵ 2つ目のパーティションを取るので2 
最初 シリンダ (126-783, default 126): 126 ↵ 先頭シリンダを指定 
終点 シリンダ または +サイズ または +サイズM または +サイズK (126-783, default 783): +1024M ↵
	確保するサイズ 


コマンド (m でヘルプ): p ↵                        現在のパーティション情報を表示 
Disk /dev/sdc: 6442 MB, 6442450944 bytes 
255 heads, 63 sectors/track, 783 cylinders 
Units = シリンダ数 of 16065 * 512 = 8225280 bytes 
デバイス Boot      Start         End      Blocks   Id  System  確保したパー 
/dev/sdc1               1         125     1004031   83  Linux  ティションの 
/dev/sdc2             126         250     1004062+  83  Linux  リスト表示 


2.2.3 分区种类变更 tL

上面创建的分区,其system即文件系统为linux(83),现在将其修改为swap所需的82.

コマンド (m でヘルプ): t ↵ 確保したパーティションの情報を変更 
パーティション番号 (1-4): 2 ↵ 

16進数コード (L コマンドでコードリスト表示): L ↵    パーティションの種類のリスト表示

0  空              1e  Hidden W95 FAT1 80  古い Minix     be  Solaris boot   
1  FAT12           24  NEC DOS         81  Minix / 古い   bf  Solaris        
2  XENIX root      39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
3  XENIX usr       3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
4  FAT16 <32M      40  Venix 80286     84  OS/2 隠し C:   c6  DRDOS/sec (FAT-
5  拡張パーティション 41  PPC PReP Boot   85  Linux 拡張領   c7  Syrinx 

...        


16進数コード (L コマンドでコードリスト表示): 82 ↵             
スワップ領域を指定 Changed system type of partition 2 to 82 (Linux swap / Solaris) 

2.2.4 保存分区信息 wq

コマンド (m でヘルプ): w ↵ ハードディスクにパーティション情報を書き込む 
The partition table has been altered! 
Calling ioctl() to re-read partition table. 
...

コマンド (m でヘルプ): q ↵ 

  • w・・・書き込み、保存(write)
  • q・・・変更を書き込まない、破棄(quit)

3. 文件系统

Linux中有EXT2,EXT3,ReiserFS和XFS及JFS等文件系统,Windows中有FAT和NTFS文件系统,关于各个文件系统支持的最大size等信息,可以问google。

3.1 确认mount状态 df

df可以显示出当前mount下的所有文件系统的list。

3.2 创建文件系统 mkfs

分区之后,需要使用mkfs创建文件系统。

mkfs オプション 

1. -t,作成文件系统时,指定其种类
2. -c,检测坏道不使用这一部分
  • 实例
# mkfs -t ext3 -c /dev/sdc1  ↵    
sdc1(3つ目(c)のインターフェースの1つ目の  パーティション)にext3形式のファイルシステムを作成 

3.4 标签 e2label

label是用来识别harddisk中分区时的标签。

e2label デバイス [ラベル] 
  • 实例:
# e2label /dev/sdc3 ↵                                    /dev/sdc3のラベルを表示 
opt 

# e2label /dev/sdc3 opt2 ↵                        /dev/sdc3のラベルをopt2に変更 

# e2label /dev/sdc3 ↵                                    /dev/sdc3のラベルを表示 
opt2 

4. mount

接入到Linux中的存储,比如harddisk/dvd等,要使用的话需要先mount,mount的方法可以参考: Linux中加载外部存储

4.1 mountumount

  • 实例
# mount -t ext3 -o rw /dev/sdc3 /opt ↵      /dev/sdc3を/optディレクトリへext3形式でマウント 
# df ↵                              マウントされているファイルシステムの一覧表示 

Filesystem           1K-ブロック    使用   使用可 使用% マウント位置 
/dev/sda1              4567236   3444596    886888  80% / 
tmpfs                   517660         0    517660   0% /dev/shm 
...

# ls /opt ↵                           マウントされた/optディレクトリをリスト表示 
lost+found 

# umount /opt ↵                                    /opt(/dev/sdc3)をアンマウント 

# df ↵                              マウントされているファイルシステムの一覧表示 

Filesystem           1K-ブロック    使用   使用可 使用% マウント位置 
/dev/sda1              4567236   3444596    886888  80% / 
tmpfs                   517660         0    517660   0% /dev/shm 

5. 创建swap领域

linux的kernel将数据和程序从硬盘读取到内存中执行,如果内存被消耗殆尽了,就会将数据和程序暂时存放到swap领域。

5.1 swap system的创建

mkswap デバイスファイル 

1. -c 检测坏道不使用它

5.2 创建swap领域和使用

通过swapon实现swap领域的使用开始和停止。

swapon -s [デバイスファイル] 
  • 实例:
# fdisk -l  ↵                               ハードディスクのパーティションを表示 
Disk /dev/sda: 6442 MB, 6442450944 bytes 
255 heads, 63 sectors/track, 783 cylinders 
Units = シリンダ数 of 16065 * 512 = 8225280 bytes 
デバイス Boot      Start         End      Blocks   Id  System 
/dev/sda1   *           1         587     4715046   83  Linux 
/dev/sda2             588         712     1004062+  82  Linux swap / Solaris 
/dev/sda3             713         783      570307+  83  Linux 

# mkswap -c /dev/sda2 ↵                        /dev/sda2をスワップファイルに変更 
Setting up swapspace version 1, size = 1036378 kB 

# swapon -s ↵                                 利用開始しているスワップ領域を表示 

# swapon /dev/sda2 ↵           /dev/sda2をスワップファイルシステムとして利用開始 

# swapon -s ↵                                 利用開始しているスワップ領域を表示 

Filename                                Type            Size    Used    Priority 
/dev/sda2                               partition       1012084 0       -4 

6. 自动mount

使用mount命令手动mount disk的话,每次重启后都需要手动mount,需要修改/etc/fstab文件。

  • 实例:
# vi /etc/fstab	↵	 /etc/fstabファイルを修正します
/dev/sda3     /opt     ext3    defaults     1 2 # 新しいパーティションを追加 

# mount -a ↵            マウント
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置 
/dev/sda1              4567236   3470024    861460  81% / 
tmpfs                   517660         0    517660   0% 
/dev/shm /dev/sda3               553408     16840    508456   4% /opt # 新しいパーティション

  • 使用CD或DVD
# mount -t iso9660 -o ro /dev/hdc /media/cdrom ↵               DVD-ROMをマウント 

# ls /media/cdrom ↵                                       マウントポイントを確認 
CentOS                 RELEASE-NOTES-es.html  RELEASE-NOTES-pt_BR 
EULA                   RELEASE-NOTES-fr       RELEASE-NOTES-pt_BR.html 
...
# umount /media/cdrom ↵     DVD-ROMをアンマウント  

7. i Node

EXT3(EXT2)文件系统中,每个文件和目录都有一个唯一的i node编号。

创建文件系统的时候,会创建一个i node区域,用于存储文件在disk上的位置以及访问权限等。

  • 显示文件系统的信息
df -i
1. -i 显示node信息
  • 实例
$ ls -il /bin | sort ↵                                         iノード番号を表示

750812 -rwxr-xr-x  1 root root  18568  2月 22  2005 setserial   750812がiノード番号 
750813 -rwxr-xr-x  1 root root  57488  5月  3  2007 cpio 
750814 -rwxr-xr-x  3 root root  56080  7月 15  2007 gunzip 
750814 -rwxr-xr-x  3 root root  56080  7月 15  2007 gzip 

  1. ァイル名が別々でもiノード番号が同じファイルは、ファイル としての実体は同じなハードリンクという仕組みを表しています。
  2. 3番目に表示されている項目の 3と いう数字はリンク数で、1つのファイル実体を3つのファイル名でリンクしていることを表しています。

8. hard link与symbolic link

有时一个文件的路径过长,使用时每次输入路径会不方便,这时可以生成该文件的hard link或symbolic link,将link放在自己的home目录下方便访问。 link按类型分为hard link和symbolic link。

  1. hard link

hardlink直接指向原始文件,与原始文件有相同的i node编码,所以不能在不同的文件系统下生成hard link。

  1. symblic link

类似于windows的shortcut,生成一个保存了原始文件位置的文件,可以在不同的文件系统下生成。

ln 元ファイル名 リンク名 

1. -s:シンボリックリンクを作成します。 

默认生成hard link。

  • 实例:hard link
$ cp -p /usr/bin/file .  ↵ 
$ ln file file2 ↵                                             ハードリンクを作成 
$ ls -il file* ↵ 
559793 -rwxr-xr-x 2 root root 12428  5月 31  2007 fileコピーされたファイル 
559793 -rwxr-xr-x 2 root root 12428  5月 31  2007 file2     ハードリンクされたファイル 

  • 实例:symbolic link
$ cp -p /usr/bin/file . ↵             fileコマンドをカレントディレクトリへコピー 

$ ln -s file file3 ↵                     fileのシンボリックファイル(file3)を作成 

$ ls -il file* ↵             *は任意の文字でfileで始まるfileやfile1やfile3などをリスト

559793 -rwxr-xr-x 2 root root 12428  5月 31  2007 file      コピーされたファイル 

360502 lrwxrwxrwx 1 root root     4  2月  9 04:55 file3 -> file-rwxr-xr-x  1 

9. 管理disk的command

9.1 文件系统的修复和检测 fsck

fsck デバイス名 
  • 实例: check harddisk
# fsck /dev/sda3 ↵                    

9.2 确认文件夹的容量

du [ディレクトリ] [ファイル] 

1. -s 显示总计