文件与目录
- 上次的工作目录
|
~ 家目录
|
~account 某account的家目录 (无空格)
|
mkdir(创建目录)
mkdir [options] DIR_NAME
-p
parent,递归创建目录
-m
mode,指定目录的mode,而非默认根据umask算出来的755
rmdir(删除目录)
-p 连同上层“空“目录一起删除
较少使用该命令,一般用rm较多
ls命令
-a
all,列出所有文件,包括.和..
-A
Amost all,列出除.和..外的所有文件
-d
directory ,列出目录本身的信息,而不是其内容
-F
file type,行末显示文件类型(*可执行 /目录 =socket |管道文件)
-l
long, 长数据显示,含权限等属性(已经默认alias到 ll)
-i
inode,列出inode号码(硬连接就是路径)
-n
number,列出UID和GID而非其name
-R
Recursive,连同目录下的文件信息一并列出(不常用)
-S
Size,按大小从大到小排列
-h
human,易读形式显示size
--full-time 以完整时间输出
使用ls命令需要具备的权限:
cp命令
-a all,相当与-pdr,
-p
preserve,保留mode,ownership,时间戳等不变(重点关注ownership)
-d 若源文件为连接文件,则复制连接文件,而非被连接文件本身
-r
recursive, 递归复制,貌似复制目录必须加该选项
-u
update,source新于dest才move
-l 创建硬连接(普通文件:正常。)
-s 创建软连接(普通文件:仅能把当前目录当作目的目录。 对目录不起作用)
-v 使过程可见
使用cp命令需要具备的条件:1.文件可以读 2.其父目录具有x权限(若无x权限,则不能获得文件的inode号,找不到文件)
rm命令
-r
recursive,递归删除
-f
force,强力删除
即使alias rm="rm -i"了,使用rm -rf 依然不会有提示,CentOS6.5上测试显示必须显示指定-i才会有提示
mv命令(常用来做重命名)
-f
force,强力move,若dest存在,则覆盖之
-u
update,source新于dest才move
获取路径的基命(文件名)和目录命
basename /abc/def/gh
dirname /abc/def/gh
从上述瞎写例子中就可以看出,其实这两个目录根本就不管后面跟的什么,即使是捏造的目录,它俩也会告诉你结果,shit!
========
软硬链接
ln [option] SRC_File Link_File
-s 符号链接 <----- ln -s linked_file link_file #这里的所谓相对路径是指相对于新建的
link_file 来说的
-v
verbose,显示过程信息
符号链接文件(软链接)的block里面存的是一个路径(或者称之为绝对文件名,如/etc/passwd)。符号链接的权限一般为777,但真正起作用的是被链接的文件。
一个目录文件被(硬)链接的次数至少为2,其实就是当它是空目录的时候它被指向2次(被父目录dentry指,被自身dentry指)。如果该目录下有子目录,也会被子目录的dentry所指。一个目录也只能被父目录、自身、子目录三类目录所指,这也一个方面反映了目录不能有硬链接,以避免循环。
扩展1: 如何查看软连接文件本身的内容? ---> readlink lnkFile
扩展2: 通常来讲,执行软链接和执行被链接的程序,各方面效果应该一样,但是下图中 pidof 和 killall5 的执行效果不一样,后者需要参数,前者不需要,why? ---> Answer:$0 值不一样,程序中会判断,然后分情况处理,c 中也就是 char *argv[0] 值为 pidof 时和 killall5 时不一样。
shell 中实现之,建立 test.sh ,然后建立两个软链接 test_cp1,test_cp2 ,分别执行 3 个脚本
========
设备文件
ls -l /dev 执行后在属组之后没有size列,但增加了两列数字,分别为:
设备主设备号(major number):标示设备类型
设备次设备号(minor number):标示同一类型的不同设备
mknod 创建设备文件
mknod [OPTION]... NAME TYPE [MAJOR MINOR]
-m mode, 设备文件的mode
ls -l /dev/sdb <--- 记下主次设备号8,16
rm /dev/sdb
mknod /dev/sdhehe b 8 16 <--- 相当于做一个硬链接 另一个实验:tty2硬链接到/tmp/hehe, echo "aa" > /tmp/hehe时,tty2可收到消息。
echo "hello" >> /dev/pts/1
echo "hi,boss" >> /dev/tty2
echo "bye" >> /dev/sda1 非常危险,会直接写入硬盘分区,破坏原始数据
特殊设备:
/dev/zero
/dev/null
loop# 设备
CentOS6 上 loop# 设备默认为 0~7 共8个,但是修改
/boot/grub/grub.conf ,在
kernel 所在行加上
max_loop=## 即可修改该设备文件数量。
可以使用
losetup /dev/loop# part_file 来手动关联 loop# 设备和文件,关联后可以挂 loop # 到指定挂载点,不用再写文件名了
通过
losetup -a 查看这种关联关系,通过
losetup -d /dev/loop# 解除这种关系