linux和windows对文件的定义是非常不同的。linux中所有的东西都是文件,普通文件是文件,键盘硬盘也是,网络通信也是。因为linux就是用文件的形式对系统进行管理。linux中的普通文件类型就是我们平常理解的文件。linux中一共有7中文件类型。
1. 普通文件
普通文件是最常见的文件,用来存放用户的数据。比如数据库文件,图片等。
普通的文件用 -f可以进行测试。
test -f /etc/passwd && echo "普通文件"
2. 目录文件
目录文件可以 -d可以进行测试
test -d /etc && echo "目录文件"
字符设备和快设备,都在 /dev 目录下
ls -l /dev | head -10
total 0
crw------- 1 root root 10, 235 Nov 13 14:06 autofs
drwxr-xr-x 2 root root 100 Nov 13 22:05 block
drwxr-xr-x 2 root root 60 Nov 13 22:05 bsg
crw------- 1 root root 10, 234 Nov 13 14:06 btrfs-control
drwxr-xr-x 3 root root 60 Nov 13 14:05 bus
lrwxrwxrwx 1 root root 3 Nov 13 14:06 cdrom -> sr0
drwxr-xr-x 2 root root 2680 Nov 13 14:06 char
crw------- 1 root root 5, 1 Nov 13 14:06 console
lrwxrwxrwx 1 root root 11 Nov 13 22:05 core -> /proc/kcore
c
开头的都是字符设备, b
开头的都是快设备, l
开始的是链接文件
3. 字符文件
字符文件,是一种I/O设备文件。字符设备是在传输的过程中,一个字节一个字节的进行传输。最常见的就是键盘和打印机。
字符设备可以用 -c进行测试
test -c /dev/tty && echo "字符设备
4. 块设备
快设备文件, 也是一种I/O设备文件,读取或者写入数据是"一块",一块的。 最常见的就是硬盘。一个快是多个扇区,通常是4K的大小。
块设备可以用 ** -b ** 进行测试
test -b /dev/vda && echo "快设备"
5. 链接文件
链接文件类似于 windows 上的快捷方式。 理解链接文件需要掌握一个linux的命令 stat
touch a.txt
ln a.txt la.txt
ln -s a.txt sa.txt
创建一个文件 a.txt, 给这个文件创建一个硬链接文件 la.txt, 一个软链接文件 sa.txt
# stat a.txt | head -4
File: ‘a.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 160548 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
# stat la.txt | head -4
File: ‘la.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 160548 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
# stat sa.txt | head -4
File: ‘sa.txt’ -> ‘a.txt’
Size: 5 Blocks: 0 IO Block: 4096 symbolic link
Device: fd01h/64769d Inode: 160550 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
硬链接相当于一个文件有两个文件名字, 软链可以理解是快捷方式。
链接文件可以用 ** -l ** 进行测试
test -L sa.txt && echo "链接文件"
6. 套接文件
套接字用在网络通信
套接文件件可以用 ** -S ** 进行测试
test -S /tmp/mysql.sock && echo "套接文件"
7. 管道文件
创建一个管道文件
mkfifo test.pipe
# 第一个窗口中执行,把内容写入管道中
echo "test tset test" > test.pipe
# 第二个窗口中执行
cat < test.pipe
可以看到, 当执行 echo "test tset test" > test.pipe
程序被阻塞, 执行 cat < test.pipe
后输出结果。这里是两个进程之间的交互。管道通常用于进程之间的信息交互。
管道文件件可以用 ** -p ** 进行判读
test -p test.pipe && echo "管道文件"