写在最前
通过上一周对计算机系统、Linux发展的学习,我们认识到了Linux是一个一切皆文件的内核系统。那么怎样去操作系统上的各文件来达到你想要的目的呢?今天的总结就是帮助我们更快的达成目标。
文件管理类命令的分类
对于这类命令主要分为两类:
操作类:touch、cp、mv
查看类:cat、tac、head、tail、less、more
touch
功能描述:创建新的空文件或更改文件的时间戳。
语 法:touch [OPTION]… FILE…
选 项:
- -c:指定的文件路径不存在时不予创建;
- -a:仅修改access time;
- -m:仅修改modify time;
- -t [[CC]YY]MMDDhhmm[.ss],其后跟上指定的时间;
实 例:
通过使用touch命令修改访问时间:touch -a -t 1712141414.14 linux.txt
得到如下结果:
扩 展:细心的你可能会发现上面截图中有一个stat命令,那么stat命令输出的都是什么文件的什么信息呢?其实文件主要由两类数据组成:元数据和数据,元数据主要是用于描述文件的属性信息,使用stat命令显示的全部是文件的元数据,而数据信息则是文件的具体内容数据,可以通过上述命令中的cat查看。上图所显示的信息中:
- File:当前文件的文件名;
- Size:当前文件的文件大小;
- Device:存储在那个设备上;
- Inode:文件的Inode号码;
- Linkes:文件当前的链接数;
- Access:访问权限;
- Uid:属主ID号码;
- Gid:属组ID号码;
- Access time:最近一次文件的访问时间;
- Modify time:最近一次文件的内容被修改时间;
- Change time:最近一次文件的状态被改变的时间;
cp
功能描述:复制文件或目录。
语 法:cp [OPTION]… SOURCE DEST
选 项:
- -a:此参数的效果相当于同时使用dpR参数;
- -d:复制符号链接本身,而非其指向的源文件;
- -f:强制进行复制;
- -i :交互式复制,有提示信息;
- -R、-r:递归复制目录;将目录下的文件一并复制过去;
- -p:保留源文件所有者的属性;
mv
功能描述:移动或重命名文件、目录。
语 法:mv [OPTION]… SOURCE DEST
选 项:
- -f:强制进行覆盖;
- -i :交互式覆盖,有提示信息
cat
功能描述:读取文件并打印到标准输出。
语 法:cat [OPTION]… [FILE]…
选 项:
- -n:对输出的行数进行编号;
tac
功能描述:读取文件并逆序打印到标准输出。
语 法:tac [OPTION]… [FILE]…
选 项:
head
功能描述:输出文件的开头部分内容,默认显示10行。
语 法:head [OPTION]… FILE…
选 项:
- -c <字符数>:指定显示头部内容的字符数;
- -n <数字>:指定显示头部内容的行数;
more
功能描述:按页浏览文本文件的内容,只能向后翻页。
语 法:more [options] file […]
选 项:
- – <数字>:指定每屏显示的行数;
less
功能描述:按页浏览文本文件的内容,可以向前或向后翻页。
语 法:less [OPTION]… FILE…
选 项:
- -e:文件内容显示完毕后自动退出;
- -N :每行行首显示行号;
bash特性
在Linux中,bash的其中一个工作特点叫做没有返回信息通常是最好的信息。这里并不是说真的没有返回结果,其实每条命令执行完成之后,其状态返回值都保存于bash的特殊变量$?中,通过echo $?的值即可查看上一条指令是否执行成功,成功的话,值肯定是0,如果值是1-255之间的任何一个数字,都表示上条指令没有执行成功。此处需要注意的是一定$?只表示上一次的状态返回值。
此外,在bash中,还有一个重要的命令行展开特性,通过此特性,可以极大的节省时间,提高工作效率。
- ~[USERNAME]:展开为指定用户的家目录;
- {} :可承载一个或多个以,号分割的路径列表,并能够将其展开为多个路径;
例如:(1)、创建/tmp目录下的:a_c,a_d,b_c,b_d
结果如下显示:
(2)、创建如下目录结构:
mylinux/
├── bin
├── boot
│ └── grub
├── dev
├── etc
│ ├── rc.d
│ │ └── init.d
│ └── sysconfig
│ └── network-scripts
├── lib
│ └── modules
├── lib64
├── proc
├── sbin
├── sys
├── tmp
├── usr
│ └── local
│ ├── bin
│ └── sbin
└── var
├── locak
├── log
└── run
使用命令行展开方式创建,实现方法为:(由于篇幅的原因,删除了部分输出信息)
结果显示如下:
其实bash还有很多特性,比如下面将要介绍的也是在实际中可能会用到的,那就是命令别名、命令引用。命令别名主要有两个好处,第一就是对一些危险的命令使用别名,可以起到提示的作用,第二就是命令或者路径很长时,使用别名可以提高效率。别名的设置也很简单,主要有三种方式:
- 命令行编辑别名alias,alias ‘COMMAND’=’alias’ 此种方法只对当前用户在当前回话中有效;
- 要想永久生效,必须修改配置文件,编辑用户家目录下的 .bashrc文件,添加别名,然后重新读取配置文件生效;
- 要想所有用户都生效,则要编辑/etc/bashrc文件添加别名,然后重新读取配置文件生效;
其次命令的引用在实际中也会经常遇到,那么怎么引用呢,其实也很简单,用法为:$(COMMAND)或`COMMAND`,注意此处为反引号。说了这么多,那来个例子练练手吧:在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。综合前面的知识,我想此处你肯定不能用touch创建时自己敲上去时间,如果你真是这样创建,那么前面的内容就算白讲了,因为此处tfile后明显是个时间,因此可以用date表示,综合上面的命令替换,是不是感觉有点思绪了呢?答案就是这样的:
touch tfile-`date +”%Y-%m-%d-%H-%M-%S”`是不是觉得还是挺简单的。
说完了上面的内容,下面来说说bash的文件名通配,很多时候我们想要查找一些特定格式名称的文件,这时文件名通配就非常有用了。常见的通配符有如下几种:
- *:任意长度的任意字符;
- ?:任意单个字符;
- []:中括号范围内的单字符;
- [^]:中括号以外的单字符;
- 字符集合:
bash特性练习
学习了上述bash的众多特性,如果在生产环境中给你如下问题,你是不是能搞定呢:
- ls /var/l*[[:digit:]]*[[:lower:]]是什么意思?
- ls /etc/[[:digit:]]*[^[:digit:]]表示什么?
- ls /etc/[^[:alpha:]][[:alpha:]]*又表示什么?
根据上面内容的提示,我们可以将上述问题放到bash的文件通配符段落中查找答案,所以:
- 表示显示/var目录下,以1开头,中间跟了1个数字,以小写字母结尾的文件或目录;
- 表示显示/etc目录下,以数字开头,非数字结尾的文件或目录;
- 表示显示/etc目录下,以非大小写字母开头但紧跟着任意一个大写或小写字母的文件或目录;
其实吧,学习有时候就是你做完了上面的内容,肯定觉得要是再有几个练习一些该多好哇!哈哈哈,其实吧,下面还真有。有时间又觉得不错的话可以练习练习
- cp -r /etc/p*[^[:figit:]] /tmp/mytest1
- cp -r /etc/*.d /tmp/mytest2
- cp /etc/[lmn]*.conf /tmp/mytest3
忙碌的一周又过去了,为了赶上其他小伙伴的进度,一天当做三天用,用四天的时间学完了两周的课程,接下来继续向前奔跑。
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/90159
评论列表(1条)
内容上有自己思考的部分很赞,继续加油~