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等等,都给出来作者挑选 ...
随机推荐
- muduo库安装
一.简介 Muduo(木铎)是基于 Reactor 模式的网络库. 二.安装 从github库下载源码安装:https://github.com/chenshuo/muduo muduo依赖了很多的库 ...
- 403.14-Forbidden Web 服务器被配置为不列出此目录的内容及Login on failed for "IIS APPPOOL\ASP.NET v4.0"问题
问题1: 发布mvc3报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容 折腾了半天,提示里面的解决方法是: 如果不希望启用目录浏览,请确保配置了默认文档并且该文件存在. ...
- eclipse字体推荐
首先大家可以看看这里面推荐的最佳十款字体,http://www.iteye.com/news/11102-10-great-programming-font 但是经过测试发现,排名第一的字体在ecli ...
- java Web应用配置log4j日志记录
公司启动全国支票影像系统,有这样一个功能是和消息中间件打交道,需要记录每一个报文出错情况,因为方便后期开发人员的调试,我选用了log4j作为日志记录,好了废话不多说了! 第一步:首先建立一个WEB工程 ...
- 解决点击状态栏时ScrollView自动滚动到初始位置失效办法
http://www.cocoachina.com/ios/20150807/12949.html 取消点击状态栏scrollView会自动滚动到初始位置的功能 _scrollView.scrolls ...
- C#开发COM组件
1.每个COM组件所有对外公布的方法都必须通过接口形式实现: 2.由于.Net下编译的COM组件并等同于C编译的COM组件,所以存在必须在运行目标机器注册的情况,对此.Net下编译的COM组件必须为程 ...
- serialVersionUID
serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性. 有两种生成方式: 一个是默认的1L,比如:private static final l ...
- 遇到问题-----JS中设置window.location.href跳转无效(在a标签里或这form表单里)
问题情况 JS中设置window.location.href跳转无效 代码如下: ? 1 2 3 4 5 6 7 8 <script type="text/javascript&quo ...
- php中一个"异类"语法: $a && $b = $c;
php中一个"异类"语法: $a && $b = $c; $a = 1;$b = 2;$c = 3;$a && $b = $c;echo & ...
- MySQL SELECT语句
说明:MySQL的offset第一行是0 位置指的是在SELECT语句中第几个出现的字段,如:1,则代表用第一个出现的字段来分组. SELECT语句: SELECT select_expr1 [,s ...