# dd 命令
dd if=/dev/zero of=junk.data bs=1M count=1
##参数介绍
if(input file): 输入源,默认为stdin, /dev/zero一直输出 0
of(output file): 输出文件,默认为stdout
bs:文件块大小
b 块(512B)
c 字节(1B)
w 字(2B)
count: 文件块数量
# comm 命令
# 不做介绍
@!/bin/bash
#fileName: DeleteRepeatFile.sh
# 创建测试文件
echo "hello" > testFile.data;
cp testFile.data testFile1.data
cp testFile.data testFile2.data
echo "other" > testFile.other
# 删除重复文件操作
ls -lS | awk 'BEGIN {
getline;
getline;
name1=$8;
size1=$5;
}
{
name2=$8;
if (size1 == $5){
"md5sum "name1 | getline; csum1=$1;
"md5sum "name2 | getline; csum2=$1;
if(csum1 == csum2){
print name1;
print name2;
}
}
size=$5; name1=name2;
}' | sort -u > duplicate_files
cat duplicate_files | xargs -I { } md5sum | sort | uniq -w 32 | awk '{print "^"$2"$"}' | sort -u >duplicate_sample
echo Removing duplicate files.....
comm duplicate_files duplicate_sample -2 -3 | tee /dev/stderr |xargs
rm
echo remove success
创建 /home/slynux/test/hello/child
# 方法一
mkdir /home/slynux 2>/dev/null
mkdir /home/slynux/test 2>/dev/null
....
mkdir /home/slynux/test/hello/child 2>/dev/null
# 方法二
mkdir -p /home/slynux/test/hello/child
使用 ls -l 命令可以列出文件权限
查看输出结果的每一行的前10个字符:
第一个字符表示文件的类型,包括:
d 目录
- 普通文件
l 符号链接
p 管道
后面每三个字符为一组分为三组:
第一组表示用户权限
第二组表示用户所在的组中用户权限
第三组表示其他用户的权限
权限分为三种:可读r 可写w 可执行x (如果没有对应权限,显示为 - )
详情参照LinuxShell预热
使用 chmod 命令改变文件权限
chmod u=rwx g=rw o=r fileName
u 对应 user权限
g 对应 用户组权限
o 对应 其他用户权限
#可以使用 - + 对权限进行添加删除
chmod o-x filename
chmod a-x filename #a 表示所有用户的权限
#递归方式改变目录下所有的文件权限
chmod a+x dirpath -R
使用 chown 命令改变文件权限
chown usergroup.username filename
粘滞位是应用于目录权限类型。设置了粘滞位的目录,只有目录文件的所有者才能删除目录中的文件。其他用户即使拥有足够的权限也不能执行删除操作
chmod a+t filename
使用 chattr 命令改变文件权限
# 将文件设置为不可修改
chattr +i filename
# 将文件设置为可修改
chattr -i filename
使用 touch 命令生成空白文件,当文件存在时,改变文件的修改时间戳
#创建新的文件
touch filename
# touch 命令可以修改文件的相关时间戳
touch -a 只修改文件的访问时间戳
touch -m 只修改文件的修改时间戳
使用命令 ln 可以创建链接文件
# 命令模板
ln -s srcfile dstlinkfile
环回文件:将文件作为存储设备挂载到文件系统中,访问对应的设备就是访问文件中内容,这样的文件称之为 环回文件
比如,将iso光盘文件挂载到文件系统中,即可访问iso文件中的内容,无序像windows一样需要使用虚拟光驱软件进行加载
使用命令 dd
# 创建大小为1G的文件
dd if=/dev/zero of=loopbackfile.img bs=10MB count=1
# 参数
if 输入文件
of 输出文件
bs 块大小
count 块个数
块大小和块个数共同决定了创建的文件的大小
使用命令mkfs格式化文件
# mkfs.ext4 filename
mkfs.ext4 loopbackfile.img
使用命令file检查文件类型
# file filename
file loopbackfile.img
使用命令mount挂载文件
# 创建目录
sudo mkdir /mnt/loopback
# 进行挂载
mount -o loop loopbackfile.img /mnt/loopback
对于一个文件有多个版本时,对不同版本进行比较就比较重要了。比如文件有10000行,人工比较几乎是不可能的。相较于不同的文件,同一文件的不同版本之间的差异比较小,彼此之间可以通过差异文件(只记录不同部分的信息 => patch file)来相互转换
命令diff可以获取文件的差异信息
diff -u file1 file2
# 参数 -u 使输出更加
# diff 命令同样适用于比较目录文件
diff -Naur dir1 dir2
# 通过重定向可以将patch信息输出到文件
diff -u file1 file2 > diff.patch
命令patch可以
# 应用patch信息
patch -pl file1 < diff.patch
# 得到file2
# 两次进行pathc 文件不会更改 (负负得正)
patch -pl file1 < diff.patch # 得到file2
patch -pl file1 < diff.patch # 得到file1
使用head命令可以只打印文件的前部几行的内容
# 打印文件前十行内容
head filename
# 指定打印的行数
head -n 5 filename
# 打印除了最后N行之外的内容
head -n -N filename
# 参数 -N 为负数
使用tail命令可以只打印文件的尾部几行的内容
# 打印文件后十行内容
tial filename
# 指定打印的行数
tial -n 5 filename
# 打印除了前N行之外的内容
tail -n -N filename
# 参数 -N 为负数
tail更常用做读取不断更新的文件,上文所描述的命令在执行后会马上退出。tail命令使用 -f 参数指定 可以一直将文件更新的内容显示出来
假设有进程foo在一段时间内不断对filename进行追加内容
$pid = $(pidof foo)
tail -f filename --pid $pid
# 当进程foo结束后 tail命令也会跟着结束
wc(world count)是一个统计命令,可以用来统计文件的行数 单词数 字符数
wc -l filename
# 可以使用stdin作为输入源
cat filename | wc -l
wc -w filename
# 可以使用stdin作为输入源
cat filename | wc -w
wc -c filename
# 可以使用stdin作为输入源
cat filename | wc -c
当不使用任何参数时,wc将打印所有的统计信息
使用wc filename -L
将打印文件中最长的行的长度
-d 表名只是输出目录文件
*/ 是正则匹配,即匹配以‘/’结尾的目录文件
使用参数 -F 时, ls命令的输出会在文件名之后添加特殊符号表示文件类型,比如” / @ * “。然后通过 管道 将ls命令的输出输入到grep命令中,grep进行正则表达式的匹配,将成功匹配的进行输出
使用参数 -l 时, ls命令的输出的每一样第一个字符表示文件类型,字符d表示该文件的文件类型是目录,。然后通过管道将ls命令的输出输入到grep命令中,grep进行正则表达式的匹配,将成功匹配的进行输出
-type d 指定文件类型为目录, -maxdepth 1表示仅在当前目录下查找目录文件
使用tree命令,可以打印出目录的结构
可能centos上没有预装tree命令
# 安装命令
yum insrtall tree
# 使用命令
tree dirpath
# 只标记匹配的文件
tree dirpath -p pattern
# 不标记匹配的文件
tree dirpath -I pattern
# 同时打印出文件的大小
tree -h dirpath
# 以 HTML形式输出
tree . -H ../var/www -o treeresult.html
## 如果你安装了apace服务器,可以访问 IP/treeresult.html 查看输出结果
## 或者使用vim查看输出文件内容
在涉及多个目录的操作时,频繁的使用cd命令,会让人很恼火。此时,有命令popd和pushd可以提供快速切换工作目录的操作
pushd popd命令以堆栈的数据结构对工作目录尽行操作
使用命令pushd将路径压入堆栈
# pushd dir
pushd /var/www
## 将路径压入
使用命令dirs查看目录堆栈内容
dirs
# shuchu
/var/www /etc /root
0 1 2
# 需要更换工作目录时,使用pushd命令
pushd +1
## 工作目录将切换到 /etc 目录
使用命令popd移除堆栈top目录,并切换到下一目录(新的top目录)
# 命令格式
popd
popd pushd 命令适合在多个
当在两个工作目录之间切换时,使用命令 cd -
更加合适