1.生成任意大小的文件(dd命令)
eg: dd if=/dev/zero of=junk.data bs=2M count=3 //该命令创建一个6M大小的文件junk.data ; if代表输入文件(input file), of代表输出文件(output file),bs代表以字节为单位的块大小(block size),count代表需要被复制的块数。
注意:使用 dd命令一定要留意,该命令运行在设备底层。出问题搞不好会把磁盘清空或是损坏数据。所以使用时一定要反复检查语法是否正确,尤其是参数of= ;
块大小的其他计量单位( 字节(1B)= c ; 字(2B)=w ; 块(512B)=b ; 千字节(1024B)=k ; 兆字节(1024KB)=M;吉字节(1024MB)=G )
/dev/zero是一个字符设备,它会不断返回0值字节(\0)。 如果不指定输入参数(if),默认情况下dd会从stdin中读取输入。类似,如果不指定输出参数(of),则dd会将stdout作为默认输出。
也可以用dd命令传输大量数据并观察命令输出测试内存的操作速度。
2.文本文件的交集与差集 (comm命令)
----comm必须使用排过序的文件作为输入。(sort A.txt -o A.txt; sort B.txt -o B.txt )
交集:打印出两个文件的所共有的行。
求差: 打印出指定文件所包含的且互不相同的那些行
差集:打印出包含在A中,但不包括在其他指定文件中的那些行。
eg:comm A.txt B.txt //全部输出;(输出的第一列只包含在A中出现的行;第二列只在B.txt中出现的行;第三列包含A.txt和B.txt中相同的行。各列以制表符(\t)作为界定符。)
eg: comm A.txt B.txt -1 -2 //打印出交集(删除第一列和第二列,只打印第三列)
eg: comm A.txt B.txt -3 | sed 's/^\t//' //打印出两个文件中不相同的行,并去掉行首的制表符(\t).
原理:comm的命令行选项可以按照需求对输出进行格式化;-1从输出中删除第一列;-2从输出中删除第二列;-3从输出中删除第三列。
3.文件权限,所有权和粘滞位
用户(user)是文件的所有者。
用户组(group)是多个用户的集合(由系统管理员指定),系统允许这些用户对文件进行某种形式的访问。
其他用户(others)是除文件用户或用户组之外的任何人。
粘滞位(sticky bit):目录才有的一个特殊的权限,如果设置了粘滞位,只有创建该目录的用户才能删除目录中的文件,即使用户组和其他用户也有写权限,也无能为力。粘滞位出现在其他用户权限中的执行权限位置。使用t或T表示,如果没有设置执行权限,但设置了粘滞位,就是用t;如果同时设置了执行权限和粘滞位,就是用T。
用户还有一个称为setuid(S)的特殊权限,它出现在执行权限(x)的位置。setuid权限允许用户以其他拥有者的权限来执行可执行文件,即使用这个可执行文件是由其他用户运行的。具有setuid权限的文件的权限序列如下:-rwS------。
eg: chmod a+x filename //给所有权限类别增加可执行权限
eg:chown nagios.nagios test.c //更改所有权(将文件test.c的用户和用户组改成nagios ) 格式:chown user.group filename
eg: chmod a+t directory_name // 设置粘滞位
eg: chmod 777 . -R //以递归的方式设置权限,修改当前目录下的所有文件和子目录的权限(等价于:chmod 777 "$(pwd)" -R )
eg: chown user.group . -R //以递归的方式设置所有权
以不同的身份运行可执行文件
(首先将文件的所有权替换为需要执行该文件的用户,然后以该用户的身份登录。)
$ chmod +s executable_file
# chown root.root executable_file
# chmod +s executable_file //设置setuid的特殊权限
$ ./executable_file
(现在这个文件实际上每次都以root用户的身份来执行) setuid的使用不是无限制的。为了确保安全,它只能应用在linux ELF格式二进制文件上,而不用于脚本文件。
4.创建不可修改的文件(chattr命令)
eg: chattr +i file //将文件设置为不可修改(一旦设置,任何用户,包括超级用户都不能删除该文件,除非其不可修改的属性被移除)
eg: chattr -i file //移除不可修改属性
5.批量生成空白文件
touch命令可以用来生成空白文件或是修改文件的时间戳(如果文件已经存在)。
touch -a filename:只更改文件的访问时间
touch -m filename:只更改文件内容修改时间
touch -d “Sun Jun 14 12:42:08 CST 2015” filename //指定特定时间和日期为时间戳
-------------------------
eg:批量生成不同名字的空白文件
for name in {1..100}.txt
do
touch $name
done
-----------------------
6.列举文件类型统计信息
eg: file test.c //打印文件类型信息(test.c: ASCII text )
eg: file -b test.c //打印不包括文件名在内的文件类型信息(ASCII text )
----------------------
eg:生成文件统计信息的脚本(目前还有错误)
#!/bin/bash
# filename: filesstat.sh
if [ $# -ne 1 ];
then
echo "Usage is $0 bashepath";
exit
fi
path=$1
declare -A statarray;
while read line;
do
ftype='file -b $line | cut -d, -f1'
let statarray["$ftype"]++;
done < <( find $path -type f -print )
echo ===========File types and counts==========
for ftype in "${!statarray[@]}";
do
echo $ftype : ${statarray["$ftype"]}
done
----------------------------------------------
6.环回文件
环回文件系统是指那些在文件中而非物理设备中创建的文件系统。
--------------------------------
eg:如何在大小为1GB的文件中创建ext4文件系统
$ dd if=/dev/zero of=loopbackfile.img bs=1G count=1 //创建1G大小的文件
$ mkfs.ext4 loopbackfile.img //用mkfs命令将1GB的文件格式化成ext4文件系统
$ file loopbackfile.img //使用下面的命令检查文件系统
$ mount -o loop loopbackfile.img /mnt/loopback //挂载环回文件(-o loop 用来挂载环回文件系统);这实际是一种快捷的挂载方法,我们无需手动连接设备,但是在内部,这个环回文件连接到了一个名为/dev/loop1或loop2的设备上。(手动操作:命令一: losetup /dev/loop1 loopbackfile.img 命令二:mount /dev/loop1 /mnt/loopback )
$ umount /mnt/loopback //卸载挂载
7.ISO文件及混合ISO
7.1 从/dev/cdrom创建一个ISO镜像
cat /dev/cdrom >image.iso //从/dev/cdrom创建一个ISO镜像,尽管可以奏效,最好使用dd工具,如下
dd if=/dev/cdrom of=image.iso
7.2将整个文件夹写入ISO文件
mkisofs -V "Label" -o image.iso source_dir/ //mkisofs命令用于创建ISO文件系统(用这个命令将整个目录的内容写入一个ISO文件)
7.3生成可以引导的混合ISO文件
eg:能够启动闪存或硬盘的混合ISO文件
# isohybrid image.iso //获得一个名为image.iso的混合ISO,它可用于写入USB存储设备。(isohybrid是一个比较新的工具,你可以从 http://syslinux.zytor.com下载syslinux软件包。)
# dd if=image.iso of=/dev/sdb1 //将用isohybrid生成的混合ISO文件写入USB存储设备
7.4将ISO文件刻录到CD-ROM或DVD-ROM
cdrecord -v dev=/dev/cdrom image.iso
8.查找文件差异并进行修补
修补文件(patch file):只包含那些被修改过,添加或删除的行以及行号。
diff 命令生成差异文件(-u选项用于生成一体化输出。因为一体化输出的可读性更好,便于看出两个文件之间的差异)
diff -u version1.txt version2.txt > version.patch //生成差异文件version.patch
patch -p1 version1.txt < version.patch //修补version1.txt (现在version1.txt内容和version2.txt内容一模一样)
如下撤消修改:在执行一遍上面的命令,则又恢复到之前的状态。
8.2生成目录的差异信息
diff -Naur directory1 directory2 (-N :将缺失的文件视为空文件。 -a :将所有文件视为文本文件。 -u:生成一体化输出。 -r:遍历目录下的所有文件。)
9.使用head和tail打印文件的前10行和后10行
9.1 head命令
eg: head file //打印前10行
eg:cat text | head
eg: head -n 4 file //打印文件前4行
eg:head -n -M file //打印最后M行之外的所有的行 (-M表示一个负数,而不是选项)
9.2 tail命令
eg: tail file //打印文件的最后10行
eg:cat txt | tail
eg: tail -n 5 file //打印文件的最后5行
eg: tail -n +(M+1) file //打印除前M行之外的所有行,即M+1行到最后
eg: tail -f growing_file //打印最后10行最新的数据
10.只列出目录的各种方法
eg: ls -d */
eg: ls -F | grep "/$"
eg: ls -l | grep "^d"
eg: find . type d -maxdepth 1 -print
11.统计文件的行数,单词数和字符数
eg:wc -l file //统计行(cat file | wc -l )
eg: wc -w file //统计单词数
eg:wc -c file //统计字符数
eg:wc file -L //打印文件中最长的一行的长度
12.打印目录树
tree命令可以以图形化的树状结构打印文件和目录。 (在linux发行版本中通常并没有包含这个命令。)
eg: tree path
eg:tree path -P PATTERN //重点标记处匹配某种样式的文件
eg: tree path -I PATTERN //重点标记出除符合某种样式之外的那些文件
eg: tree -h //打印出文件和目录的大小
eg:以HTML形式输出目录树
tree path -H http://www.xiebo.com
-o xb.html