04---文件(目录)操作 & 链接文件


文件与目录
-  上次的工作目录
~  家目录
~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# 解除这种关系












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值