Linux-文件管理-文件操作命令02
1.mv 移动和重命名文件
选项:
-i 提示文件应经存在,是否覆盖(系统自带别名)
-f 强制覆盖,不提示
-t 把源文件和目标文件位置进行替换移动
[root@oldboyedu ~]# mv 1.txt /opt/
[root@oldboyedu ~]# ll /opt/
-rw-r--r--. 1 root root 12 Jun 21 11:45 1.txt
[root@oldboyedu ~]# mv oldboy/ /opt/
[root@oldboyedu ~]# ll /opt/
-rw-r--r--. 1 root root 12 Jun 21 11:45 1.txt
drwxr-xr-x. 2 root root 6 Jun 22 09:47 oldboy
[root@oldboyedu ~]# mv 1.txt /opt/
mv: overwrite ‘/opt/1.txt’? n
[root@oldboyedu ~]# \mv 1.txt /opt/
[root@oldboyedu ~]# mv -f 1.txt /opt/
[root@oldboyedu ~]# /usr/bin/mv 1.txt /opt/
[root@oldboyedu ~]# mv 1.txt /opt/oldboy.txt
[root@oldboyedu ~]# ll /opt/
-rw-r--r--. 1 root root 0 Jun 22 09:53 1.txt
drwxr-xr-x. 2 root root 6 Jun 22 09:47 oldboy
-rw-r--r--. 1 root root 14 Jun 21 12:12 oldboy.txt
[root@oldboyedu ~]# mv -t ./ /opt/oldboy.txt
[root@oldboyedu ~]# ll
-rw-r--r--. 1 root root 14 Jun 21 12:12 oldboy.txt
2.rm 删除文件
-i 提示是否要删除文件(系统自带别名)
-f 强制删除
-r 递归删除,删除目录
[root@oldboyedu ~]# rm 123
rm: remove regular file ‘123’? n
[root@oldboyedu ~]# rm -f 123
[root@oldboyedu ~]# ll
total 57472
-rw-r--r--. 1 root root 13712 Jun 21 16:19 456
-rw-r--r--. 1 root root 58817074 Sep 21 2017 access.log
-rw-r--r--. 1 root root 2443 Jun 21 16:26 baidu.html
-rw-r--r--. 1 root root 20 Jun 21 16:43 file.txt
-rw-r--r--. 1 root root 14 Jun 21 12:12 oldboy.txt
-rw-r--r--. 1 root root 199 Jun 21 16:46 sort.log
[root@oldboyedu ~]# mv /opt/oldboy/ ./
[root@oldboyedu ~]#
[root@oldboyedu ~]#
[root@oldboyedu ~]# ll
total 57472
-rw-r--r--. 1 root root 13712 Jun 21 16:19 456
-rw-r--r--. 1 root root 58817074 Sep 21 2017 access.log
-rw-r--r--. 1 root root 2443 Jun 21 16:26 baidu.html
-rw-r--r--. 1 root root 20 Jun 21 16:43 file.txt
drwxr-xr-x. 2 root root 6 Jun 22 09:47 oldboy
-rw-r--r--. 1 root root 14 Jun 21 12:12 oldboy.txt
-rw-r--r--. 1 root root 199 Jun 21 16:46 sort.log
[root@oldboyedu ~]# rm -f oldboy
rm: cannot remove ‘oldboy’: Is a directory
[root@oldboyedu ~]# rm -rf oldboy
[root@oldboyedu ~]# ll
total 57472
-rw-r--r--. 1 root root 13712 Jun 21 16:19 456
-rw-r--r--. 1 root root 58817074 Sep 21 2017 access.log
-rw-r--r--. 1 root root 2443 Jun 21 16:26 baidu.html
-rw-r--r--. 1 root root 20 Jun 21 16:43 file.txt
-rw-r--r--. 1 root root 14 Jun 21 12:12 oldboy.txt
-rw-r--r--. 1 root root 199 Jun 21 16:46 sort.log
[root@oldboyedu ~]# rm -rf /*^C
[root@oldboyedu ~]# rm -rf ./*^C
[root@oldboyedu ~]# cd /
[root@oldboyedu /]# rm -rf ./*^C
[root@oldboyedu /]# cd
[root@oldboyedu ~]# rm -rf ./ *^C
-------给rm命令设置一个别名-------
[root@oldboyedu ~]# alias rm='echo rm bny'
[root@oldboyedu ~]# alias
alias cp='cp -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='echo rm bny'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@oldboyedu ~]# rm -f 456
rm bny -f 456
[root@oldboyedu ~]# \rm -f 456
[root@oldboyedu ~]# ll
total 57456
-rw-r--r--. 1 root root 58817074 Sep 21 2017 access.log
-rw-r--r--. 1 root root 2443 Jun 21 16:26 baidu.html
-rw-r--r--. 1 root root 20 Jun 21 16:43 file.txt
-rw-r--r--. 1 root root 14 Jun 21 12:12 oldboy.txt
-rw-r--r--. 1 root root 199 Jun 21 16:46 sort.log
查看文件内容命令
3.cat 查看文件的内容,会将文件的所有内容显示到屏幕上面。
-n 给显示出来的内容加上行号
-A 给显示出来的内容,每行的结尾加上一个标识符,主要用来区别空格和tab键
> 标准输出重定向,将目标文件的内容清空,再将输出结果追加到目标文件
>> 标准输出追加重定向,将输出结果追加到目标文件的结尾,不会清空源文件内容
[root@oldboyedu ~]# cat file.txt
abc
123
abc
123
def
[root@oldboyedu ~]# cat -n file.txt
1 abc
2 123
3 abc
4 123
5 def
[root@oldboyedu ~]# cat -A file.txt
abc$
123$
abc$
123$
def$
[root@oldboyedu ~]# vi file.txt
[root@oldboyedu ~]#
[root@oldboyedu ~]#
[root@oldboyedu ~]# cat -A file.txt
abc $
123^I$
abc$
123$
def$
[root@oldboyedu ~]# cat file.txt
abc
123
abc
123
def
[root@oldboyedu ~]#
[root@oldboyedu ~]# cat file.txt >file1.txt
[root@oldboyedu ~]# cat file1.txt
abc
123
abc
123
def
[root@oldboyedu ~]# cat file.txt >file1.txt
[root@oldboyedu ~]# cat file1.txt
abc
123
abc
123
def
[root@oldboyedu ~]# cat file.txt >>file1.txt
[root@oldboyedu ~]# cat file1.txt
abc
123
abc
123
def
abc
123
abc
123
def
[root@oldboyedu ~]# ll
total 57460
-rw-r--r--. 1 root root 58817074 Sep 21 2017 access.log
-rw-r--r--. 1 root root 2443 Jun 21 16:26 baidu.html
-rw-r--r--. 1 root root 44 Jun 22 10:19 file1.txt
-rw-r--r--. 1 root root 22 Jun 22 10:15 file.txt
-rw-r--r--. 1 root root 14 Jun 21 12:12 oldboy.txt
-rw-r--r--. 1 root root 199 Jun 21 16:46 sort.log
[root@oldboyedu ~]# cat file.txt oldboy.txt
abc
123
abc
123
def
kasjdhaksjdhs
[root@oldboyedu ~]# cat file.txt oldboy.txt >file2.txt
[root@oldboyedu ~]# cat file2.txt
abc
123
abc
123
def
kasjdhaksjdhs
[root@oldboyedu ~]# cat oldboy.txt
kasjdhaksjdhs
[root@oldboyedu ~]#
[root@oldboyedu ~]# cat >>file3.txt<<EOF
> oldboy
> oldgirl
> shanghai
> EOF
[root@oldboyedu ~]# cat file3.txt
oldboy
oldgirl
shanghai
[root@oldboyedu ~]# cat >>file4.txt<<EOF
> oldboy
> oldgirl
> shanghai
> EOF
[root@oldboyedu ~]# cat file4.txt
oldboy
oldgirl
shanghai
[root@oldboyedu ~]# cat >>file4.txt<<EOF
> oldboy
> oldgirl
> shanghai
> EOF
[root@oldboyedu ~]#
[root@oldboyedu ~]#
[root@oldboyedu ~]# cat file4.txt
oldboy
oldgirl
shanghai
oldboy
oldgirl
shanghai
[root@oldboyedu ~]# cat >file4.txt<<EOF
> oldboy
> oldgirl
> shanghai
> EOF
[root@oldboyedu ~]#
[root@oldboyedu ~]#
[root@oldboyedu ~]# cat file4.txt
oldboy
oldgirl
shanghai
4.tac倒着显示文件内容,按行为单位。
cat反着写...
5.more 分页显示文件内容
空格或f: 向下翻页
b : 向上翻页
/ : 搜索关键字,并不会高亮显示
=: 显示当前光标所在行
q: 退出
-N(数字): 每页显示几行
+N(数字): 从第几行开始显示
显示完文件内容,会自动退出。手动按q退出后,不会缩回文件内容。
6.less 分页显示文件内容
空格或f 向下翻页
b 向上翻页
/ 搜索关键字,会高亮显示
q 退出
-N 给显示出来的内容加上行号
显示完文件内容,不会自动退出。 按q退出后,会缩回文件内容。
7.head 显示文件内容的头部信息,默认显示前十行内容。
-nN(数字) 取消默认输出,可以简写,-5
-cN(数字) 显示文件的前几个字符
[root@oldboyedu ~]# head services
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2013-04-10
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1700, ``Assigned Numbers'' (October 1994). Not all ports
[root@oldboyedu ~]# head -n5 services
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2013-04-10
[root@oldboyedu ~]# head -5 services
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2013-04-10
[root@oldboyedu ~]# head -20 services
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2013-04-10
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1700, ``Assigned Numbers'' (October 1994). Not all ports
# are included, only the more common ones.
#
# The latest IANA port assignments can be gotten from
# http://www.iana.org/assignments/port-numbers
# The Well Known Ports are those from 0 through 1023.
# The Registered Ports are those from 1024 through 49151
# The Dynamic and/or Private Ports are those from 49152 through 65535
#
# Each line describes one service, and is of the form:
#
[root@oldboyedu ~]# head -c 5 services
# /et[root@oldboyedu ~]#
8.tail显示文件内容的尾部,默认显示最后十行内容
-nN(数字) 取消默认输出,可以简写,-5
-cN(数字) 显示文件的最后几个字符,默认最后有个换行符
-f 实时查看文件内容的更新,当文件不存在时,会报错退出,等同于tailf命令
-F 实时查看文件内容的更新,当文件不存在时,会一直的尝试。
[root@oldboyedu ~]# tail services
3gpp-cbsp 48049/tcp # 3GPP Cell Broadcast Service Protocol
isnetserv 48128/tcp # Image Systems Network Services
isnetserv 48128/udp # Image Systems Network Services
blp5 48129/tcp # Bloomberg locator
blp5 48129/udp # Bloomberg locator
com-bardac-dw 48556/tcp # com-bardac-dw
com-bardac-dw 48556/udp # com-bardac-dw
iqobject 48619/tcp # iqobject
iqobject 48619/udp # iqobject
matahari 49000/tcp # Matahari Broker
[root@oldboyedu ~]# tail -n5 services
com-bardac-dw 48556/tcp # com-bardac-dw
com-bardac-dw 48556/udp # com-bardac-dw
iqobject 48619/tcp # iqobject
iqobject 48619/udp # iqobject
matahari 49000/tcp # Matahari Broker
[root@oldboyedu ~]# tail -5 services
com-bardac-dw 48556/tcp # com-bardac-dw
com-bardac-dw 48556/udp # com-bardac-dw
iqobject 48619/tcp # iqobject
iqobject 48619/udp # iqobject
matahari 49000/tcp # Matahari Broker
[root@oldboyedu ~]# tail -c 5 services
oker #最后一个是换行符
[root@oldboyedu ~]# tail -f oldboy.txt
kasjdhaksjdhs
123
[root@oldboyedu ~]# tailf oldboy.txt
kasjdhaksjdhs
123
123
[root@oldboyedu ~]# tail -f oldboy.log
tail: cannot open ‘oldboy.log’ for reading: No such file or directory
tail: no files remaining
[root@oldboyedu ~]# tail -F oldboy.log
tail: cannot open ‘oldboy.log’ for reading: No such file or directory
tail: ‘oldboy.log’ has appeared; following end of new file
123
9.grep 文本处理工具,过滤,默认是以行为单位进行显示。
-o 只显示过滤出来的内容
-n 给过滤出来的内容加上行号
-i 忽略大小写
-v 排除,取反。
-w 只匹配要过滤出来的内容,而不是包含该内容
-c 给过滤出来的内容统计次数,统计的是行的次数。
^n 匹配以什么开头,n表示字符
n$ 匹配以什么为结尾,n表示字符
\ 取消特殊字符的含义,恢复原来意思
[root@oldboyedu ~]# grep "root" passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@oldboyedu ~]# alias
alias cp='cp -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='echo rm bny'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@oldboyedu ~]#
[root@oldboyedu ~]#
[root@oldboyedu ~]# grep "root" passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@oldboyedu ~]# grep -o "root" passwd
root
root
root
root
[root@oldboyedu ~]# grep -v "root" passwd
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@oldboyedu ~]# grep -i "root" passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@oldboyedu ~]# echo "ROOT" >> passwd
[root@oldboyedu ~]#
[root@oldboyedu ~]#
[root@oldboyedu ~]# grep -i "root" passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ROOT
[root@oldboyedu ~]# grep "root" passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@oldboyedu ~]# grep -n "root" passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@oldboyedu ~]# grep -c "root" passwd
2
[root@oldboyedu ~]# grep "^r" passwd
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu ~]# grep -i "^r" passwd
root:x:0:0:root:/root:/bin/bash
ROOT
[root@oldboyedu ~]# grep "c$" passwd
sync:x:5:0:sync:/sbin:/bin/sync
[root@oldboyedu ~]# grep -n "." passwd
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:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
18:abrt:x:173:173::/etc/abrt:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
21:ROOT
[root@oldboyedu ~]# echo "oldboy." >> passwd
[root@oldboyedu ~]#
[root@oldboyedu ~]#
[root@oldboyedu ~]# grep -n "." passwd
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:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
18:abrt:x:173:173::/etc/abrt:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
21:ROOT
22:oldboy.
[root@oldboyedu ~]# grep "\." passwd
oldboy.
[root@oldboyedu ~]# grep "root" passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@oldboyedu ~]# echo "rootoldboy" >>passwd
[root@oldboyedu ~]#
[root@oldboyedu ~]#
[root@oldboyedu ~]# grep "root" passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
rootoldboy
[root@oldboyedu ~]# grep -w "root" passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@oldboyedu ~]# ps -ef|grep ssh
root 7438 1 0 Jun21 ? 00:00:00 /usr/sbin/sshd -D
root 27070 7438 0 Jun21 ? 00:00:03 sshd: root@pts/0
root 83777 27074 0 11:29 pts/0 00:00:00 grep --color=auto ssh
[root@oldboyedu ~]# ps -ef|grep sshd
root 7438 1 0 Jun21 ? 00:00:00 /usr/sbin/sshd -D
root 27070 7438 0 Jun21 ? 00:00:03 sshd: root@pts/0
root 83785 27074 0 11:29 pts/0 00:00:00 grep --color=auto sshd
[root@oldboyedu ~]# ps -ef|grep -w sshd
root 7438 1 0 Jun21 ? 00:00:00 /usr/sbin/sshd -D
root 27070 7438 0 Jun21 ? 00:00:03 sshd: root@pts/0
root 83811 27074 0 11:29 pts/0 00:00:00 grep --color=auto -w sshd
[root@oldboyedu ~]# ps -ef|grep -w [s]shd
root 7438 1 0 Jun21 ? 00:00:00 /usr/sbin/sshd -D
root 27070 7438 0 Jun21 ? 00:00:03 sshd: root@pts/0
[root@oldboyedu ~]# ps -ef|grep hgkrhg
root 83849 27074 0 11:30 pts/0 00:00:00 grep --color=auto hgkrhg
[root@oldboyedu ~]# ps -ef|grep -c hgkrhg
1
[root@oldboyedu ~]# ps -ef|grep -c [d]fg
0
[root@oldboyedu ~]# ps -ef|grep sshd
root 7438 1 0 Jun21 ? 00:00:00 /usr/sbin/sshd -D
root 27070 7438 0 Jun21 ? 00:00:03 sshd: root@pts/0
root 83920 27074 0 11:31 pts/0 00:00:00 grep --color=auto sshd
[root@oldboyedu ~]# ps -ef|grep sshd|grep -v grep
root 7438 1 0 Jun21 ? 00:00:00 /usr/sbin/sshd -D
root 27070 7438 0 Jun21 ? 00:00:03 sshd: root@pts/0
[root@oldboyedu ~]#
文件上传和下载
需要下载软件包
[root@oldboyedu ~]# yum install -y lrzsz
9.rz 上传文件到服务器中,不支持上传目录,且不支持上传大于4G的文件。
[root@oldboyedu ~]# rz
[root@oldboyedu ~]# rz -E
10.sz 从服务器中下载文件到本地
[root@oldboyedu ~]# sz services
11.wget 从互联网上下载软件包
默认没有该命令,需下载
[root@oldboyedu ~]# yum install -y wget
选项:
-O 指定文件名
[root@oldboyedu ~]# wget http://nginx.org/download/nginx-1.14.2.tar.gz
--2019-06-22 12:08:55-- http://nginx.org/download/nginx-1.14.2.tar.gz
Resolving nginx.org (nginx.org)... 62.210.92.35, 95.211.80.227, 2001:1af8:4060:a004:21::e3
Connecting to nginx.org (nginx.org)|62.210.92.35|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1015384 (992K) [application/octet-stream]
Saving to: ‘nginx-1.14.2.tar.gz’
100%[===============================================================================>] 1,015,384 269KB/s in 3.7s
2019-06-22 12:09:00 (269 KB/s) - ‘nginx-1.14.2.tar.gz’ saved [1015384/1015384]
[root@oldboyedu ~]# ll
total 59136
-rw-r--r--. 1 root root 6 Jun 22 10:43 1
-rw-r--r--. 1 root root 58817074 Sep 21 2017 access.log
-rw-r--r--. 1 root root 2443 Jun 21 16:26 baidu.html
-rw-r--r--. 1 root root 44 Jun 22 10:19 file1.txt
-rw-r--r--. 1 root root 36 Jun 22 10:21 file2.txt
-rw-r--r--. 1 root root 24 Jun 22 10:26 file3.txt
-rw-r--r--. 1 root root 24 Jun 22 10:28 file4.txt
-rw-r--r--. 1 root root 22 Jun 22 10:15 file.txt
-rw-r--r--. 1 root root 744 Jun 20 09:44 ip.txt
-rw-r--r--. 1 root root 1015384 Dec 4 2018 nginx-1.14.2.tar.gz
-rw-r--r--. 1 root root 4 Jun 22 11:11 oldboy.log
-rw-r--r--. 1 root root 26 Jun 22 11:09 oldboy.txt
-rw-r--r--. 1 root root 962 Jun 22 11:27 passwd
-rw-r--r--. 1 root root 670293 Jun 22 10:45 services
-rw-r--r--. 1 root root 199 Jun 21 16:46 sort.log
[root@oldboyedu ~]#
[root@oldboyedu ~]# wget -O nginx.tar.gz http://nginx.org/download/nginx-1.14.2.tar.gz
--2019-06-22 12:10:06-- http://nginx.org/download/nginx-1.14.2.tar.gz
Resolving nginx.org (nginx.org)... 95.211.80.227, 62.210.92.35, 2001:1af8:4060:a004:21::e3
Connecting to nginx.org (nginx.org)|95.211.80.227|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1015384 (992K) [application/octet-stream]
Saving to: ‘nginx.tar.gz’
100%[===============================================================================>] 1,015,384 28.2KB/s in 27s
2019-06-22 12:10:35 (36.7 KB/s) - ‘nginx.tar.gz’ saved [1015384/1015384]
[root@oldboyedu ~]# ll
total 60128
-rw-r--r--. 1 root root 6 Jun 22 10:43 1
-rw-r--r--. 1 root root 58817074 Sep 21 2017 access.log
-rw-r--r--. 1 root root 2443 Jun 21 16:26 baidu.html
-rw-r--r--. 1 root root 44 Jun 22 10:19 file1.txt
-rw-r--r--. 1 root root 36 Jun 22 10:21 file2.txt
-rw-r--r--. 1 root root 24 Jun 22 10:26 file3.txt
-rw-r--r--. 1 root root 24 Jun 22 10:28 file4.txt
-rw-r--r--. 1 root root 22 Jun 22 10:15 file.txt
-rw-r--r--. 1 root root 744 Jun 20 09:44 ip.txt
-rw-r--r--. 1 root root 1015384 Dec 4 2018 nginx-1.14.2.tar.gz
-rw-r--r--. 1 root root 1015384 Dec 4 2018 nginx.tar.gz
-rw-r--r--. 1 root root 4 Jun 22 11:11 oldboy.log
-rw-r--r--. 1 root root 26 Jun 22 11:09 oldboy.txt
-rw-r--r--. 1 root root 962 Jun 22 11:27 passwd
-rw-r--r--. 1 root root 670293 Jun 22 10:45 services
-rw-r--r--. 1 root root 199 Jun 21 16:46 sort.log
[root@oldboyedu ~]#
[root@oldboyedu ~]# wget https://www.baidu.com
--2019-06-22 12:16:50-- https://www.baidu.com/
Resolving www.baidu.com (www.baidu.com)... 61.135.169.121, 61.135.169.125
Connecting to www.baidu.com (www.baidu.com)|61.135.169.121|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2443 (2.4K) [text/html]
Saving to: ‘index.html.1’
100%[===============================================================================>] 2,443 --.-K/s in 0s
2019-06-22 12:16:50 (558 MB/s) - ‘index.html.1’ saved [2443/2443]
12.curl 访问一个网站,也可以下载
选项:
-o 指定文件名
[root@oldboyedu ~]# curl https://www.baidu.com/
[root@oldboyedu ~]# curl -o index.html https://www.baidu.com
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2443 100 2443 0 0 11609 0 --:--:-- --:--:-- --:--:-- 11633
文件查找命令
13.which
[root@oldboyedu ~]# which wget
/usr/bin/wget
[root@oldboyedu ~]# which passwd
/usr/bin/passwd
14.type
[root@oldboyedu ~]# type -a wget
wget is /usr/bin/wget
[root@oldboyedu ~]# type -a cd
cd is a shell builtin
cd is /usr/bin/cd
15.whereis
[root@oldboyedu ~]# whereis wget
wget: /usr/bin/wget /usr/share/man/man1/wget.1.gz
16.find 文件查找
[root@oldboyedu ~]# find / -type d -name "oldboy"
/root/oldboy
[root@oldboyedu ~]# find /root -name "*.txt"
/root/oldboy.txt
/root/file4.txt
/root/ip.txt
/root/file.txt
/root/file1.txt
/root/file2.txt
/root/file3.txt
[root@oldboyedu ~]# find /root -type f -name "*.txt"
/root/oldboy.txt
/root/file4.txt
/root/ip.txt
/root/file.txt
/root/file1.txt
/root/file2.txt
/root/file3.txt
[root@oldboyedu ~]# find /root -type f -name "*.txt" -ls
67157890 4 -rw-r--r-- 1 root root 26 Jun 22 11:09 /root/oldboy.txt
67160133 4 -rw-r--r-- 1 root root 24 Jun 22 10:28 /root/file4.txt
67160151 4 -rw-r--r-- 1 root root 744 Jun 20 09:44 /root/ip.txt
67160129 4 -rw-r--r-- 1 root root 22 Jun 22 10:15 /root/file.txt
67160128 4 -rw-r--r-- 1 root root 44 Jun 22 10:19 /root/file1.txt
67160130 4 -rw-r--r-- 1 root root 36 Jun 22 10:21 /root/file2.txt
67160131 4 -rw-r--r-- 1 root root 24 Jun 22 10:26 /root/file3.txt
| 管道:将前面命令执行的结果交给后面的命令执行。
练习题
1.显示“I'm a student”到屏幕上面
2.将“I'm a student”追加到hello.txt文件中
3.查看oldboy.txt文件中的内容,并显示行号(请使用cat命令)。
4.使用cat命令把oldboy oldgirl student三行内容(每个字符串是一行内容)写入到test.txt文件中
5.查看系统中/etc/services文件中的内容(使用more和less命令,进行上下页查看,并搜索关键字‘ssh’,之后退出。)
6.显示/etc/passwd文件的前5行内容。
7.显示/etc/passwd文件的最后5行内容。
8.显示/etc/services文件的第11行到第20行的内容
[root@oldboyedu ~]# head -20 services | tail
9.已知文件123.txt内容如下,请过滤出包含oldboy字符串的命令
test
OLDBOY
online
oldboy
oldboyoldboy
10.过滤出文件123.txt中不包含test的行,并给其过滤出来的内容加上行号
11.要求过滤出文件123.txt中包含oldboy的字符串,忽略大小写。
12.要求过滤出文件123.txt中包含online字符串的行,并统计共有多少行。
13.要求过滤出文件123.txt中包含oldboy的单词。
14.调试系统服务时,希望能实时查看系统日志/var/log/messages的更新,如何做?
15.打印配置文件/etc/passwd内容的行号及内容,你有几种方法可以实现?
字符处理命令
17.sort 排序
选项:
-t 指定分隔符
-r 倒叙排序
-n 以数字形式进行排序
-k 指定列进行排序
环境
cat >> sort.txt <<EOF
b:3
c:2
a:4
e:5
d:1
f:11
EOF
[root@oldboyedu ~]# cat sort.txt
b:3
c:2
a:4
e:5
d:1
f:11
[root@oldboyedu ~]# sort -t ':' -n sort.txt
a:4
b:3
c:2
d:1
e:5
f:11
[root@oldboyedu ~]# sort -t ':' -nk2 sort.txt
d:1
c:2
b:3
a:4
e:5
f:11
[root@oldboyedu ~]# sort -t ':' -rnk2 sort.txt
f:11
e:5
a:4
b:3
c:2
d:1
18.uniq 去重,去除相邻重复的行
选项:
-c 统计重复行的次数
-d 只显示重复的行
-u 只显示不重复的行
[root@oldboyedu ~]# cat >> uniq.txt <<EOF
abc
123
abc
123
EOF
[root@oldboyedu ~]# cat uniq.txt
abc
123
abc
123
[root@oldboyedu ~]# sort uniq.txt
123
123
abc
abc
[root@oldboyedu ~]# sort uniq.txt | uniq
123
abc
[root@oldboyedu ~]# sort uniq.txt | uniq -c
2 123
2 abc
[root@oldboyedu ~]# echo "def" >> uniq.txt
[root@oldboyedu ~]#
[root@oldboyedu ~]#
[root@oldboyedu ~]# sort uniq.txt | uniq -c
2 123
2 abc
1 def
[root@oldboyedu ~]# sort uniq.txt | uniq -d
123
abc
[root@oldboyedu ~]# sort uniq.txt | uniq -u
def
19.wc 统计次数
选项:
-l 统计行数
-c 统计字节数
-w 统计列数,默认以空格为分隔符
[root@oldboyedu ~]# cat uniq.txt
abc
123
abc
123
def
[root@oldboyedu ~]# wc -l uniq.txt
5 uniq.txt
[root@oldboyedu ~]# wc
1 .bashrc file.txt nginx.tar.gz services
access.log .cshrc index.html oldboy/ sort.log
baidu.html file1.txt index.html.1 oldboy.log sort.txt
.bash_history file2.txt ip.txt oldboy.txt .tcshrc
.bash_logout file3.txt .lesshst passwd uniq.txt
.bash_profile file4.txt nginx-1.14.2.tar.gz .pki/ .viminfo
[root@oldboyedu ~]# wc uniq.txt
5 5 20 uniq.txt
[root@oldboyedu ~]# wc -w uniq.txt
5 uniq.txt
[root@oldboyedu ~]# wc -c uniq.txt
20 uniq.txt
[root@oldboyedu ~]# ll uniq.txt
-rw-r--r--. 1 root root 20 Jun 22 14:58 uniq.txt
[root@oldboyedu ~]# cat passwd
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ROOT
oldboy.
rootoldboy
[root@oldboyedu ~]# wc -l passwd
23 passwd
[root@oldboyedu ~]# wc -w passwd
41 passwd
[root@oldboyedu ~]# head passwd
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@oldboyedu ~]# head passwd | wc -w
10
[root@oldboyedu ~]# cat uniq.txt
abc
123
abc
123
def
[root@oldboyedu ~]# vi uniq.txt
[root@oldboyedu ~]#
[root@oldboyedu ~]#
[root@oldboyedu ~]# wc -w uniq.txt
6 uniq.txt
[root@oldboyedu ~]# cat uniq.txt
abc hfkh:ksfhnrkghkeljg
123
abc
123
def
[root@oldboyedu ~]#
19.tr 替换,单对单的替换
选项:
-d 删除字符
[root@oldboyedu ~]# cat uniq.txt
abc hfkh:ksfhnrkghkeljg
123
abc
123
def
[root@oldboyedu ~]# tr '1' 'o' uniq.txt
tr: extra operand ‘uniq.txt’
Try 'tr --help' for more information.
[root@oldboyedu ~]# tr '1' 'o' <uniq.txt
abc hfkh:ksfhnrkghkeljg
o23
abc
o23
def
[root@oldboyedu ~]# tr '1' 'o' < uniq.txt
abc hfkh:ksfhnrkghkeljg
o23
abc
o23
def
[root@oldboyedu ~]# tr '123' 'old' < uniq.txt
abc hfkh:ksfhnrkghkeljg
old
abc
old
def
[root@oldboyedu ~]# echo "1" >>uniq.txt
[root@oldboyedu ~]#
[root@oldboyedu ~]#
[root@oldboyedu ~]# tr '123' 'old' < uniq.txt
abc hfkh:ksfhnrkghkeljg
old
abc
old
def
o
[root@oldboyedu ~]# echo "2" >>uniq.txt
[root@oldboyedu ~]# tr '123' 'old' < uniq.txt
abc hfkh:ksfhnrkghkeljg
old
abc
old
def
o
l
[root@oldboyedu ~]# cat uniq.txt
abc hfkh:ksfhnrkghkeljg
123
abc
123
def
1
2
[root@oldboyedu ~]# tr -d '1' < uniq.txt
abc hfkh:ksfhnrkghkeljg
23
abc
23
def
2
[root@oldboyedu ~]# tr -d '1a' < uniq.txt
bc hfkh:ksfhnrkghkeljg
23
bc
23
def
2
[root@oldboyedu ~]#
20.cut 截取一段字符,取列。
选项:
-d 指定分隔符
-f 取出指定的列
[root@oldboyedu ~]# echo "I'm zls,18 years old QQ 133411023" > file5.txt
[root@oldboyedu ~]# cat file5.txt
I'm zls,18 years old QQ 133411023
[root@oldboyedu ~]# cut -d ' ' -f4,6 file5.txt
old 133411023
[root@oldboyedu ~]# cat file5.txt
I'm zls,18 years old QQ 133411023
[root@oldboyedu ~]# tr ',' ' ' < file5.txt
I'm zls 18 years old QQ 133411023
[root@oldboyedu ~]# tr ',' ' ' < file5.txt | cut -d ' ' -f2,7
zls 133411023
21.sed 文本处理工具,三剑客老二,行操作
sed 后面参数:
-n 取消默认输出 ,只打印模式匹配的行
-e 直接在命令行模式上进行sed动作编辑,此为默认选项
-i 确定真的修改文件内容
-r 支持扩展正则表达式使用
sed '' 引号里面的参数:
p 打印当前内容
d 删除当前行
d 过滤,排除 d(delete)删除
s 替换
g 表示全局
; 多条命令分隔符,取不连续的多行
, 多条命令分隔符,取连续的多行
取出行
[root@oldboyedu ~]# cat sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
106,$lidao,UFO
[root@oldboyedu ~]# sed -n '2p' sed.txt
102,$zhangyao,CTO
[root@oldboyedu ~]# sed -n '2,4p' sed.txt
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
[root@oldboyedu ~]# sed -n '2p;4p' sed.txt
102,$zhangyao,CTO
104,$yy,CFO
删除行
[root@oldboyedu ~]# sed '2d' sed.txt
101,$oldboy,CEO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
106,$lidao,UFO
[root@oldboyedu ~]# sed '2,4d' sed.txt
101,$oldboy,CEO
105,$feixue,CIO
106,$lidao,UFO
[root@oldboyedu ~]# sed '2d;4d' sed.txt
101,$oldboy,CEO
103,$Alex,COO
105,$feixue,CIO
106,$lidao,UFO
过滤字符串
要加参数-r,表示支持正则匹配
[root@oldboyedu ~]# sed -n '/oldboy/p' sed.txt
101,$oldboy,CEO
[root@oldboyedu ~]# sed -n '/oldboy|feixue/p' sed.txt
[root@oldboyedu ~]# sed -nr '/oldboy|feixue/p' sed.txt
101,$oldboy,CEO
105,$feixue,CIO
排除
[root@oldboyedu ~]# sed '/oldboy/d' sed.txt
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
106,$lidao,UFO
替换
s:替换 g:表示全局
格式: 's#参数1#参数2#g' 参数1表示要替换谁,参数2表示要替换成什么
[root@oldboyedu ~]# sed 's#lidao#qiudao#g' sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
106,$qiudao,UFO
[root@oldboyedu ~]# cat sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
106,$lidao,UFO
[root@oldboyedu ~]# sed -i 's#lidao#qiudao#g' sed.txt
[root@oldboyedu ~]# cat sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
106,$qiudao,UFO
[root@oldboyedu ~]#
[root@oldboyedu ~]# cat file5.txt
I'm zls,18 years old QQ 133411023
[root@oldboyedu ~]# sed 's#,# #g' file5.txt
I'm zls 18 years old QQ 133411023
[root@oldboyedu ~]# sed 's#,# #g' file5.txt | cut -d ' ' -f2,7
zls 133411023
[root@oldboyedu ~]#
22.awk 取列,统计,计算。
格式:awk '{print 0:一整行的内容,NR:行号```
选项说明:
-F #指定分割符,多个分隔符
NR #行号
$n #取某一列
$NF #最后一列
$0 #整行内容
print #显示内容
! #取反
取行
[root@oldboyedu ~]# awk '{print $0,NR}' awk.txt
101,$oldboy,CEO 1
102,$zhangyao,CTO 2
103,$Alex,COO 3
104,$yy,CFO 4
105,$feixue,CIO 5
106,$qiudao,UFO 6
[root@oldboyedu ~]# awk 'NR==2,NR==4' awk.txt
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
[root@oldboyedu ~]# awk 'NR>1&& NR<5' awk.txt
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
[root@oldboyedu ~]# awk 'NR>=2 && NR <=4' awk.txt
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
取列
要分割必须加参数-F, []中括号内放分隔符,可以放多个
[root@oldboyedu ~]# cat file5.txt
I'm zls,18 years old QQ 133411023
[root@oldboyedu ~]# awk -F '[ ,]' '{print $2,$7}' file5.txt
zls 133411023
[root@oldboyedu ~]# cat awk.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
106,$qiudao,UFO
[root@oldboyedu ~]# awk -F, '{print $3}' awk.txt
CEO
CTO
COO
CFO
CIO
UFO
[root@oldboyedu ~]# awk -F, '{print $NF}' awk.txt
CEO
CTO
COO
CFO
CIO
UFO
[root@oldboyedu ~]# awk -F, '{print $2}' awk.txt
$oldboy
$zhangyao
$Alex
$yy
$feixue
$qiudao
[root@oldboyedu ~]# awk -F, '{print $(NF-1)}' awk.txt
$oldboy
$zhangyao
$Alex
$yy
$feixue
$qiudao
[root@oldboyedu ~]#
过滤字符串
[root@oldboyedu ~]# awk '/oldboy/' awk.txt
101,$oldboy,CEO
[root@oldboyedu ~]# awk '/oldboy|qiudao/' awk.txt
101,$oldboy,CEO
106,$qiudao,UFO
[root@oldboyedu ~]# awk '/oldboy/' awk.txt
101,$oldboy,CEO
[root@oldboyedu ~]# awk '!/oldboy/' awk.txt
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
106,$qiudao,UFO
练习题
1.已知sort.log文件内容如下,请根据文件内容的第二列进行倒序排序。
cat >>sort.log<<'EOF'
218.65.30.25 68652
218.65.30.53 34326
218.87.109.154 21201
112.85.42.103 18065
112.85.42.99 17164
218.87.109.151 17163
218.87.109.150 17163
218.65.30.61 17163
218.65.30.126 17163
218.65.30.124 17163
EOF
[root@oldboyedu ~]# sort -rnk2 sort.log
[root@oldboyedu ~]# sort -rnk2 sort.log |column -t
2.统计系统文件/etc/services有多少行。
[root@oldboyedu ~]# wc -l /etc/services
11176 /etc/services
[root@oldboyedu ~]# cat -n /etc/services | tail -1
11176 matahari 49000/tcp # Matahari Broker
[root@oldboyedu ~]# grep -n "." /etc/services |tail -1
11176:matahari 49000/tcp # Matahari Broker
[root@oldboyedu ~]# sed = /etc/services |tail -2
11176
matahari 49000/tcp # Matahari Broker
[root@oldboyedu ~]# awk '{print $0,NR}' /etc/services |tail -1
matahari 49000/tcp # Matahari Broker 11176
3.已知文件内容如下,请对该文件的字符串出现的次数进行统计,并从小到大的进行排序出来。
cat>uniq.txt<<'EOF'
oldboy
oldgirl
oldboy
egon
student
oldgirl
oldboy
EOF
[root@oldboyedu ~]# sort uniq.txt |uniq -c |sort -n
1 egon
1 student
2 oldgirl
3 oldboy
4.取出系统中的文件/etc/passwd的第七列(以:为分隔符)。
[root@oldboyedu ~]# awk -F: '{print $NF}' /etc/passwd
[root@oldboyedu ~]# awk -F: '{print $7}' /etc/passwd
[root@oldboyedu ~]# cut -d ':' -f7 /etc/passwd
5.已知文件test.txt内容如下,请给出输出test.txt文件内容时,不包含oldboy字符串的命令。
test
qiudao
oldboy
[root@oldboyedu ~]# grep -v "oldboy" test.txt
test
qiudao
[root@oldboyedu ~]# sed '/oldboy/d' test.txt
test
qiudao
[root@oldboyedu ~]# awk '!/oldboy/' test.txt
test
qiudao
[root@oldboyedu ~]# head -2 test.txt
test
qiudao
6.只查看/etc/passwd文件内第5到第15行的内容
[root@oldboyedu ~]# head -15 /etc/passwd |tail -11
[root@oldboyedu ~]# sed -n '5,15p' /etc/passwd
[root@oldboyedu ~]# awk 'NR==5,NR==15' /etc/passwd
[root@oldboyedu ~]# awk 'NR>4&&NR<16' /etc/passwd
[root@oldboyedu ~]# awk 'NR>=5&&NR<=15' /etc/passwd
7.把test.txt文件中的oldboy替换为oldgirl,给出命令
[root@oldboyedu ~]# sed -i 's#oldboy#oldgirl#g' awk.txt
[root@oldboyedu ~]# sed -i.bak 's#oldboy#oldgirl#g' awk.txt
8.test.txt 的内容如下,要求过滤出不包含alex的行。
oldboy
oldgirl
alex
9.把文件/etc/passwd文件中的/sbin/nologin替换为/bin/bash
10.把/etc/selinux/config文件中的SELINUX=enforcing行中的enforcing替换成disabled
11.现将文件b.txt 中的所有123替换成def,请问如何实现?
12.请执行命令取出linux中eth0的IP地址(请用cut,有能力者也可分别用awk,sed命令答)。
[root@oldboyedu ~]# ip address show eth0 | grep -w inet |tr '/' ' ' |cut -d ' ' -f6
10.0.0.100
[root@oldboyedu ~]# ip address show eth0 | grep -w inet |cut -d ' ' -f 6 |cut -d '/' -f1
10.0.0.100
[root@oldboyedu ~]# ip address show eth0 | grep -w inet |sed 's#/# #g' |cut -d ' ' -f6
10.0.0.100
[root@oldboyedu ~]# ip a s eth0 |awk 'NR==3' |awk -F '[ /]' '{print $6}'
10.0.0.100
[root@oldboyedu ~]# ip a s eth0 |awk 'NR==3' |awk -F '[ /]*' '{print $3}'
10.0.0.100
[root@oldboyedu ~]# ip a s eth0 |awk -F '[ /]' 'NR==3{print $6}'
10.0.0.100
13.使用命令调换/etc/passwd文件里 root 位置和/bin/bash 位置? 即将所有的第一列和最后一列位置调换?
[root@oldboyedu ~]# awk -F: '{print $7":"$2":"$3":"$4":"$5":"$6":"$1}' passwd
14.删除/etc/passwd文件的前三行内容。
文件属性
[root@oldboyedu ~]# ll
-rw-r--r--. 1 root root 58817074 Sep 21 2017 access.log
- 文件的类型
- rw-r--r-- 文件的权限
- 1 文件的硬链接数
- root 文件的属主
- root 文件的属组
- 58817074 文件的大小
7-9 Sep 21 2017 文件的最后修改时间
10 access.log 文件名,不属于文件属性
- 普通文件
d 目录
l 链接文件
b 块设备
c 字符设备
s 套接字文件
p 管道文件
.txt
.log
.conf
.xml
.html
.sh
.gz
.mp3
.py
扩展名只是为了方便运维人员使用,没有其他任何意义。
文件的链接
软链接
Linux中的软链接文件类似于Windows系统中的 ”快捷键方式“ 里面具体存放的是源文件的路径,并指向源文件实体,因此通过访问这个 ”快捷方式“ 可迅速访问到源文件。软链接文件类型是l,
[root@oldboyedu ~]# mkdir oldboy/data/
[root@oldboyedu ~]# cd oldboy/data/
[root@oldboyedu data]# touch oldboy.txt
[root@oldboyedu data]# cd
[root@oldboyedu ~]# ln -s /root/oldboy/data/oldboy.txt /root/oldgirl.txt
[root@oldboyedu ~]# ll /root/oldgirl.txt
lrwxrwxrwx. 1 root root 28 Jun 22 17:04 /root/oldgirl.txt -> /root/oldboy/data/oldboy.txt
[root@oldboyedu ~]# echo "123" > /root/oldgirl.txt
[root@oldboyedu ~]# cat /root/oldgirl.txt
123
[root@oldboyedu ~]# cat /root/oldboy/data/oldboy.txt
123
版本升级
[root@oldboyedu ~]# mkdir nginx-1.14
[root@oldboyedu ~]# ln -s nginx-1.14 nginx
[root@oldboyedu ~]# mkdir nginx-1.16
[root@oldboyedu ~]# rm -f nginx && ln -s nginx-1.16 nginx
版本回退
[root@oldboyedu ~]# rm -f nginx && ln -s nginx-1.14 nginx
[root@oldboyedu ~]# ll -i nginx
67160163 lrwxrwxrwx. 1 root root 10 Jun 22 17:08 nginx -> nginx-1.16
[root@oldboyedu ~]# ll -i nginx-1.16
total 0
[root@oldboyedu ~]# ll -i -d nginx-1.16
101703610 drwxr-xr-x. 2 root root 6 Jun 22 17:07 nginx-1.16
硬链接
Linux文件系统中, 多个文件名指向同一个索引节点Inode是正常且允许的(文件的多个有效的入口),这种情况文件
称为硬链接。
[root@oldboyedu ~]# ln passwd passwd.lk
[root@oldboyedu ~]# ll -i passwd*
67160142 -rw-r--r--. 2 root root 962 Jun 22 11:27 passwd
67160142 -rw-r--r--. 2 root root 962 Jun 22 11:27 passwd.lk
[root@oldboyedu ~]# \rm -f passwd
[root@oldboyedu ~]# ll passwd.lk
-rw-r--r--. 1 root root 962 Jun 22 11:27 passwd.lk
[root@oldboyedu ~]# cat passwd.lk
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
软链接和硬链接的区别
1.从定义:linux系统中,链接有两种,一种被称为软链接,类似于快捷方式,存放指向原文件inode的信息,与原文件inode不同。一种是硬链接,与原文件有相同的inode,可以指向数据block。
2.从创建方式:硬链接命令 ln [原文件] [目标文件],软链接命令ln –s [原文件] [目标文件]
3.从创建对象:ln命令不能对目录创建硬链接,但是可以对目录创建软链接。因为软链接可以跨越文件系统,硬链接则不能。对目录和为客户创建的文件软链接经常用到。
4.删除软链接文件,对硬链接和原文件无影响。
5.删除文件硬链接,对原文件及软链接文件无影响
6.删除原文件,对硬链接读取数据无影响,软链接则失效。会出现红底白字状。
7.同时删除原文件和硬链接,原文件才会被真正删除
8.很多硬件设备中的快照原理,类似于硬链接原理
命令的执行方式
是否使用绝对路径
判断命令是否有别名
判断是否是内部命令 type -a
判断命令缓存列表是否存在命令缓存
[root@oldboyedu ~]# hash -d ip #删除命令缓存列表中对应的命令
[root@oldboyedu ~]# hash -r #清空命令缓存列表
[root@oldboyedu ~]# hash
执行命令,有就执行成功,没有报错,命令找不到。
[root@oldboyedu ~]# qiudao
-bash: qiudao: command not found
vim 文本编辑工具
vim三种模式
普通模式:进入文本当中就是普通模式,可以对文件进行删除,复制,粘贴等操作。
编辑模式:需要由普通模式进入到编辑模式,可以对文件修改等操作。
底行模式:保存文件,退出文件等。
安装vim命令
[root@oldboyedu ~]# yum install -y vim
普通模式
1.普通模式光标跳转
G #光标跳转至文件的最后一行 shift+g
gg #光标跳转至文件的第一行
Ngg #光标跳转至当前文件的Number行
$ #光标跳转至光标所在行的尾部
^|0 #光标跳转至光标所在行的首部
2.文件内容较多
ctrl+f #往下翻页(行比较多)
ctrl+b #往上翻页
3.复制与粘贴
yy #复制当前光标所在的行
5yy #复制当前光标以及光标向下4行
p(小写) #粘贴至当前光标下一行
P(大写) #粘贴至当前光标上一行
4.删除、剪贴、撤销
dd #删除当前光标所在的行
4dd #删除当前光标所在的行以及往下的3行
dG #删除当前光标及以后的所有行
D #删除当前光标及光标以后的内容
x #删除当前光标标记往后的字符,跟delete键功能一样
X #删除当前光标标记往前的字符
dd & p #剪贴、先删除dd(number dd),后粘贴p
u #撤销上一次的操作
5.替换
r #替换当前光标标记的单个字符
R #进入REPLACE模式, 连续替换,ESC结束
1.跳转到某行时使用
2.复制server{ 到 }结尾的这一行, 粘贴到 } 结尾的下一行
3.删除listen相关的所有行
4.将server_name 替换为SERVER_NAME
5.删除oldboy.com,boy删除
6.撤销一次
编辑模式
i #进入编辑模式,光标不做任何操作,内容输出在光标之前。
a #进入编辑模式,将当前光标往后一位
o #进入编辑模式,并在当前光标下添加一行空白内容
I #进入编辑模式,并且光标会跳转至本行的头部
A #进入编辑模式,将光标移动至本行的尾部
O #进入编辑模式,并在当前光标上添加一行空白内容
C #删除当前光标及光标以后的内容并进入编辑模式
练习
l1.新建一个文件,进入编辑模式,粘贴如下内容
[root@www ~]# cat file.txt
server {
listen 80;
server_name test.oldboy.com;
index index.html;
}
2.在编辑模式下修改 test.oldboy.com为test.ett.com
3.在index 最后面,添加index.php
4.在index行下面插入一行内容为:root html;。
5.退出编辑模式
底行模式
1.文件保存与退出
:w #保存当前状态
:q #退出当前文档
:wq #先保存,在退出
:x #先保存,在退出
ZZ #保存退出, shfit+zz
:q! #强制退出文档不会修改当前内容(常用)
:w! #强制保存当前状态(不常用)
:wq! #强制保存并退出(忽略)
:number #跳转至对应的行号 和在普通模式下用Ngg一个意思
2.文件内容查找
/oldboy #需要搜索的内容(查找)
n #按搜索到的内容依次往下进行查找
N #按搜索到的内容依次往上进行查找
3.文件内容替换sed 's###g'
:%s#sbin#test#g #替换整个文本文件中包含sbin的替换为test
:1,5s#sbin#test#g #替换1-5行中包含sbin的内容为test
4.vim变量
:set nu #显示行号
:set nonu #取消显示行号
:set list #给每行内容的结尾加个标识符
:set nolist #取消显示标识符
Vim练习题一
1.将/etc/passwd 复制到/root/目录下,并重命名为test.txt
2.用vim打开test.txt并显示行号
3.分别向下、向右、向左、向右移动5个字符,分别向下、向上翻两页
4.把光标移动到第10行,让光标移动到行末,再移动到行首,移动到test.txt文件的最后一行,移动到文件的首行
5.搜索文件中出现的 root 并数一下一共出现多少个
6.把从第一行到第三行出现的root 替换成admin,然后还原上一步操作
8.把整个文件中所有的root替换成admin
9.把光标移动到20行,删除本行,还原上一步操作
11.删除从5行到10行的所有内容,还原上一步操作
12.复制2行并粘贴到11行下面,还原上一步操作(按两次u)
13.复制从11行到15行的内容并粘贴到8行上面,还原上一步操作(按两次u)
14.把13行到18行的内容移动文件的尾部,还原上一步操作(按两次u)
15.将文件中所有的/sbin/nologin为/bin/bash
16.在第一行下面插入新的一行,并输入"# Hello!"
17.保存文档并退出
视图模式
批量删除字符:进入批量编辑模式(可视块)ctrl+v
选择 #上下左右(方向键)
删除 #d
批量增加字符:进入批量编辑模式(可视块)ctrl+v
选择区域 #上下左右(方向键)
输入shift+i进入编辑模式
编辑内容
按下ESC键退出,内容会自动添加上
批量删除多行:进入批量编辑模式(可视行)shift+v
选择区域 #上下左右(方向键)
删除 #d
批量复制多行:进入批量编辑模式(可视行)shift+v
选择区域 #上下左右(方向键)
复制 #y
粘贴 #p
vim故障
模拟故障:
编辑文件的时候断开连接即可(断网或断电)
重新连接服务器
再次进行编辑文件
故障报错:
Found a swap file by the name ".vim.log.swp"
Swap file ".vim.log.swp" already exists
故障解决:
删除临时文件或者先恢复内容再删除
使用-r选项进行恢复。
根据文件回答下列习题
[root@www ~]# cat proxy.conf
server {
Listen 8080;
Server_Name vim.OldboyEDU.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forward-for;
proxy_intercept_errors on;
proxy_next_upstream error timeout;
proxy_next_upstream_timeout 3s;
proxy_next_upstream_tries 2;
error_page 500 502 403 404 = /proxy_error.html;
}
location = /proxy_error.html {
root /code/proxy;
}
}
1.使用vim打开proxy.conf文件
2.修改Listen为listen小写,并将8080修改为80
3.修改ServerName为server_name小写。
4.修改vim.OldboyEDU.com为vim.oldboy.com
5.在server_name行下插入一行 root /code;
5.复制5-14行的内容,然后将其粘贴到14行下面
6.删除与proxy_set_header相关的两行全部删除
7.如上操作完成后,在13-20行前面加上#号
8.删除21-23的行,然后保存当前文件
文件内容比对
相同文件之间差异对比,通常用于对比修改前后的差异。
diff #文件对比(No)
vimdiff #以vim方式打开两个文件对比,高亮显示不同的内容
文件执行过程
Vi/Vim执行过程:
1.打开一个文件oldboy.txt.
2.进入编辑模式,开始编辑内容
3.编辑文件的时候,vim会自动创建一个临时文件。(.oldboy.txt.swap)
4.编辑完成,vim会自动删除临时文件
5.退出,修改成功