文件
UNIX认为一切都是文件。
Linux做了修改,认为一切都是字节流。
最常用的的命令是
ls -lt
Linux中显示的文件大小都是以字节为单位,文件夹的大小是4kb。linux也支持隐藏文件,以.开头。如果要查看隐藏文件,请加上-a选项。
##第一个字母p表示这是一个命名管道
prw-r--r-- 1 jboss5 jboss 0 9月 17 10:20 pipe_test
另一个常用的命令是lsof
[root@h3715217148-1 umelog]# lsof -p 63409
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
a.out 63409 umelog cwd DIR 253,4 39 2312707 /home/umelog/GDL_CTest
a.out 63409 umelog rtd DIR 253,0 268 64 /
a.out 63409 umelog txt REG 253,4 8608 2312708 /home/umelog/GDL_CTest/a.out
a.out 63409 umelog mem REG 253,0 2118128 4213141 /usr/lib64/libc-2.17.so
a.out 63409 umelog mem REG 253,0 155456 4213134 /usr/lib64/ld-2.17.so
a.out 63409 umelog 0u CHR 136,0 0t0 3 /dev/pts/0
a.out 63409 umelog 1u CHR 136,0 0t0 3 /dev/pts/0
a.out 63409 umelog 2u CHR 136,0 0t0 3 /dev/pts/0
其中,最后三行是标准输入,标准输出和标准错误输出。u表示读写,r代表读,w代表写。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
a.out 22306 umelog cwd DIR 253,4 39 2312707 /home/umelog/GDL_CTest
a.out 22306 umelog rtd DIR 253,0 268 64 /
a.out 22306 umelog txt REG 253,4 8768 2312708 /home/umelog/GDL_CTest/a.out
a.out 22306 umelog mem REG 253,0 2118128 4213141 /usr/lib64/libc-2.17.so
a.out 22306 umelog mem REG 253,0 155456 4213134 /usr/lib64/ld-2.17.so
a.out 22306 umelog 0u CHR 136,0 0t0 3 /dev/pts/0
a.out 22306 umelog 1u CHR 136,0 0t0 3 /dev/pts/0
a.out 22306 umelog 2u CHR 136,0 0t0 3 /dev/pts/0
[root@h3715217148-1 GDL_CTest]# lsof -p 22307
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
a.out 22307 umelog cwd DIR 253,4 39 2312707 /home/umelog/GDL_CTest
a.out 22307 umelog rtd DIR 253,0 268 64 /
a.out 22307 umelog txt REG 253,4 8768 2312708 /home/umelog/GDL_CTest/a.out
a.out 22307 umelog mem REG 253,0 2118128 4213141 /usr/lib64/libc-2.17.so
a.out 22307 umelog mem REG 253,0 155456 4213134 /usr/lib64/ld-2.17.so
a.out 22307 umelog 0u CHR 136,0 0t0 3 /dev/pts/0
a.out 22307 umelog 1u CHR 136,0 0t0 3 /dev/pts/0
a.out 22307 umelog 2u CHR 136,0 0t0 3 /dev/pts/0
可以看到,子进程会获取父进程所有打开的文件表。
这个命令各个显示项的含义是
- COMMAND :进程名称
- PID:进程标识符
- USER:进程所有者
- FD:文件描述符,应用程序通过文件描述符识别到该文件。如cwd、txt等
- TYPE:文件类型,如DIR,REG
- DEVICE:指定磁盘名称
- SIZE:文件大小
- NODE:索引节点(文件在磁盘上的标识)
- NAME:打开文件的确切名称
除了查看一个进程打开了多少文件,我们也可以查看文件被多少个进程打开
lsof /pwd/other.log
INODE及其机制
## 查找某个inode编号的文件
find -inum 201960752
inode 号仅在各文件系统下是唯一的。言外之意,当 Linux 挂载多个文件系统后将出现 inode 号重复的现象。文件系统所能提供的inode是有限的。言外之意你可能回遇到inode耗尽的错误。
常见的文件种类
linux中的文件只有以下七种
- 普通文件(-表示,可用ls -l查看)
- 目录(d)[在Linux中,任何东西都被看成文件,外设备也看成文件,注意是任何东西]、
- 字符设备文件(c)
- 块设备文件(b)
- 套接口文件(s)[如我们开启MySQL服务后,在/var/lib/mysql/下生成的mysql.sock文件,关闭MySQL服务后,这个文件就消失了]
- 管道(p)[管道在Linux/UNIX中式非常有用的东西,必须掌握哈]
- 符号链接文件(l)[有点儿像WIN下的快捷方式]
Socket文件
逻辑上,Socket = IPaddress + TCP/UDP + port。
硬链接和软链接
由于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:
- 文件有相同的 inode 及 data block;
- 只能对已存在的文件进行创建;
- 不能跨文件系统进行硬链接的创建;
- 不能对目录进行创建,只可对文件创建;
- 删除一个硬链接文件并不影响其他有相同 inode 号的文件。
硬连接通过link或者ln进行创建。
link oldfile newfile
另外,硬连接计算一个引用数。
软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊(存储的是路径)。你只要创建的文件是同名同目录的,软链接并不介意。
ln -s old.file soft.link