3.1 生成任意大小文件
1 创建特定大小的文件最简单的方法是使用dd命令,dd命令会克隆给定的输入内容,然后将一份一模一样的副本写道输出
2 stdin,设备文件,普通文件等都可以作为输入,stdout,设备文件,普通文件等也可以作为输出
3 例子: dd if=/dev/zero of=data bs=1M count=1
该命令会在当面目录创建一个1MB大小的文件data,来看一下参数,if代表输入文件,of代表输出文件,bs代表以字节为单位的块大小,count表示要被复制的块数
4 我们将bs指定为1MB,count为1,于是得到了一个大小为1MB的文件,如果把count指定为2则得到2MB的文件
5 /dev/zero是一个字符设备,他会不断返回0值字节(\0)
6 如果不指定输入参数,默认情况是从stdin中读取输入,与之类似,如果不指定输出参数则默认会将stdout作为输出
3.2 文本文件的交集和差集
1 comm命令可以用于两个文件之间的比较,它有很多不错的选项来调整输出
2 例子: comm fileA fileB
输出的第一列包含在fileA中出现行,第二列包含在fileB中出现的行,第三列包含在fileA和fileB中相同的行
有一些选项可以按照我们需求进行格式化输出
-1 从输出中删除第一列
-2 从输出中删除第二列
-3 从输出中删除第三列
3.3 查找并删除重复文件
1 重复文件指的是那些虽然名字不同但是内容却一模一样的文件
2 校验和是通过文件的内容来的,内容相同的文件校验和是一样的
3.4 创建长路径目录
1 mkdir命令用于创建目录,如果目录已经存在会返回错误信息
2 -e是条件判断[]中的参数,可以用来判断某个文件是否存在,在类UNIX中,目录同样是一个文件
3.5 文件权限和所有权
1 用户是文件所有者,用户组是多个用户的集合,系统允许这些用户对文件以某种形式进行访问
2 用命令ls -l可以列出文件的权限
比如: -rw-r--r-- 1 chenguolin chenguolin 2497 2014-01-19 21:02 hehe.txt
3 第一列总共有10个字符,第一个字符表示的是文件的类型,'-'是普通文件,'d'是目录文件,’c'字符设备等等
剩下的9个字符可以分成三组,每组三个字符。第一组的三个字符是用户权限,第二组的三个字符是用户组权限,第三组的三个字符是其他用户。
权限序列rwx,分别表示读写执行权限
4 目录同样也具有读写执行权限,不过目录相对于普通文件来说是不一样的
目录的读权限r 允许读取目录文件和子目录的列表
目录的写权限w 允许目录中创建或删除文件或目录
目录的执行权限 指明可以访问目录中的文件和子目录
5 为了设置文件权限,可以使用chmod命令
chmod u=rwx g=rw o=r filename
在这里: u指的是用户权限,g指的是用户组权限,o是指其它人实体权限
如果需要给文件添加权限,可以对用户,用户组和其他用户+进行添加,用-进行删除权限
我们也可以利用八进制来设置权限,权限由3位数来表示,每一位按顺序分别对应用户,用户组和其他用户
r对应的值为4,w对应的值为2,x对应的值为1
6 我们可以使用chown来更改文件的所有权
chown user.group filename // 这样是把文件filename的所有者改为user,用户组为group
7 有时候要以递归的方式修改当前目录下的所有文件和子目录的权限,可以使用下面的方法
chmod 777 path -R //这个例子就是递归把path目录下的所有文件的权限修改为777
8 同理我们也可以利用-R来递归修改文件的所有者
chown user.group path -R //这个命令就是递归把path目录下的所有文件的所有者和用户组修改掉
3.6 创建不可修改的文件
1 一旦文件被设置为不可修改,任何用户包括超级用户都不能删除该文件,除非其不可修改的属性被移除
2 可以用chattr将文件设置为不可修改
sudo chattr +i file //这样文件file就变为了不可修改
3 如果需要使得文件可以写,直接使用sudo chattr -i file来修改权限
3.7 批量生成空白文件
1 touch命令可以用来生成空白文件,如果文件存在,则可以用它来修改文件的时间撮
2 touch file // 如果文件不存在则创建一个文件否则直接修改该文件的时间戳
3 如果我们只是想修改某些时间戳,则可以使用下面的选项
touch -a 只更改文件访问时间
touch -m 只更改文件内容修改时间
3.8 查找符号链接及其指向目标
1 符号链接不过是指向其他文件的指针,它在功能上类似Mac OS中的别名或windows中的快捷方式
2 我们可以按照下面的方式创建链接
ln -s file link //该命令为文件file创建一个连接link
3.9 列举文件类型统计信息
1 我们可以使用file命令来打印文件类型
file filename //可以打印处filename的文件类型
3.10 环回文件及挂载
1 为了使用存储设备上面的文件系统,我们需要将其挂载到一些被称为挂载点的目录上
2 前面介绍了可以使用dd命令创建一个大的文件,那么我们可以使用mkfs这个命令来格式化设备
mkfs.ext4 /dev/sdb1 // 这个命令就是把/dev/sdb1格式化成ext4文件类型
3 我们可以使用mount来挂载
mount /dev/sdb1 /mnt/usb //这个命令就是把/dev/sdb1 挂载到/mnt/usb
4 如果要卸载使用下面的方法
umount /dev/sdb1 或 umount /mnt/usb
因为umount是一个特权命令,所以必须以超级用户的身份来执行
3.11 查找文件差异进行修补
1 我们可以使用patch(补丁文件)来更改文件信息
2 diff命令可以用来比较两个文件,最常用的用法是diff fileA fileB
我们还可以使用-u选项来进行一体化输出 diff -u fileA fileB
3 在一体化输出中,以+起始的是新加入的行,以-起始的是删除的行
diff -u fileA fileB > patch // 这个命令把两个文件的差异信息重定向到patch文件
4 用下面的命令来修补
patch -p1 file < patch // 这个命令可以把file进行差异更新
如果要撤销修改直接进行同样的命令即可
3.12 head和tail
1 head命令总是读取输入文件的头部 head file打印文件file的前10行
2 seq命令可以用来快速的生成一个序列 seq 11用来生成1~11的序列
3 tail命令打印文件的最后10行 tail file
3.13 只列出目录的方法
第一种:ls -d */ // 只有上面这种结合-d的用法才能够只打印出目录
第二种:ls -F | grep "/$" // 当使用-F时,所有输出项都会添加上一个代表文件类型的字符
第三种:ls -l | grep "^d" // ls -l输出的每一行,然后利用grep找到第一个字符是d的
第四种:find path -maxdepth 1 -type d -print // find命令指定最大的查找深度还有文件类型
3.14 统计文件的行数,单词数和字符数
1 wc是一个用于统计的工具,它是word count的缩写
2 统计行数: wc -l file
统计单词数: wc -w file
统计字符数: wc -c file
wc file默认打印出文件行数,单词数还有字符数
3 wc file -L可以用来打印出最长行的长度
3.15 打印目录树
1 tree命令是以图形化的树状结构打印文件和目录的主角,通常在Linux的发型版本中并没要该命令
2 tree path // 这个命令可以直接以树形来显示
3 以HTML形式输出目录树
tree path -H http://localhost -o out.html
将http://localhost替换为适合存放输出文件的URL,将path替换为真的路径,然后就可以生成web版的目录树