day-4 文件管理(2)
文件管理指复制文件
cp常用参数及说明
选项 | 解释 |
---|---|
-r | 递归拷贝,拷贝目录时必须加r |
-p | 保持文件原有的属性,不发生变化 |
-v | 显示拷贝详细信息 |
把file拷贝到/tmp下,并重命名为file_copy
[root@node2 ~]# cp file /tmp/file_copy
[root@node2 ~]# ll /tmp/
total 0
-rw-r--r--. 1 root root 0 Jul 29 10:34 file_copy
-p参数用于保持在复制过程中,文件的原有属性不变
[root@node2 ~]# ll
total 0
-rw-r--r--. 1 root root 0 Jul 29 10:36 file
# 文件权限为rw-r--r--
[root@node2 ~]# chmod 777 file
# 更改文件的权限
[root@node2 ~]# chown adm:adm file
# 更改文件的所属关系
[root@node2 ~]# ll
total 0
-rwxrwxrwx. 1 adm adm 0 Jul 29 10:36 file
# 修改后的文件属性
[root@node2 ~]# cp file /opt/
# 将文件复制到/opt目录下
[root@node2 ~]# cp -p file /opt/file1
# 保持文件的原有属性不变,复制文件到/opt下,并重命名为file1
cp: overwrite ‘/opt/file1’? y
[root@node2 ~]# ll /opt
total 0
-rwxr-xr-x. 1 root root 0 Jul 29 10:38 file
# 不加-p参数,复制过程中,文件属性发生了变化
-rwxrwxrwx. 1 adm adm 0 Jul 29 10:36 file1
# 加上-p参数,复制过程中,文件的属性不发生改变
把 file 、 hello / 和/etc复制到/mnt目录下
[root@node2 ~]# cp -rp file hello/ /etc/ /mnt/
若复制的文件已经存在时,系统会提示是否要覆盖。可以通过\和/bin的方式去强制复制
[root@node2 ~]# \cp -r /etc/ /mnt/
#因为cp alias中定义了-i参数,通过\可转义,使-i不生效。
[root@node2 ~]# ll /mnt/
total 12
drwxr-xr-x. 75 root root 8192 Jul 29 10:45 etc
[root@node2 ~]# /bin/cp -r /etc/ /mnt/
#直接执行/bin/cp也可以使alias定义的别名不生效
[root@node2 ~]# ll /mnt/
total 12
drwxr-xr-x. 75 root root 8192 Jul 29 10:46 etc
[root@node2 ~]# alias
alias cp='cp -i' #alias中定义了-i选项,覆盖既有文件之前先询问用户。
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
通过{ }去复制文件
[root@node2 ~]# cp {test.txt,test.txt.bak} -v
# 将test.txt复制一份test.txt.bak,-v显示复制过程
‘test.txt’ -> ‘test.txt.bak’
[root@node2 ~]# cp /etc/sysconfig/network-scripts/{ifcfg-ens32,ifcfg-ens32.bak}
将ifcfg-ens32复制一份,命名为ifcfg-ens32.bak
[root@node2 ~]# ls /etc/sysconfig/network-scripts/ifcfg-e*
/etc/sysconfig/network-scripts/ifcfg-ens32
/etc/sysconfig/network-scripts/ifcfg-ens32.bak
文件管理之查看文件内容
cat常用参数及说明
选项 | 解释 |
---|---|
-n | 查看文件时,显示行号 |
-A | 查看文件时,显示特殊字符 |
查看pass文件内容
[root@node2 ~]# cat pass
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
test17:x:1016:1016::/home/test17:/bin/bash
查看pass文件内容并显示行号
[root@node2 ~]# cat -n pass
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 test17:x:1016:1016::/home/test17:/bin/bash
查看pass文件内容并显示特殊字符
[root@node2 ~]# cat -A pass
root:x:0:0:root:/root:/bin/bash$
# 行尾$表示换行符
bin:x:1:1:bin:/bin:/sbin/nologin$
daemon:x:2:2:daemon:/sbin:/sbin/nologin$
test17:x:1016:1016::/home/test17:/bin/bash$
用cat创建一个文件,并写入内容
[root@node2 ~]# cat >> test.txt <<EOF
> TEST1
> TEST2
> TEST3
> EOF
[root@node2 ~]# cat test.txt
TEST1
TEST2
TEST3
head常用参数及说明
选项 | 解释 |
---|---|
-n | 打印的行数 |
使用head命令,不加任何参数,默认只打印前十行的内容。
[root@node2 ~]# head -3 pass
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
# 打印pass前3行内容,等同于“head -n 3 pass ”
tail常用参数及说明
选项 | 解释 |
---|---|
-n | 打印的行数 |
-f | 查看文件尾部新追加的内容 |
打印文件的后3行内容
[root@node2 ~]# tail -3 pass
test99:x:1098:1098::/home/test99:/bin/bash
test100:x:1099:1099::/home/test100:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
若不加任何参数,默认只打印末尾10行
使用tail -f可以查看文件尾部的变化
[root@node2 ~]# tail -f /var/log/secure
# 等同于 tailf /var/log/secure
Jul 29 14:05:54 node2 sshd[8613]: error: Received disconnect from 10.0.0.1 port 61962:0:
Jul 29 14:05:54 node2 sshd[8613]: Disconnected from 10.0.0.1 port 61962
Jul 29 14:05:54 node2 sshd[8613]: pam_unix(sshd:session): session closed for user root
grep常用参数及说明
选项 | 解释 |
---|---|
-n | 显示行符 |
-v | 反转查找 |
-i | 不区分大小写过滤文件 |
-E | 多条件过滤 |
-A | 匹配后,再向下打印 |
-B | 匹配后,再向上打印 |
过滤文中含有root的相关的行
[root@node2 ~]# grep "root" pass
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
过滤以root开头的行
[root@node2 ~]# grep "^root" pass
root:x:0:0:root:/root:/bin/bash
过滤以bash结尾的行
[root@node2 ~]# grep "bash$" pass
root:x:0:0:root:/root:/bin/bash
test1:x:1000:1000::/home/test1:/bin/bash
test2:x:1001:1001::/home/test2:/bin/bash
test3:x:1002:1002::/home/test3:/bin/bash
显示行符
[root@node2 ~]# grep -n "bash" pass
1:root:x:0:0:root:/root:/bin/bash
20:test1:x:1000:1000::/home/test1:/bin/bash
21:test2:x:1001:1001::/home/test2:/bin/bash
22:test3:x:1002:1002::/home/test3:/bin/bash
使用grep匹配后,再向下打印
[root@node2 ~]# grep -n -A 2 "4" test.txt
4:TEST4
# 匹配到4后在向下打印两行
5-TEST5
6-TEST6
使用grep匹配后,再向上打印
[root@node2 ~]# grep -n -B 2 "4" test.txt
2-TEST2
3-TEST3
4:TEST4
# 匹配到4后,再向上打印两行
使用grep匹配后,再向上和向下打印
[root@node2 ~]# grep -n -C 2 "4" test.txt
2-TEST2
3-TEST3
4:TEST4
# 匹配到4后,再向上和向下各打印两行
5-TEST5
6-TEST6
[root@node2 ~]# cat test.txt
TEST1
TEST2
TEST3
TEST4
TEST5
TEST6
TEST7
TEST8
TEST9
筛选出不含“ftp”的行
[root@node2 ~]# grep -v "ftp" pass
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
不区分大小写过滤出含"ftp"的行
[root@node2 ~]# grep -i "ftp" pass
FTP test
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
不区分大小写的打印出以sync结尾或者包含ftp的行
[root@node2 ~]# grep -Ei "sync$|ftp" pass
FTP test
sync:x:5:0:sync:/sbin:/bin/sync
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
过滤文件常用的符号
选项 | 解释 |
---|---|
. | 表示所有 |
* | 反转查找 |
.* | 表示匹配所有 |
^ | 表示以什么开头 |
$ | 表示以什么结尾 |
^$ | 表示空行 |