LinuxShell脚本攻略--第三章 以文件之名
生成任意大小的文件
文件权限、所有权和粘滞位
创建不可修改文件
生成空白文件
查找符号链接及其指向目标
head 与 tail
只列出目录的其他方法
在命令行中用 pushd 和 popd 快速定位(cd -)
统计文件的行数、单词数和字符数
生成任意大小的文件
$ dd if=/dev/zero of=junk.data bs=1M count=
if代码输入文件(input file), of代表输出文件(output file),bs代表每个文件的大小(block size),count代表需要被复制的块数。
/dev/zero是一个字符设备,它会不断的放回0值字节(\0)。if也可以指定自己的其他文件。
文件权限、所有权和粘滞位
linux系统中每一个文件都与多种类型的权限相关联。这些权限中,我们通常要和三类权限打交道(用户,用户组,其他用户)。用户(user)是文件的所有者。用户组(group)是多个用户的集合(由系统管理员指定),系统允许这些用户对文件进行某种形式的访问。其他用户(others)是除文件用户或用户组之外的任何人。
用命令ls -l查看文件
-rwxrwxr-x 1 fzk fzk 311 12月 6 20:35 test.sh
第一列说明了文件的类型:
- —— 普通文件
d —— 目录
c —— 字符设备
b —— 块设备
l —— 符号链接
s —— 套接字
p —— 管道
剩下的部分可以分为三组,每组三个字符(--- --- ---)。第一组的3个字符(---)对应用户权限(所有者),第二组对应用户组权限,第三组对应其他用户权限。这9个字符(即9个权限)中的每一个字符指明是否其设置了某种权限。如果已设置,对应位置上会出现一个字符,否则出现一个 '-', 表明没有设置对应的权限。
用户(权限序列: rwx------ ):第一个字符指定用户是否拥有文件的读权限。如果为用户设置了读权限, r 将出现在第一个字符的位置上。第二个字符指定了写(修改)权限( w ),第三个字符指定了用户是否拥有执行权限( x ,即运行该文件的权限)。可执行文件通常会设置执行权限。用户还有一个称为 setuid ( S )的特殊权限,它出现在执行权限( x )的位置。 setuid 权限允许用户以其拥有者的权限来执行可执行文件,即使这个可执行文件是由其他用户运行的。具有 setuid 权限的文件的权限序列如下: -rwS------ 。目录同样也有读、写、执行权限。不过对于目录来说,读、写、执行权限的含义有点不一样:目录的读权限( r )允许读取目录中文件和子目录的列表;目录的写权限( w )允许在目录中创建或删除文件或目录;目录的执行权限( x )指明是否可以访问目录中的文件和子目录。
用户组(权限序列: ---rwx--- ):第二组字符指定了组权限。组权限的 rwx 的含义和用户权限中的一样。组权限并没有 setuid ,但是有一个 setgid ( S )位。它允许以同该目录拥有者所在组相同的有效组权限来允许可执行文件。但是这个组和实际发起命令的用户组未必相同。组权限的权限序列如下: ----rwS--- 。
其他用户(权限序列: ------rwx ):最后三个字符是其他用户权限。和用户以及用户组一样,其他用户也有读、写、执行权限,但是并没有 S 权限(如 setuid 和 setgid )。
目录有一个特殊的权限,叫做粘滞位(sticky bit)。如果目录设置了粘滞位,只有创建该目录的用户才能删除目录中的文件,即使用户组和其他用户也有写权限,也无能无力。粘滞位出现在其他用户权限中的执行权限( x )位置。它使用 t 或 T 来表示。如果没有设置执行权限,但设置了粘滞位,就使用 t ;如果同时设置了执行权限和粘滞位,就使用 T 。
例如: ------rwt , ------rwT
$ chmod u=rwx g=rw o=r filename #u代表user g代表group o代表other
$ chmod o+x filename #增加用户执行权限
$ chmod a+x filename #a代码所有
$ chmod a-x filename #删除用户执行权限
$ chmod a+x dir -R #dir是目录名,连同子目录下的文件全部增加执行权限。-R在后面
也可用八进制来设置权限。
- r-- = 4
- -w- = 2
- --x = 1
想设置什么权限就把相应的权限对应的数字加和。
chmod u=rwx g=rw o=r filename 和 chmod 764 filename 一个效果
更改所有权
$ chown user.group filename
$ chown fzk.fzk test.sh
创建不可修改的文件
$ chattr +i file #设置不可修改
$ chattr -i file #取消不可修改
这样设置完之后就算执行 sudo rm -f file也不能删除
生成空白文件:touch filename
创建链接
$ ln -s target symbolic_link_name
$ ls -l | grep "^l" #查看符号链接
$ find . -type l -print
$ readlink web #查看链接的目标路径
上面中的grep 对ls -l的输出进行过滤,^显示以 l 起始的行,^是字符串的起始标记。也就是每个符号链接的权限(lrwxrwxrwx)都是l开头。
查看文件头几行,后几行(head tail)
$ head file #前10行
$ cat text | head #从stdin读取数据前10行
$ head -n file #读取前4行
$ head -n - file #打印除了最后5行之外的其他行
$ seq | head -n - #seq 能生成1 -
$ tail file #打印最后10行
$ cat text | tail
$ tail -n file #打印最后5行
$ tail -n +(M+) #打印除了前M行之外的所有行
$ tail -f growing_file #能随着数据的增长保持更新
$ tail -f file --pid $PID #PID的进程一直向file中写数据,如果PID结束,那么tail也结束。
tail -f 后也可以跟一个 -s 参数,指定多少秒跟新一次。
只列出目录的各种方法
$ ls -d */
$ ls -F | grep "/$"
$ ls -l | grep "^d"
$ find . -type d -maxdepth -print
目录间快速切换:
$ pushd /var/www #将路径压入栈
$ dirs #查看栈中目录
/usr/src /var/www ~ /usr/share /etc
$ pushd +n #将上面目录从左到右从0开始编号,切换到第n个目录
$ pop #从栈中删除最后一个目录
$ pop +n #删除第n个目录
$ cd - #上个目录之间进行切换,如果只有两个目录,这个方法非常方便
统计文件的行数、单词数和字符数(wc (word count))
$ wc -l file #打印行数
7 file
$ cat file | wc -l
7
$ wc -c file #-w 单次数
$ cat file | wc -w
$ wc -c file #-c 字符数
$ cat file | wc -c
$ wc file #分别打印出行数,单词数,字符数(1435 15763 112200)
$ wc -L #最长的一行长度
LinuxShell脚本攻略--第三章 以文件之名的更多相关文章
- LinuxShell脚本攻略--第六章 B计划
tar -A或--catenate:新增文件到以存在的备份文件: -B:设置区块大小: -c或--create:建立新的备份文件: -C <目录>:这个选项用在解压缩,若要在特定目录解压缩 ...
- Linux shell 脚本攻略之创建不可修改文件
摘自:<Linux shell 脚本攻略>
- LinuxShell脚本攻略--第一章 小试牛刀
使用 shell 进行数学运算: #!/bin/bash no1=; no2=; let result=no1+no2 echo $result result=$[ $no1 + no2 ] resu ...
- LinuxShell脚本攻略--第二章 命令之乐
用 cat 进行拼接 文件查找与文件列表玩转 xargs 用 tr 进行转换排序临时文件命名与随机数分割文件和数据根据扩展名切分文件名mv 批量重命名文件交互输入自动化 cat: echo 'Text ...
- LinuxShell脚本攻略--第九章 管理重任
收集进程信息 $ ps PID TTY TIME CMD pts/ :: bash pts/ :: ps$ ps -f #-f 显示更详细的信息UID PID PPID C STIME TTY TI ...
- LinuxShell脚本攻略--第八章 当个好管家
监视磁盘的使用情况 $ du file1.txt file2.txt $ du -a file_or_dir #-a递归输出指定目录的所有文件统计 $ du file_or_dir #这只是显示子目录 ...
- shell 学习笔记 LinuxShell脚本攻略(第2版)
注释用#号:多条命令通过分号或回车来分隔 echo会自动换行,若不想换行,则加上-n参数,如 echo -n "nice to meet you" echo后面的内容可以不带引号, ...
- Linux Shell脚本攻略
-Linux Shell脚本攻略 总结的来说,这本书很实践性和实用性强,都是给的具体的例子,直接可以在终端操作实践,比单纯只看不动手务实多了,另外就是,这本书涵盖的内容也比较广,从文本操作到服务器管理 ...
- 读书笔记--Linux Shell脚本攻略
总结的来说,这本书很实践性和实用性强,都是给的具体的例子,直接可以在终端操作实践,比单纯只看不动手务实多了,另外就是,这本书涵盖的内容也比较广,从文本操作到服务器管理到远程ssh等等,都给出来作者挑选 ...
随机推荐
- /etc/ld.so.conf 介绍
/etc/ld.so.conf 这个文件记录了编译时使用的动态链接库的路径,告诉链接器去哪个路径下寻找链接时需要用到的库,如果找不到,就会提示链接错误. 如果我们安装了第三方的库,而没有将它放在链接器 ...
- java网页抓取
网页抓取就是,我们想要从别人的网站上得到我们想要的,也算是窃取了,有的网站就对这个网页抓取就做了限制,比如百度 直接进入正题 //要抓取的网页地址 String urlStr = "http ...
- cvs版本控制器
CVS 版本控制器 首先我们要来明确 :为什么要学习CVS •项目开发靠的是一个团队的能力,很少有大中型项目是由个人完成的.对于团队开发来讲---能控制每个人的分工和权限, 可以让多个人同时编辑同 ...
- CentOS6.6系统源代码安装mysql5.5.28教程(附源码包下载地址)+sysbench的安装
mysql从5.5版本开始,不再使用./configure编译,而是使用cmake编译器,具体的cmake编译参数可以参考mysql官网文档(※ 非常重要) http://dev.mysql.com/ ...
- .Net操作音频
请选中您要保存的内容,粘贴到此文本框 此项目需求是针对.wav格式音频进行操作,转换成相应的.mp3格式的音频文件,对音频进行切割,最后以需求的形式输出,此篇会回顾运用到的一些知识点. 1.MDI子窗 ...
- 利用jdbc处理oracle大数据---大文件和二进制文件
一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...
- UVA 10817 十一 Headmaster's Headache
Headmaster's Headache Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Sub ...
- (转)C# Winform应用程序占用内存较大解决方法整理
背景: 微软的 .NET FRAMEWORK 现在可谓如火如荼了.但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存在困扰 ...
- django-crontab定时任务
django-crontab实现定时任务 1 django-crontab安装 django-crontab安装: django-crontab加入:只需要将INSTALLED_APPS即可.如下代码 ...
- 哈理工软件学院"兆方美迪"杯第六届程序设计大赛【高年级组】--决赛 题解
比赛链接:http://acm-software.hrbust.edu.cn/contest.php?cid=1082 A.好SB啊真是,还以为lis-数有多少个数不一样. #include < ...