Bash编程017——文件类型与格式
2019-01-09 本文已影响3人
若梦儿
Bash编程017——文件类型与格式
17.1 文件
计算机能在多种不同的物理介质上存储信息,为了方便地使用计算机系统,操作系统一般提供了信息存储的统一逻辑接口。操作系统对存储设备的各种属性加以抽象,从而定义了逻辑存储单元(文件)。文件是记录在外存上的关联信息的集合。
17.2 文件类型
在Linux文件系统中通常有多种文件类型,最常见的是普通文件和目录。除此之外,还有另外五种不同类型的文件。
我们可以使用ls -l命令来查看文件类型。
7种文件类型分别为:
- -:普通类型
- d:目录
- c:字符设备文件
- b:块设备文件
- s:本地套接字文件
- p:命名管道
- l:链接文件
# 示例
ls -l ~
# 输出如下:
总用量 64
drwxrwxr-x 2 ruo ruo 4096 1月 6 19:50 bin
drwxrwxr-x 4 ruo ruo 4096 1月 4 17:46 Codes
drwxr-xr-x 3 ruo ruo 4096 1月 9 16:00 Desktop
drwxr-xr-x 2 ruo ruo 4096 12月 9 11:09 Documents
drwxr-xr-x 4 ruo ruo 4096 12月 21 23:14 Downloads
-rw-rw-r-- 1 ruo ruo 151 12月 27 09:29 fault.c
drwxr-xr-x 2 ruo ruo 4096 12月 9 11:09 Music
drwxr-xr-x 2 ruo ruo 4096 12月 9 11:09 Pictures
-rw-rw-r-- 1 ruo ruo 9223 1月 4 18:07 ps.txt
drwxr-xr-x 2 ruo ruo 4096 12月 9 11:09 Public
drwxr-xr-x 3 ruo ruo 4096 12月 22 21:58 snap
drwxr-xr-x 2 ruo ruo 4096 12月 9 11:09 Templates
drwxrwxr-x 2 ruo ruo 4096 1月 6 19:59 Test
drwxr-xr-x 2 ruo ruo 4096 12月 9 11:09 Videos
在上述长格式的输出下,每个文件的第一个字母表示了文件类型。可以看出,这里有普通文件和目录文件。
# 查看别的类型
ls -l /dev
# 输出:
总用量 0
crw------- 1 root root 10, 175 1月 9 15:50 agpgart
crw-r--r-- 1 root root 10, 235 1月 9 15:50 autofs
drwxr-xr-x 2 root root 300 1月 9 15:50 block
drwxr-xr-x 2 root root 80 1月 9 15:50 bsg
crw------- 1 root root 10, 234 1月 9 15:50 btrfs-control
drwxr-xr-x 3 root root 60 1月 9 15:50 bus
lrwxrwxrwx 1 root root 3 1月 9 15:50 cdrom -> sr0
lrwxrwxrwx 1 root root 3 1月 9 15:50 cdrw -> sr0
drwxr-xr-x 2 root root 3560 1月 9 15:50 char
crw------- 1 root root 5, 1 1月 9 15:50 console
lrwxrwxrwx 1 root root 11 1月 9 15:50 core -> /proc/kcore
crw------- 1 root root 10, 59 1月 9 15:50 cpu_dma_latency
crw------- 1 root root 10, 203 1月 9 15:50 cuse
drwxr-xr-x 7 root root 140 1月 9 15:50 disk
crw-rw----+ 1 root audio 14, 9 1月 9 15:50 dmmidi
drwxr-xr-x 2 root root 80 1月 9 15:50 dri
lrwxrwxrwx 1 root root 3 1月 9 15:50 dvd -> sr0
crw------- 1 root root 10, 61 1月 9 15:50 ecryptfs
crw-rw---- 1 root video 29, 0 1月 9 15:50 fb0
lrwxrwxrwx 1 root root 13 1月 9 15:50 fd -> /proc/self/fd
crw-rw-rw- 1 root root 1, 7 1月 9 15:50 full
crw-rw-rw- 1 root root 10, 229 1月 9 15:50 fuse
crw------- 1 root root 244, 0 1月 9 15:50 hidraw0
crw------- 1 root root 10, 228 1月 9 15:50 hpet
drwxr-xr-x 2 root root 0 1月 9 15:50 hugepages
crw------- 1 root root 10, 183 1月 9 15:50 hwrng
lrwxrwxrwx 1 root root 25 1月 9 15:50 initctl -> /run/systemd/initctl/fifo
drwxr-xr-x 4 root root 260 1月 9 15:50 input
crw-r--r-- 1 root root 1, 11 1月 9 15:50 kmsg
drwxr-xr-x 2 root root 60 1月 9 15:50 lightnvm
lrwxrwxrwx 1 root root 28 1月 9 15:50 log -> /run/systemd/journal/dev-log
brw-rw---- 1 root disk 7, 0 1月 9 15:50 loop0
brw-rw---- 1 root disk 7, 1 1月 9 15:50 loop1
brw-rw---- 1 root disk 7, 2 1月 9 15:51 loop2
brw-rw---- 1 root disk 7, 3 1月 9 15:50 loop3
brw-rw---- 1 root disk 7, 4 1月 9 15:51 loop4
brw-rw---- 1 root disk 7, 5 1月 9 15:50 loop5
brw-rw---- 1 root disk 7, 6 1月 9 15:50 loop6
brw-rw---- 1 root disk 7, 7 1月 9 15:50 loop7
crw-rw---- 1 root disk 10, 237 1月 9 15:50 loop-control
drwxr-xr-x 2 root root 60 1月 9 15:50 mapper
crw------- 1 root root 10, 227 1月 9 15:50 mcelog
crw-r----- 1 root kmem 1, 1 1月 9 15:50 mem
crw------- 1 root root 10, 56 1月 9 15:50 memory_bandwidth
crw-rw----+ 1 root audio 14, 2 1月 9 15:50 midi
drwxrwxrwt 2 root root 40 1月 9 15:50 mqueue
drwxr-xr-x 2 root root 60 1月 9 15:50 net
crw------- 1 root root 10, 58 1月 9 15:50 network_latency
crw------- 1 root root 10, 57 1月 9 15:50 network_throughput
crw-rw-rw- 1 root root 1, 3 1月 9 15:50 null
crw-r----- 1 root kmem 1, 4 1月 9 15:50 port
crw------- 1 root root 108, 0 1月 9 15:50 ppp
crw------- 1 root root 10, 1 1月 9 15:50 psaux
crw-rw-rw- 1 root tty 5, 2 1月 9 16:21 ptmx
drwxr-xr-x 2 root root 0 1月 9 15:50 pts
crw-rw-rw- 1 root root 1, 8 1月 9 15:50 random
crw-rw-r--+ 1 root netdev 10, 62 1月 9 15:50 rfkill
lrwxrwxrwx 1 root root 4 1月 9 15:50 rtc -> rtc0
crw------- 1 root root 249, 0 1月 9 15:50 rtc0
brw-rw---- 1 root disk 8, 0 1月 9 15:50 sda
brw-rw---- 1 root disk 8, 1 1月 9 15:50 sda1
brw-rw---- 1 root disk 8, 2 1月 9 15:50 sda2
brw-rw---- 1 root disk 8, 3 1月 9 15:50 sda3
crw-rw---- 1 root disk 21, 0 1月 9 15:50 sg0
crw-rw----+ 1 root cdrom 21, 1 1月 9 15:50 sg1
drwxrwxrwt 2 root root 240 1月 9 15:51 shm
crw------- 1 root root 10, 231 1月 9 15:50 snapshot
drwxr-xr-x 3 root root 200 1月 9 15:50 snd
brw-rw----+ 1 root cdrom 11, 0 1月 9 15:50 sr0
lrwxrwxrwx 1 root root 15 1月 9 15:50 stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 1月 9 15:50 stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 1月 9 15:50 stdout -> /proc/self/fd/1
crw-rw-rw- 1 root tty 5, 0 1月 9 15:57 tty
crw--w---- 1 root tty 4, 0 1月 9 15:50 tty0
crw--w---- 1 root tty 4, 1 1月 9 15:50 tty1
crw--w---- 1 root tty 4, 10 1月 9 15:50 tty10
crw--w---- 1 root tty 4, 11 1月 9 15:50 tty11
crw--w---- 1 root tty 4, 12 1月 9 15:50 tty12
crw--w---- 1 root tty 4, 13 1月 9 15:50 tty13
crw--w---- 1 root tty 4, 14 1月 9 15:50 tty14
crw--w---- 1 root tty 4, 15 1月 9 15:50 tty15
crw--w---- 1 root tty 4, 16 1月 9 15:50 tty16
crw--w---- 1 root tty 4, 17 1月 9 15:50 tty17
crw--w---- 1 root tty 4, 18 1月 9 15:50 tty18
crw--w---- 1 root tty 4, 19 1月 9 15:50 tty19
crw--w---- 1 ruo tty 4, 2 1月 9 15:50 tty2
crw--w---- 1 root tty 4, 20 1月 9 15:50 tty20
crw--w---- 1 root tty 4, 21 1月 9 15:50 tty21
crw--w---- 1 root tty 4, 22 1月 9 15:50 tty22
crw--w---- 1 root tty 4, 23 1月 9 15:50 tty23
crw--w---- 1 root tty 4, 24 1月 9 15:50 tty24
crw--w---- 1 root tty 4, 25 1月 9 15:50 tty25
crw--w---- 1 root tty 4, 26 1月 9 15:50 tty26
crw--w---- 1 root tty 4, 27 1月 9 15:50 tty27
crw--w---- 1 root tty 4, 28 1月 9 15:50 tty28
crw--w---- 1 root tty 4, 29 1月 9 15:50 tty29
crw--w---- 1 root tty 4, 3 1月 9 15:50 tty3
crw--w---- 1 root tty 4, 30 1月 9 15:50 tty30
crw--w---- 1 root tty 4, 31 1月 9 15:50 tty31
crw--w---- 1 root tty 4, 32 1月 9 15:50 tty32
crw--w---- 1 root tty 4, 33 1月 9 15:50 tty33
crw--w---- 1 root tty 4, 34 1月 9 15:50 tty34
crw--w---- 1 root tty 4, 35 1月 9 15:50 tty35
crw--w---- 1 root tty 4, 36 1月 9 15:50 tty36
crw--w---- 1 root tty 4, 37 1月 9 15:50 tty37
crw--w---- 1 root tty 4, 38 1月 9 15:50 tty38
crw--w---- 1 root tty 4, 39 1月 9 15:50 tty39
crw--w---- 1 root tty 4, 4 1月 9 15:50 tty4
crw--w---- 1 root tty 4, 40 1月 9 15:50 tty40
crw--w---- 1 root tty 4, 41 1月 9 15:50 tty41
crw--w---- 1 root tty 4, 42 1月 9 15:50 tty42
crw--w---- 1 root tty 4, 43 1月 9 15:50 tty43
crw--w---- 1 root tty 4, 44 1月 9 15:50 tty44
crw--w---- 1 root tty 4, 45 1月 9 15:50 tty45
crw--w---- 1 root tty 4, 46 1月 9 15:50 tty46
crw--w---- 1 root tty 4, 47 1月 9 15:50 tty47
crw--w---- 1 root tty 4, 48 1月 9 15:50 tty48
crw--w---- 1 root tty 4, 49 1月 9 15:50 tty49
crw--w---- 1 root tty 4, 5 1月 9 15:50 tty5
crw--w---- 1 root tty 4, 50 1月 9 15:50 tty50
crw--w---- 1 root tty 4, 51 1月 9 15:50 tty51
crw--w---- 1 root tty 4, 52 1月 9 15:50 tty52
crw--w---- 1 root tty 4, 53 1月 9 15:50 tty53
crw--w---- 1 root tty 4, 54 1月 9 15:50 tty54
crw--w---- 1 root tty 4, 55 1月 9 15:50 tty55
crw--w---- 1 root tty 4, 56 1月 9 15:50 tty56
crw--w---- 1 root tty 4, 57 1月 9 15:50 tty57
crw--w---- 1 root tty 4, 58 1月 9 15:50 tty58
crw--w---- 1 root tty 4, 59 1月 9 15:50 tty59
crw--w---- 1 root tty 4, 6 1月 9 15:50 tty6
crw--w---- 1 root tty 4, 60 1月 9 15:50 tty60
crw--w---- 1 root tty 4, 61 1月 9 15:50 tty61
crw--w---- 1 root tty 4, 62 1月 9 15:50 tty62
crw--w---- 1 root tty 4, 63 1月 9 15:50 tty63
crw--w---- 1 gdm tty 4, 7 1月 9 15:50 tty7
crw--w---- 1 root tty 4, 8 1月 9 15:50 tty8
crw--w---- 1 root tty 4, 9 1月 9 15:50 tty9
crw------- 1 root root 5, 3 1月 9 15:50 ttyprintk
crw-rw---- 1 root dialout 4, 64 1月 9 15:50 ttyS0
crw-rw---- 1 root dialout 4, 65 1月 9 15:50 ttyS1
crw-rw---- 1 root dialout 4, 74 1月 9 15:50 ttyS10
crw-rw---- 1 root dialout 4, 75 1月 9 15:50 ttyS11
crw-rw---- 1 root dialout 4, 76 1月 9 15:50 ttyS12
crw-rw---- 1 root dialout 4, 77 1月 9 15:50 ttyS13
crw-rw---- 1 root dialout 4, 78 1月 9 15:50 ttyS14
crw-rw---- 1 root dialout 4, 79 1月 9 15:50 ttyS15
crw-rw---- 1 root dialout 4, 80 1月 9 15:50 ttyS16
crw-rw---- 1 root dialout 4, 81 1月 9 15:50 ttyS17
crw-rw---- 1 root dialout 4, 82 1月 9 15:50 ttyS18
crw-rw---- 1 root dialout 4, 83 1月 9 15:50 ttyS19
crw-rw---- 1 root dialout 4, 66 1月 9 15:50 ttyS2
crw-rw---- 1 root dialout 4, 84 1月 9 15:50 ttyS20
crw-rw---- 1 root dialout 4, 85 1月 9 15:50 ttyS21
crw-rw---- 1 root dialout 4, 86 1月 9 15:50 ttyS22
crw-rw---- 1 root dialout 4, 87 1月 9 15:50 ttyS23
crw-rw---- 1 root dialout 4, 88 1月 9 15:50 ttyS24
crw-rw---- 1 root dialout 4, 89 1月 9 15:50 ttyS25
crw-rw---- 1 root dialout 4, 90 1月 9 15:50 ttyS26
crw-rw---- 1 root dialout 4, 91 1月 9 15:50 ttyS27
crw-rw---- 1 root dialout 4, 92 1月 9 15:50 ttyS28
crw-rw---- 1 root dialout 4, 93 1月 9 15:50 ttyS29
crw-rw---- 1 root dialout 4, 67 1月 9 15:50 ttyS3
crw-rw---- 1 root dialout 4, 94 1月 9 15:50 ttyS30
crw-rw---- 1 root dialout 4, 95 1月 9 15:50 ttyS31
crw-rw---- 1 root dialout 4, 68 1月 9 15:50 ttyS4
crw-rw---- 1 root dialout 4, 69 1月 9 15:50 ttyS5
crw-rw---- 1 root dialout 4, 70 1月 9 15:50 ttyS6
crw-rw---- 1 root dialout 4, 71 1月 9 15:50 ttyS7
crw-rw---- 1 root dialout 4, 72 1月 9 15:50 ttyS8
crw-rw---- 1 root dialout 4, 73 1月 9 15:50 ttyS9
crw------- 1 root root 10, 239 1月 9 15:50 uhid
crw------- 1 root root 10, 223 1月 9 15:50 uinput
crw-rw-rw- 1 root root 1, 9 1月 9 15:50 urandom
crw------- 1 root root 10, 240 1月 9 15:50 userio
crw-rw---- 1 root tty 7, 0 1月 9 15:50 vcs
crw-rw---- 1 root tty 7, 1 1月 9 15:50 vcs1
crw-rw---- 1 root tty 7, 2 1月 9 15:50 vcs2
crw-rw---- 1 root tty 7, 3 1月 9 15:50 vcs3
crw-rw---- 1 root tty 7, 4 1月 9 15:50 vcs4
crw-rw---- 1 root tty 7, 5 1月 9 15:50 vcs5
crw-rw---- 1 root tty 7, 6 1月 9 15:50 vcs6
crw-rw---- 1 root tty 7, 128 1月 9 15:50 vcsa
crw-rw---- 1 root tty 7, 129 1月 9 15:50 vcsa1
crw-rw---- 1 root tty 7, 130 1月 9 15:50 vcsa2
crw-rw---- 1 root tty 7, 131 1月 9 15:50 vcsa3
crw-rw---- 1 root tty 7, 132 1月 9 15:50 vcsa4
crw-rw---- 1 root tty 7, 133 1月 9 15:50 vcsa5
crw-rw---- 1 root tty 7, 134 1月 9 15:50 vcsa6
drwxr-xr-x 2 root root 60 1月 9 15:50 vfio
crw------- 1 root root 10, 63 1月 9 15:50 vga_arbiter
crw------- 1 root root 10, 137 1月 9 15:50 vhci
crw------- 1 root root 10, 238 1月 9 15:50 vhost-net
crw------- 1 root root 10, 241 1月 9 15:50 vhost-vsock
crw------- 1 root root 10, 55 1月 9 15:50 vmci
crw-rw-rw- 1 root root 10, 54 1月 9 15:50 vsock
crw-rw-rw- 1 root root 1, 5 1月 9 15:50 zero
从上述输出中可以看出有,块设备文件,字符设备文件,链接文件。
17.3 文件格式
在Windows系统中,采用文件扩展名来标识文件格式,比如1.txt,2.exe,3.doc,4.mp3等。这里的.txt,.exe,.doc,.mp3就是文件扩展名,通常Windows系统会根据文件扩展名选择相应的应用程序处理文件。
而在Linux系统中,并不依据文件扩展名来区分文件格式。实际上,Linux系统中的文件后缀名通常是帮助用户区分不同格式的文件。一个文件具体为什么格式跟其扩展名没有任何关系。可以使用file命令查看文件格式。
file命令的详细使用方法,请参阅man file。
# 首先下载一个压缩文件
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/bc/bc-1.07.tar.gz
file bc-1.07.tar.gz
# 输出如下:
bc-1.07.tar.gz: gzip compressed data, last modified: Mon Mar 27 01:00:49 2017, max compression, from Unix
# 修改文件后缀,类型无变化
cp bc-1.07.tar.gz bc
file bc
bc: gzip compressed data, last modified: Mon Mar 27 01:00:49 2017, max compression, from Unix