- linux上的文件管理类的命令有哪些,常用的使用方法和实例演示:
cat命令 主要是查看文件的内容并且全部罗列出来,同时还可以用于两文件的合并,
-n 对文件的内容加上行号,空行也加
[root@yh ~]# cat -n aa
1
2 ni hao
3
4 ta hao
-h 不对空行加编号
[root@yh ~]# cat -b aa
1 ni hao
2 ta hao
把一个文件的内容附加到另外一个文件里面:
[root@yh ~]# cat aa >> bb
[root@yh ~]# cat bb
wo shi bb
ni hao
ta hao
more命令:查看文件内容,需要一页一页翻行
[root@yh ~]# more a
touch 创建目录
chattr命令:给文件去掉和添加属性
chattr 参数 +/-属性 文件或目录名
参数:-R 递归给文件或者目录添加属性
-V 显示详细的命令执行过程
属性: i 这个目录和内容不能修改
[root@yh ~]# chattr -R +i aa
[root@yh ~]# lsattr aa
----i----------- aa/aa
[root@yh ~]# cd aa
[root@yh aa]# lsattr aa
----i----------- aa
我是root权限可以删除aa这个文件,但是现在删除不了,i的属性起了作用,同时不能被改名,链接和添加内容
[root@yh aa]# rm -rf aa
rm: 无法删除"aa": 权限不够
a 向文件中写入内容后,该内容不能被删除,append
[root@yh ~]# touch aa
[root@yh ~]# chattr +a aa
[root@yh ~]# echo 'wo shi zhu' >> aa
这是覆盖前面的内容,所以不允许删除
[root@yh ~]# echo 11 > aa
-bash: aa: 不允许的操作
查看属性:
[root@yh ~]# lsattr aa
-----a---------- aa
chgrp:更改目录或者文件的所属组
drwxr-xr-x. 2 root root 6 9月 25 12:59 dd
[root@yh ~]# chgrp redhat dd
[root@yh ~]# ll -d dd
drwxr-xr-x. 2 root redhat 6 9月 25 12:59 dd
chown :更改目录或文件的所有者
[root@yh ~]# chown redhat dd
[root@yh ~]# ll -d dd
drwxr-xr-x. 2 redhat redhat 6 9月 25 12:59 dd
chmod:选项 操作对象+属性 文件 / chmod 遮罩码(4 读权限,2 写权限,1 执行权限) 文件/目录
选项有: -R递归给予权限
操作对象:u为属主,g为属组,o为其他,a为全部
属性: r 读权限 w 写权限 x执行权限
chmod -R 777 /tmp/issue
chmod a=rwx /tmp/issue
cmp 比较两个文件之间的不同,相同不返回任何信息,不同的地方列出字符和列数编号:
[root@yh ~]# cmp a b
a b 不同:第 8 字节,第 3 行
[root@yh ~]# cat a
aa
aaa
aaaa
aaaaa
[root@yh ~]# cat b
aa
aaaa
aaaa
aaaaaa
[root@yh ~]#
file:显示文件类型:
[root@yh ~]# file c.tar.bz
c.tar.bz: gzip compressed data, from Unix, last modified: Sun Sep 25 13:18:39 2016
[root@yh ~]# file a
a: ASCII text
[root@yh ~]#
wc命令:参数 文件
-l:line 显示行数
-w:words 单词数
-c:characters 字节数
[root@yh ~]# wc -lwc a
7 4 21 a
[root@yh ~]# cat a
aa
aaa
aaaa
aaaaa
7 代表有七行 4 代表4个单词 21 代表21字节数
cut命令:
cp命令:
mv命令:
rm 删除命令:
locate :定位文件的位置
find
功能:根据各种需求(名称、类别、时间、大小、权限等)在指定的目录内寻找符合要求的文件。
常配合使用参数:
-mount, -xdev : 只检查和指定目录在同一个档案系统下的档案,避免列出其它档案系统中的档案
-amin n : 在过去n 分钟内被读取过
-anewer file : 比档案file 更晚被读取过的档案
-atime n : 在过去n 天过读取过的档案
-cmin n : 在过去n 分钟内被修改过
-cnewer file :比档案file 更新的档案
-ctime n : 在过去n 天过修改过的档案
-empty : 空的档案-gid n or -group name : gid 是n 或是group 名称是name
-ipath p, -path p : 路径名称符合p 的档案,ipath 会忽略大小写
-name name, -iname name : 档案名称符合name 的档案。iname 会忽略大小写
-size n : 档案大小是n 单位,b 代表512 位元组的区块,c 表示字元数,k 表示kilo bytes,w 是二个位元组。-type c : 档案类型是c 的档案。
d: 目录
c: 字型装置档案
b: 区块装置档案
p: 具名贮列
f: 一般档案
l: 符号连结
使用方法:
将目前目录及其子目录下所有延伸档名是c 的档案列出来。
find . -name “*.c”
将目前目录其其下子目录中所有一般档案列出
find . -ftype f
将目前目录及其子目录下所有最近20 分钟内更新过的档案列出
find . -ctime -20
2,bash的工作特性之命令执行状态返回值和和命令行展开所涉及的内容及其示例演示:
(1)bash命令执行状态返回值使用特殊变量$?保存
[root@yh ~]# touch asd
[root@yh ~]# echo $?
0
[root@yh ~]# mkdir asd
mkdir: 无法创建目录"asd": 文件已存在
[root@yh ~]# echo $?
1
当命令执行正确的时候输入echo $? 返回的是0,当命令执行错误的时候返回的值是1
(2)命令行展开所涉及的内容:
~:展开为用户的主目录
表示在root用户下它的家目录为/root
[root@yh ~]# pwd
/root
{}:可承载一个以逗号分隔的列表,并将其展开为多个路径
[root@yh tmp]# touch /tmp/{a,b}
[root@yh tmp]# ls
a b
3.请使用命令行展开功能完成以下练习
(1)创建/tmp目录下的:a_c,a_d,b_c,b_d
[root@yh tmp]# touch /tmp/{a,b}_{c,d}
[root@yh tmp]# ls
a_c a_d b_c b_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
[root@yh tmp]# mkdir -p /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}}
[root@yh tmp]# cd mylinux/
[root@yh mylinux]# ls
bin boot dev etc lib lib64 proc sbin sys tmp usr var
1.文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改时间戳信息:
文件的元数据有:
[root@yh /]# stat bin/
文件:"bin/"
大小:40960 块:136 IO 块:4096 目录
设备:803h/2051d Inode:134320267 硬链接:2
权限:(0555/dr-xr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:bin_t:s0
最近访问:2016-09-25 12:19:12.852029012 +0800
最近更改:2015-10-30 00:32:45.053056691 +0800
最近改动:2015-10-30 00:32:45.053056691 +0800
创建时间:-
大小:文件的大小
块:数据块的大小
IO块:提供给这个目录用于读写的块的大小
uid:所有者ID
gid:所属组ID
inode:I节点用于唯一标示一个目录的ID号
使用touch命令来修改时间戳:
-a : 仅修改access time。
-c : 仅修改时间,而不建立文件。
-d : 后面可以接日期,也可以使用 –date=”日期或时间”
-m : 仅修改mtime。
-t : 后面可以接时间,格式为 [YYMMDDhhmm]
一般属性的修改和文件内容的修改是同步的,内容修改了属性也修改了,属性修改了内容不一定修改
[root@yh tmp]# touch -d "2 days ago" mylinux/
[root@yh tmp]# stat
stat states
[root@yh tmp]# stat mylinux/
文件:"mylinux/"
大小:4096 块:8 IO 块:4096 目录
设备:803h/2051d Inode:205294214 硬链接:14
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2016-09-23 15:05:06.551301429 +0800
最近更改:2016-09-23 15:05:06.551301429 +0800
最近改动:2016-09-25 15:05:06.550718359 +0800
创建时间:-
5.如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
(1)alias
alias NAME=’VALUE’
[root@yh tmp]# alias aa='cp -r /etc/ /tmp'
[root@yh tmp]# aa
这个定义只对当前生效,想要永久性对特定用户生效需要写到该用户的家目录下的.bashrc "alias mv='mv -i'"
如果想要在全局下生效,需要写到/etc/bashrc里面
(2)如何在命令中引用另一个命令的执行结果?
方法一:可以使用重定向:
[root@yh ~]# echo "123" >> /tmp/a_d
方法二:可以使用管道,
[root@yh ~]# cat /etc/bashrc | grep if
if [ "$PS1" ]; then
if [ -z "$PROMPT_COMMAND" ]; then
if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
elif [ "${VTE_VERSION:-0}" -ge 3405 ]; then
if [ -e /etc/sysconfig/bash-prompt-screen ]; then
# if [ "$PS1" ]; then
# to your custom modification shell script in /etc/profile.d/ directory
if ! shopt -q login_shell ; then # We're not a login shell
if [ "$2" = "after" ] ; then
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
# Only display echos from profile.d scripts if we are no login shell
if [ -r "$i" ]; then
if [ "$PS1" ]; then
[root@yh ~]#
方法三:可以使用-exec命令
find / -name yh -exec cp /tmp {} \;
6.显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其他字符)的文件或目录。
[root@yh var]# ls -d l*[0-9]*[a-z]
like111like
7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
[root@yh var]# mkdir /etc/1111111111f
[root@yh var]# ls -d /etc/[0-9]*[^0-9]
/etc/1111111111f
8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
[root@yh var]# ls -d /etc/[^a-z][a-z]*
/etc/1aaaaaaaaa
9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@yh var]# touch /tmp/tfile`date +%F-%H-%M-%S`
[root@yh var]# cat /tmp/tfile2016-09-25-15-58-39
10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
[root@yh var]# mkdir /tmp/mytest1
[root@yh var]# cp -rf /etc/p*[^0-9] /tmp/mytest1/
[root@yh var]# cat /tmp/mytest1/p
pam.d/ pki/ postfix/ profile.d/
passwd plymouth/ ppp/ protocols
passwd- pm/ prelink.conf.d/ pulse/
pbm2ppa.conf pnm2ppa.conf printcap purple/
pinforc popt.d/ profile
[root@yh var]# cat /tmp/mytest1/p
11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
[root@yh var]# mkdir /tmp/mytest2
[root@yh var]# cp -rf /etc/*.d /tmp/mytest2/
[root@yh var]# cat /tmp/mytest2/
bash_completion.d/ ipsec.d/ profile.d/ rwtab.d/
binfmt.d/ ld.so.conf.d/ rc0.d/ sane.d/
chkconfig.d/ libibverbs.d/ rc1.d/ setuptool.d/
cron.d/ logrotate.d/ rc2.d/ statetab.d/
depmod.d/ modprobe.d/ rc3.d/ sudoers.d/
dnsmasq.d/ modules-load.d/ rc4.d/ sysctl.d/
dracut.conf.d/ my.cnf.d/ rc5.d/ tmpfiles.d/
exports.d/ oddjobd.conf.d/ rc6.d/ usb_modeswitch.d/
gdbinit.d/ pam.d/ rc.d/ xinetd.d/
grub.d/ popt.d/ request-key.d/ yum.repos.d/
init.d/ prelink.conf.d/ rsyslog.d/
[root@yh var]# cat /tmp/mytest2/
12、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中
[root@yh var]# mkdir /tmp/mytest3
[root@yh var]# cp -rf /etc/{l,m,n}*.conf /tmp/mytest3/
[root@yh var]# cat /tmp/mytest3/
ld.so.conf locale.conf mke2fs.conf nsswitch.conf
libaudit.conf logrotate.conf mtools.conf numad.conf
libuser.conf man_db.conf nfsmount.conf
[root@yh var]# cat /tmp/mytest3/