生成任意大小的文件
dd
if表示输入文件(input file);
of表示输出文件(output file);
bs指定了以字节为单位的块大小(block size);
count表示需要被复制的块数。
$ dd if=/dev/zero of=junk.data bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00767266 s, 137 MB/s
文本文件的交集与差集
comm命令可用于比较两个已排序的文件
交集(intersection):打印出两个文件所共有的行。
求差(difference):打印出指定文件中所包含的互不相同的那些行。
差集(set difference)1:打印出包含在文件A中,但不包含在其他指定文件(例如B和C)中的那些行。
$ sort A.txt -o A.txt ; sort B.txt -o B.txt
(1) 首先执行不带任何选项的comm:
$ comm A.txt B.txt
(2) 为了打印两个文件的交集,我们需要删除前两列,只打印出第三列。-1选项可以删除第 一列,-2选项可以删除第二列,最后留下的就是第三列:
$ comm A.txt B.txt -1 -2
(3) 删除第三列,就可以打印出两个文件中互不相同的那些行:
$ comm A.txt B.txt -3
(4) 可以使用tr(在第2章中讲到过)删除制表符来合并两列:
$ comm A.txt B.txt -3 | tr -d '\t'
(5) 通过删除不需要的列,我们就可以分别得到A.txt和B.txt的差集。
A.txt的差集
$ comm A.txt B.txt -2 -3 -2 -3 删除第二列和第三列。
B.txt的差集
$ comm A.txt B.txt -1 -3 -1 -3 删除第一列和第三列。
comm的命令行选项可以减少输出。
-1:删除第一列。
-2:删除第二列。
-3:删除第三列。
查找并删除重复文件
$ echo "hello" > test ; cp test test_copy1 ; cp test test_copy2; $ echo "next" > other;
# test_copy1和test_copy2都是test文件的副本
# !/bin/bash 11 # 文件名: remove_duplicates.sh
# 用途: 查找并删除重复文件,每一个文件只保留一份
ls -lS --time-style=long-iso | awk 'BEGIN {
getline; getline;
name1=$8; size=$5
}
{
name2=$8;
if (size==$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 > unique_files
echo Removing..
comm duplicate_files unique_files -3 | tee /dev/stderr | \
xargs rm
echo Removed duplicates files successfully.
$ ./remove_duplicates.sh
文件权限、所有权与粘滞位
ls命令的-l选项可以显示出包括文件类型、权限、所有者以及组在内的多方面信息:
-:普通文件。
d:目录。
c:字符设备。
b:块设备。
l:符号链接。
s:套接字。
p:管道。
chmod命令设置文件权限:
$ chmod u=rwx g=rw o=r filename
命令中用到的选项如下。
u:指定用户权限。
g:指定用户组权限。
o:指定其他用户权限。
$ chmod o+x filename
该命令为其他用户添加了x权限。
给所有权限类别(即用户、用户组和其他用户)添加可执行权限:
$ chmod a+x filename
其中,a表示全部(all)。
如果需要删除权限,则使用-,例如:
$ chmod a-x filename
- 更改所有权
$ chown user:group filename
$ chown slynux:users test.sh
在这里,slynux是用户名,users是组名。
- 设置粘滞位
使用chmod的+t选项设置:
$ chmod a+t directory_name
- 以递归方式设置文件权限
$ chmod 777 . -R 选项-R指定以递归的方式修改权限。
用.指定当前工作目录,这等同于: $ chmod 777 "$(pwd)" -R
- 以递归的方式设置所有权
用chown命令的-R能够以递归的方式设置所有权:
$ chown user:group . -R
- 以不同的身份运行可执行文件(setuid)
$ chmod +s executable_file
# chown root:root executable_file # chmod +s executable_file
$ ./executable_file
将文件设置为不可修改
chattr命令可用于更改扩展属性。它能够将文件设置为不可修改,也可以修改其他属性来
调节文件系统同步或压缩率。
(1) 使用chatter将文件设置为不可修改:
# chattr +i file
(2) 现在文件已经无法修改了。来试试下面的命令:
rm file
rm: cannot remove 'file': Operation not permitted
(3) 如果需要使文件恢复可写状态,撤销不可修改属性即可:
chattr -i file
批量生成空白文件
touch命令可以用来生成空白文件或是修改已有文件的时间戳。
(1) 调用touch命令并使用一个不存在的文件名作为参数,创建空白文件:
$ touch filename
(2) 批量生成不同名字的空白文件:
for name in {1..100}.txt
do
touch $name
done
touch -a 只更改文件访问时间。
touch -m 只更改文件修改时间。
除了将时间戳更改为当前时间,我们还能够指定特定的时间和日期:
$ touch -d "Fri Jun 25 20:50:14 IST 1999" filename
查找符号链接及其指向目标
(1) 创建符号链接:
$ ln -s target symbolic_link_name
例如:
$ ln -l -s /var/www/ ~/web 这个命令在当前用户的主目录中创建了一个名为Web的符号链接。该链接指向/var/www。
(2) 使用下面的命令来验证链接是否已建立:
$ ls -l web
lrwxrwxrwx 1 slynux slynux 8 2010-06-25 21:34 web -> /var/www
web -> /var/www表明web指向 /var/www。
(3) 打印出当前目录下的符号链接:
$ ls -l | grep "^l"
(4) 打印出当前目录及其子目录下的符号链接:
$ find . -type l -print
(5) 使用readlink打印出符号链接所指向的目标路径:
$ readlink web
/var/www
枚举文件类型统计信息
(1) 用下面的命令打印文件类型信息:
$ file filename
$ file /etc/passwd
/etc/passwd: ASCII text
(2) 打印不包括文件名在内的文件类型信息:
$ file -b filename
ASCII text
(3) 生成文件统计信息的脚本如下:
# !/bin/bash
# 文件名: filestat.sh
if [ $# -ne 1 ]; then
echo "Usage is $0 basepath";
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
(4) 用法如下:
$ ./filestat.sh /home/slynux/temp
(5) 输出信息如下:
$ ./filetype.sh /home/slynux/programs
============ File types and counts ============= Vim swap file : 1
ELF 32-bit LSB executable : 6
ASCII text : 2
ASCII C program text : 10
本文详细介绍了Linux Shell中关于文件的各种操作,包括如何生成任意大小的文件、使用dd和comm命令处理文本文件的交集与差集、查找并删除重复文件、理解文件权限、所有权与粘滞位、设置文件为不可修改、批量生成空白文件、查找符号链接及其目标以及统计文件类型信息。
1.文件的相关操作&spm=1001.2101.3001.5002&articleId=103060838&d=1&t=3&u=3715108be0c446839cb4c1ccf5998e1e)
2862

被折叠的 条评论
为什么被折叠?



