1、linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
linux上的文件管理类命令有:cat、tac、more、less、head、tail、cp、mv、rm、rmdir、mkdir等
cat:文件文本查看工具
cat [option]…[file]…
-n:给显示的文本行编号
-E:显示行结束符$.
tac:文件文本查看工具(cat 的倒序)
tac [option]…[file]…
more:可翻页查看文件内容,一页一页的翻动
注:如果more后面接的文件内容行数大于屏幕输出的行数时,就会出现类似上图,最后一行会显示百分比,表示已经显示了整个文件的百分多少,且最后一行还可以输入命令。
空格键:代表向下翻一页
Enter:代表向下滚动一行,当到文件的最后一页时,自动退出more,回到命令行。
/字符串:代表在这个显示的内容当中,向下查询"字符串"这个关键字
:f :立刻显示出文件名以及目前显示的行数
q :代表立刻离开more
b :往回翻页
less:可翻页查看文件内容,一页一页的翻动,比more有弹性
可输入的命令:
空格键:向下翻动一页;
[PageDown]:向下翻动一页;
[PageUp]:向上翻动一页;
/字符串 :向下查询"字符串"的功能;
?字符串 :向上查询"字符串"的功能;
n :重复前一个查询;
N :反向重复前一个查询;
q :离开less。
head:取出文件中的前面N行
head [OPTION]… [FILE]…
-n # 或者 -#: 显示几行,默认显示10行
tail:取出文件中的最后N行
tail [OPTION]…[FILE]…
-n #或者- #:显示几行,默认显示10行
-f:持续检测后面所接的文件名,要等到按下[ctrl]-c才会结束检测。
此时需要按下[ctrl]-c才会结束,后者会一直检测该文件。
cp:复制
cp [OPTION]… [-T] SOURCE DEST
cp [OPTION]… SOURCE… DIRECTORY
-i:交互式复制,即覆盖之前提醒用户确认;
此时按下Y,表示覆盖,按下N,表示不覆盖。
-f:强制覆盖目标文件;此时不会提示你是否覆盖了,直接强制覆盖;
如:当前目录下已经有一个passwd文件了,执行如下操作不会有任何提示
-r, -R:递归复制目录;
如:将/usr/share/man/下的man#文件复制到当前目录
-d:复制符号链接文件本身,而非其指向的源文件;
以此文件为例,其位于/etc/下,(centos7.1)
-a:-dR –preserve=all, archive,用于实现归档;
–preserv=
mode:权限
ownership:属主和属组
timestamps: 时间戳
context:安全标签
xattr:扩展属性
links:符号链接
all:上述所有属性
mv:和剪切一个意思?
mv [OPTION]… [-T] SOURCE DEST
mv [OPTION]… SOURCE… DIRECTORY
mv [OPTION]… -t DIRECTORY SOURCE..
-i:交互式
-f:强制
rm:删除文件
rm [OPTION]… FILE…
-i:交互
-f:强制
-r:递归
删除目录:rm -rf /PATH/TO/DIR
建议一定要执行一次:rm -rf /* (有惊喜)
2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示?
bash的工作特性之命令执行状态返回值:
命令执行完后,其状态返回值保存于bash的特殊变量$?中。
bash通过状态返回值来输出此结果:
成功:0
失败:1-255
注意,命令执行状态返回值和命令的执行结果间的区别。如上图,ls的执行结果是显示当前目录的文件名,紧接着执行echo命令用于显示命令的执行状态返回值,不管ls命令是否成功执行,其都会有相关数据显示,但是命令执行状态返回值却是不同的。
bash的工作特性之命令行展开:
~:自动展开为用户的家目录,或指定的用户的家目录。
{}:可承载一个以逗号分割的路径列表,并能够将其展开为多个路径。
关于linux shell 的展开与匹配
在非引号内的内容,如果用花括号包括,而且里面用逗号分隔(至少包含一个逗号,可以是空内容),这样花括号里的内容会被展开成用空格分开的一个列表,花括号前后可以紧随前缀和后缀(前后缀都是可选的)。
例如:
echo {a,b,c}
echo hello,{world,pig}
echo rep{,,,,,}eat
注意花括号展开,前缀不能是$,因为${...}在shell中是变量
从波浪号~到第一个未被引号包含的斜杠/(如果没有斜杠,则全部算上),作为波浪号前缀。
在波浪号后面的字符串作为一个可能的登录名:如果为空,被展开成该用户的HOME变量,如果HOME变量未设置,则用用户执行shell的主目录替换。如果不为空,则按照该登录名的主目录替换(原文:If this login name is the null string, the tilde is replaced with the value of the HOME
shell variable. If HOME
is unset, the home directory of the user executing the shell is substituted instead. Otherwise, the tilde-prefix is replaced with the home directory associated with the specified login name.)
例如:
echo ~ # 显示$HOME内容
HOME=/bin && echo ~ # 显示/bin
unset HOME && echo ~ # 显示当前用户主目录
echo ~root # 显示root用户主目录
波浪号还可以与加减号和数字,产生一个遍历文件夹堆栈的效果(关于文件夹堆栈,参考dirs、pushd、popd几个命令)。
echo ~+ # 显示$PWD
echo ~- # 显示$OLDPWD
echo ~+2 # 显示dirs中第3个内容,索引基于0
echo ~-3 # 显示dirs中倒数第4个内容,索引基于0
如果无法展开,那就会原样显示,例如dir堆栈中只有1个内容,那么~+1是无法展开的(这时只有~+0有效)。
用$符号开始,后面接着变量名或者花括号括起来的变量名,如果是花括号内以叹号开头,那么就是变量名本身。
例如:
echo $PWD # 显示PWD对应的值
echo ${PWD} # 显示PWD对应的值
echo ${!PWD} # 显示“PWD”这个变量名,而不是它的值
echo ${!P*} # 显示所有以P开头的环境变量名
如果一个变量名不存在,就创建它。
echo ${HELLO:=hello} # 如果HELLO不存在,就用hello给它赋值,否则直接输出$HELLO的值
将一些命令执行后,结果替换到该命令语句中,可以用$()和``括住的方法
命令替换是可以嵌套的。
例如:
echo `date`
echo $(date)
echo $(echo `date` |awk ‘{print $4}‘)
放在$(( ))中的表达式会被计算,其中变量会被求值,例如:
a=1 && b=3 && echo $(($a+$b))
如果是数字,0开头的8进制,0x开头的16进制,其它进制用Base#number的方式
可支持2~64进制,如果进制小于等于36,可以用a-z或A-Z表示10-35,如果进制大于36,则a-z表示10-35,A-Z表示36-61,@表示62,_表示63
例如:
echo $((16#32)) # 16进制的32,输出50
echo $((64#@_)) # 输出4031 = 62 * 64 + 63
用$[]也可以算术展开,但是不要和测试条件[]混淆了
例如:
echo $[1+4]
>(LIST)或<(LIST)
LIST是一个命令,它执行时会从一个FIFO或/dev/fd/xxx这样的地方读取(对应>(LIST))或输出(对应<(LIST)),而这个FIFO或/dev/fd/xxx作为外面命令的一个参数。
例如:
echo -e ‘haha hehe\nhaha2 hehe2‘ >a.txt # 生成了一个a.txt文件,里面有两行
awk ‘{ print $2 }‘ <(cat a.txt) # 先为<(cat a.txt)生成了一个/dev/fd/63,关联到cat a.txt,也就是说cat a.txt的输出都被定向到/dev/fd/63这个文件了,然后外围的命令执行的是awk ‘{ print $2 }‘ /dev/fd/63,这样打印的就是hehe和hehe2。
$IFS里面的任何一个字符都可以作为分隔符,平时我们默认的就是回车、空格、tab符号。
进行字词分隔后,如果不指定-f选项,shell会搜索"*","?","[",如果遇到了,就会认为是一个带pattern的word,然后用字典序将符合的所有文件名替换过去,如果没有文件名匹配:1 shell的nullglob选项关闭,则不进行文件名展开,保留word原样;2 shell的nullglob打开,则移除这个word。如果shell的nocaseglob选项打开,则忽略大小写。
当匹配文件名时(这里指不包括文件夹),除非shell的dotglob被设置,否则.或./开头的文件都必须显示指定,例如:
ls * # 列出当前文件夹中所有不以"."开头的文件
ls .* # 列出当前文件夹中所有以"."开头的文件
当匹配文件名时,"/"必需显示匹配,例如:
ls ./* 和 ls ./*/*是不同的。
其它情况下,"."和普通字符一样,例如:
*.txt和*txt都可以匹配a.txt
还有一个系统变量GLOBIGNORE,如果一个文件名匹配了一个pattern word,但是它也匹配了GLOBIGNORE,则它会被忽略,不过两个特殊文件一定会被忽略,就是"."和".."。
如果GLOBIGNORE打开,那么dotglob选项也会自动打开,这样会导致当你ls *时,其他以"."开头的文件也会被match,如果想忽略"."开头的文件,可以在GLOBIGNORE里面添加一个".*"的匹配。如果GLOBIGNORE未设定,则dotglob关闭。
3、请使用命令行展开功能来完成以下练习?
(1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
~]#mkdir -p {a,b}_{c,d}
(2)、创建/tmp/mylinux目录下的:
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
├── lock
├── log
└── run
~]#mkdir -pv /tmp/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/{lock,log,run}}
4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息?
元数据被定义为:描述数据的数据,对数据及信息资源的描述性信息。
元数据(Metadata)是描述其它数据的数据(data about other data),或者说是用于提供某种资源的有关信息的结构数据(structured data)。元数据是描述信息资源或数据等对象的数据,其使用目的在于:识别资源;评价资源;追踪资源在使用过程中的变化;实现简单高效地管理大量网络化数据;实现信息资源的有效发现、查找、一体化组织和对使用资源的有效管理。 元数据的基本特点主要有:
a)元数据一经建立,便可共享。元数据的结构和完整性依赖于信息资源的价值和使用环境;元数据的开发与利用环境往往是一个变化的分布式环境;任何一种格式都不可能完全满足不同团体的不同需要;
b)元数据首先是一种编码体系。元数据是用来描述数字化信息资源,特别是网络信息资源的编码体系,这导致了元数据和传统数据编码体系的根本区别;元数据的最为重要的特征和功能是为数字化信息资源建立一种机器可理解框架。
元数据体系构建了电子政务的逻辑框架和基本模型,从而决定了电子政务的功能特征、运行模式和系统运行的总体性能。电子政务的运作都基于元数据来实现。其主要作用有:描述功能、整合功能、控制功能和代理功能。
由于元数据也是数据,因此可以用类似数据的方法在数据库中进行存储和获取。如果提供数据元的组织同时提供描述数据元的元数据,将会使数据元的使用变得准确而高效。用户在使用数据时可以首先查看其元数据以便能够获取自己所需的信息。
在数据仓库领域中,元数据按用途分成技术元数据和业务元数据。首先,元数据能提供基于用户的信息,如记录数据项的业务描述信息的元数据能帮助用户使用数据。其次,元数据能支持系统对数据的管理和维护,如关于数据项存储方法的元数据能支持系统以最有效的方式访问数据。具体来说,在数据仓库系统中,元数据机制主要支持以下五类系统管理功能:
(1)描述哪些数据在数据仓库中;
(2)定义要进入数据仓库中的数据和从数据仓库中产生的数据;
(3)记录根据业务事件发生而随之进行的数据抽取工作时间安排;
(4)记录并检测系统数据一致性的要求和执行情况;
(5)衡量数据质量。
文件的数据分两种:一种元数据,既属性数据;一种就是数据本身;
可以用命令stat查看文件的元数据;
file:文件名;
size:文件大小
block:文件占了多少个数据块
IO Block:文件所占数据块的块大小
Device:硬件,既说明该文件在硬盘的那个柱面
Inode:节点号
links:链接
Access(第一个):权限
Uid:该文件所属的属主
Gid:该文件所属的属组
context:安全上下文
Access(第二个):文件上一次的访问时间
Modify:文件上一次修改的时间
Change:文件上一次属性更改的时间
可以使用touch命令更改文件的时间戳:
touch [OPTION]… FILE..。
-c: 指定的文件路径不存在时不予创建;
-a: 仅修改access time;
-m:仅修改modify time;
-t STAMP
[[CC]YY]MMDDhhmm[.ss]
~]#touch FILE
这条命令会将文件的三个时间一并更改成当前的时间
如下三个分别更改atime,mtime,三个时间一起更改。
5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
命令别名使用alias命令。
~]#alias NAME=‘COMMAND‘
在一个命令中引用另一个命令的执行结果也是bash的特性之一,引用。
方法:$(COMMAND) 或者 `COMMAND`
6、显示/var目录下所有以1开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录?
ls -l /var/1*[0-9]*[a-z]
7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录?
~]#ls -d /etc/[0-9]*[^0-9]
8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录?
~]#ls -d /etc/[^a-z][a-z]*
9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22?
~]#touch /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)
10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中?
~]#mkdir /tmp/mytest1
~]#cp -r /etc/p*[^0-9] /tmp/mytest1
11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中?
~]#mkdir /tmp/test2
~]#cp -r /etc/*.d /tmp/mytest2
12、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中?
~]#mkdir /tmp/mytest3
~]#cp /etc/[lmn]*.conf /tmp/mytest3
本文出自 “10987683” 博客,请务必保留此出处http://10997683.blog.51cto.com/10987683/1855559
原文地址:http://10997683.blog.51cto.com/10987683/1855559