Linux文件相关操作

《LinuxShell脚本攻略》笔记,Chap-3:以文件之名



简介

Unix将操作系统中的一切都视为文件。


生成任意大小的文件

由于各种原因,可能需要生成一个包含随机数据的文件。

#dd命令会克隆给定的输入内容,然后将一模一样的副本写到输出
#如果不指定if,dd会从stdin中读取输入;如果不指定of,dd会输出到stdout
#/dev/zero是一个字符设备,它会不断返回0值字节(\0)
dd if=/dev/zero of=junk.data bs=1M count=1


文本文件的交集与差集

#comm命令用于两个文件之间的比较
#交集(intersection),差集(set difference), 求差
#comm必须使用排过序的文件作为输入

echo -e "1\n2\n3" > A.txt && echo -e "3\n2\n3" > B.txt
sort -n A.txt -o A.txt && sort -n B.txt -o B.txt
comm A.txt B.txt
#输出第一列为A独有,第二列为B独有,第三列为交集

comm A.txt B.txt -1 -2
#-1从输出中删除第一列,-2删除第二列,-3删除第三列


查找并删除重复文件

#重复文件指的是那些虽然名字不同但内容却一模一样的文件
ls -lS  #以文件大小排序,识别大小相等的文件
md5sum  #接下来计算这些文件的校验和


创建长路径目录

mkdir -p /home/zhang/1/22/333 2>/dev/null


文件权限、所有权和粘滞位

#用户(user),用户组(group),其他用户(other)
ll ./*
#d目录,c字符设备,b块设备,l符号链接,s套接字,p管道,-普通文件

#用户还有一个称为setuid(S)的特殊权限,它出现在用户的x位置
#setuid权限允许用户以其拥有者的权限来执行可执行文件,即便这个文件是由其他用户运行的
-rwSrw-r--

#组也拥有一个setgid(S)权限,它出现在组的x位置
#它允许以同该目录拥有者所在组相同的有效组权限来运行可执行文件
-rwxrwSr--

#目录有一个特殊权限,叫做粘滞位(sticky bit)(T或t),出现在其他用户的x位置
#当一个目录设置了粘滞位,只有创建该目录的用户才能删除目录中的文件,即便group和other有w权限
-rwxr--rwT

chmod u=rwx g=rw o=r file1
chmod u+x g-w file2
chmod 744 file3

chmod a+x . -R  #以递归方式设置权限
chown user.group . -R   #以递归方式设置所有权

chmod a+t dir1  #设置粘滞位

chmod +s fiel4
chown root.root file4
chmod +s file4
./file4 #每次file4都是以root运行

#setuid的使用不是无限制的,它只能应用在Linux ELF格式二进制,而不能用于脚本文件。


创建不可修改文件

#不可修改(immutable),是保护文件不被修改的安全手段之一。
#一旦文件被设置为不可修改,任何用户(包括root)都不能修改,除非将其不可修改属性移除

chattr  #修改文件在Linux第二扩展文件系统(E2fs)上的特有属性
chattr +i file1 #这样就无法删除file1
chattr -i file1


批量生成空白文件

#touch命令可用来生成空白文件,如果文件存在,则可以用它修改文件的时间戳
for name in {1..100}.txt;do
touch $name
done

touch -a/-m #更改文件访问/修改时间
touch -d "Thu Oct 31 14:20:13 CST 2017" file1   #指定特定时间戳


查找符号链接及其指向目标

#符号链接(软链接)只不过是指向其他文件的指针
ln -s /usr/bin /bin
ls -l / | grep "^l"
find / -maxdepth 1 -type l

readlink /bin   #找出链接目标


列举文件类型统计信息

#在Unix/Linux系统中,文件类型并不是由文件扩展名决定的
file /etc/passwd
file -b /etc/passwd


环回文件与挂载

#环回文件系统是指那些在文件中而非物理设备中创建的文件系统
dd if=/dev/zero of=loopback.file bs=1G count=1
mkfs.ext4 loopback.file
mount -o loop loopback.file /mnt/loopback   #-o loop来挂载环回文件
df -h
umount /mnt/loopback

#将ISO文件作为环回文件挂载
mount -o loop linux.iso /mnt/iso


生成ISO文件以及混合ISO

#可引导光盘自身具备引导能力,也可以运行操作系统或其他软件。不可引导光盘则做不到这些。
cat /dev/cdrom  > /dev/sdc  #sdc指U盘
dd if=/dev/cdrom of=/dev/sdc    #将ISO写入usb存储设备
mkisofs -V "Label" -o /dev/sdc /dev/cdrom

cdrecord -v dev=/dev/cdrom image.iso


查找文件差异并进行修补

#补丁文件(patch file)
#diff命令可以生成差异文件
diff -u file1 file2 #一体化形式输出
diff -u file1 file2 > diff.patch
patch -p1 file1 < diff.patch    #得到file2
patch -p1 file2 < diff.patch    #得到file1
patch -R file1 < diff.patch; patch -R file2 < diff.patch    #还原

#diff也能够以递归的形式作用于目录,它对目录中所有内容生成差异输出
diff -Naur dir1 dir2
#-N将所有确实文件视为空文件, -a将所有文件视为文本文件
#-u生成一体化输出, -r遍历目录下所有文件


head与tail

head file1; tail file1  #head与tail默认打印10行
head -n 5 file1; tail -n 6 file1    #指定行数
head -n -5 file1    #打印除了最后5行外所有行
tail -n +(5+1) file1    #打印除了开始5行外所有行

tail -f /var/log/nginx/access.log   #--follow,动态关注文件


只列出目录的其他方法

ls -d .
ls -l . | grep "^d"
ls -F . | grep "/$"
find . -maxdepth 1 -type d


pushd和popd

#在命令行中使用pushd和popd快速定位,pushd和popd以栈的方式运作
#当没有鼠标时,复制粘贴就不怎么实用了
#pushd和popd可以用于在多个目录之间进行切换而无需复制并粘贴目录路径

pushd /home/user1; pushd /home/user2; pushd /home/user3 #将路径添加到栈
pushd +2    #切换到/home/user3

popd    #移除最近添加入栈的目录

cd /root; cd /home/user
cd -    #回到上次的目录
cd ..   #切换到上一级目录
cd ~    #切换到用户主目录


统计文件的行数、单词数、字符数

#wc(word count),是一个统计工具
wc -l file1 #统计行数
wc -w file1 #统计单词数
wc -c file  #统计字符数
wc -L file  #打印最长行长度
wc file1    #行、单词、字符数


目录树

#tree命令是以图形化的树状结构打印文件和目录,在Linux发行版中默认未安装
yum install -y tree
tree /home/zhang
tree /home/zhang -P "*.sh"  #只标记出.sh文件
tree /home/zhang -I "*.sh"  #标记出除.sh文件外所有文件
tree /home/zhang -h #显示大小

tree /home/zhang -H http://localhost -o tree.html   #以html形式输出目录树
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容