文章目录
本章节目标:
了解linux文件层级系统
掌握重定向的使用
掌握vi/vim编辑器
实验步骤:
文件层级系统
FHS:文件层级系统
/:根分区
[root@sh ~]# cd /
[root@sh /]# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
/boot:系统启动相关的文件,如内核(vmlinuz)、initrd(initramfs)以及grub(bootloader)
[root@sh /]# cd /boot/
[root@sh boot]# ls
config-3.10.0-693.el7.x86_64
efi
grub2
initramfs-0-rescue-45bb5dbec89e4e3abf2f495c53f2bfa9.img
initramfs-3.10.0-693.el7.x86_64.img
initramfs-3.10.0-693.el7.x86_64kdump.img
initrd-plymouth.img
symvers-3.10.0-693.el7.x86_64.gz
System.map-3.10.0-693.el7.x86_64
vmlinuz-0-rescue-45bb5dbec89e4e3abf2f495c53f2bfa9
vmlinuz-3.10.0-693.el7.x86_64
/dev:设备文件,不能单独分区
[root@sh /]# cd /dev/
[root@sh dev]# ls
agpgart kmsg sg1 tty25 tty5 usbmon1
autofs log shm tty26 tty50 usbmon2
block loop-control snapshot tty27 tty51 vcs
bsg mapper snd tty28 tty52 vcs1
btrfs-control mcelog sr0 tty29 tty53 vcs2
bus mem stderr tty3 tty54 vcs3
cdrom mqueue stdin tty30 tty55 vcs4
char net stdout tty31 tty56 vcs5
console network_latency tty tty32 tty57 vcs6
core network_throughput tty0 tty33 tty58 vcsa
cpu null tty1 tty34 tty59 vcsa1
cpu_dma_latency nvram tty10 tty35 tty6 vcsa2
crash oldmem tty11 tty36 tty60 vcsa3
disk port tty12 tty37 tty61 vcsa4
dm-0 ppp tty13 tty38 tty62 vcsa5
dm-1 ptmx tty14 tty39 tty63 vcsa6
dri pts tty15 tty4 tty7 vfio
fb0 random tty16 tty40 tty8 vga_arbiter
fd raw tty17 tty41 tty9 vhci
full rfkill tty18 tty42 ttyS0 vhost-net
fuse rhel tty19 tty43 ttyS1 vmci
hidraw0 rtc tty2 tty44 ttyS2 vsock
hpet rtc0 tty20 tty45 ttyS3 zero
hugepages sda tty21 tty46 uhid
hwrng sda1 tty22 tty47 uinput
initctl sda2 tty23 tty48 urandom
input sg0 tty24 tty49 usbmon0
/etc:配置文件目录
[root@sh ~]# cd /etc
[root@sh etc]# ls
adjtime hosts.deny rc1.d
aliases init.d rc2.d
aliases.db inittab rc3.d
alternatives inputrc rc4.d
anacrontab iproute2 rc5.d
audisp issue.net rc.d
audit kdump.conf rc.local
bash_completion.d kernel redhat-release
bashrc krb5.conf resolv.conf
/home:普通用户家目录
[root@sh etc]# cd /home/
[root@sh home]# useradd xx
[root@sh home]# ls
xx
/root:管理员家目录
[root@sh home]# cd
[root@sh ~]# ls
anaconda-ks.cfg vsftpd.con
/lib:库文件目录
[root@sh ~]# cd /lib
[root@sh lib]# ls
binfmt.d grub modules sendmail tuned
debug kbd modules-load.d sendmail.postfix udev
dracut kdump NetworkManager sse2 yum-plugins
firewalld kernel polkit-1 sysctl.d
firmware locale python2.7 systemd
games modprobe.d rpm tmpfiles.d
/media:挂载点目录,通常用来挂载移动设备
/mnt:挂载点目录,通常用来挂载额外的临时文件系统,比如另一块硬盘
[root@sh mnt]# ls
addons images repodata
EFI isolinux RPM-GPG-KEY-redhat-beta
EULA LiveOS RPM-GPG-KEY-redhat-release
extra_files.json media.repo TRANS.TBL
GPL Packages
/opt:可选目录,早期通过用来安装第三方软件
[root@sh opt]# ls
123.tar.gz 456.tar.bz2 a anaconda-ks.cfg
/proc:伪文件系统,内核映射文件,不能单独分区
[root@sh proc]# ls
1 2541 329 354 378 580 751 interrupts scsi
10 2546 330 355 379 584 752 iomem self
1163 2550 331 356 38 60 754 ioports slabinfo
1165 2586 332 357 380 602 773 irq softirqs
1175 2587 333 358 381 611 788 kallsyms stat
1191 26 334 359 382 645 8 kcore swaps
12 27 335 36 39 647 9 keys sys
13 273 336 360 41 648 92 key-users sysrq-trigger
14 274 337 361 453 652 953 kmsg sysvipc
1419 275 338 362 454 655 acpi kpagecount timer_list
1421 28 339 363 465 658 buddyinfo kpageflags timer_stats
1478 283 340 364 466 661 bus loadavg tty
15 284 341 365 479 663 cgroups locks uptime
16 285 342 366 480 665 cmdline mdstat version
1690 288 343 367 481 667 consoles meminfo vmallocinfo
17 290 344 368 482 669 cpuinfo misc vmstat
18 292 345 369 483 671 crypto modules zoneinfo
19 295 346 370 484 7 devices mounts
2 3 347 371 485 707 diskstats mpt
2129 323 348 372 486 732 dma mtrr
2133 324 349 373 487 738 driver net
2185 325 350 374 488 740 execdomains pagetypeinfo
2359 326 351 375 489 741 fb partitions
25 327 352 376 5 742 filesystems sched_debug
2535 328 353 377 557 743 fs schedstat
/sys:伪文件系统,跟硬件设备相关的属性映射文件,不能单独分区
[root@sh proc]# cd /sys/
[root@sh sys]# ls
block class devices fs kernel power
bus dev firmware hypervisor module
/tmp:临时文件目录
[root@sh sys]# cd /tmp
[root@sh tmp]# ls
ks-script-9juPkV.bz2
systemd-private-0ef4fc9689b94072b746c5a246474a9e-chronyd.service-eCSpmF
systemd-private-0ef4fc9689b94072b746c5a246474a9e-vgauthd.service-wvb0Yb
systemd-private-0ef4fc9689b94072b746c5a246474a9e-vmtoolsd.service-I0WHCV
systemd-private-7ceb34d638664ccea235651e67687b2b-chronyd.service-jFwEbV
systemd-private-7ceb34d638664ccea235651e67687b2b-vgauthd.service-C1cncp
systemd-private-7ceb34d638664ccea235651e67687b2b-vmtoolsd.service-rgUA79
/var:可变化的文件,比如log、cache。存放日志文件、pid文件、lock文件
[root@sh tmp]# cd /var
[root@sh var]# ls
adm db games lib log opt spool
cache empty gopher local mail preserve tmp
crash ftp kerberos lock nis run yp
/bin:可执行文件,用户命令
[root@sh var]# cd /bin/
[root@sh bin]# ls
[ nl-list-sockets
a2p nl-monitor
addr2line nl-neigh-add
alias nl-neigh-delete
apropos nl-neigh-list
ar nl-neightbl-list
/sbin:管理命令
[root@sh bin]# cd /sbin/
[root@sh sbin]# ls
accessdb mke2fs
addgnupghome mkfs
addpart mkfs.btrfs
adduser mkfs.cramfs
agetty mkfs.ext2
alternatives mkfs.ext3
anacron mkfs.ext4
applygnupgdefaults mkfs.minix
/usr:全局共享只读文件。提供操作系统核心功能,可以单独分区
/usr/bin
/usr/sbin
/usr/lib
/usr/local:第三方软件安装路径
/usr/local/bin
/usr/local/sbin
/usr/local/lib
/usr/local/etc
/usr/local/man
重定向
系统设定:
默认输入设备:标准输入,STDIN,0(键盘)
默认输出设备:标准输出,STDOUT,1(显示器)
标准错误输出:标准错误,STDERR,2(显示器)
I/O重定向:
>:覆盖输出
[root@sh ~]# echo 'abc' > 1
[root@sh ~]# cat 1
abc
>>:追加输出
[root@sh ~]# echo '123' >> 1
[root@sh ~]# cat 1
abc
123
2>:重定向错误输出
[root@sh ~]# lj
-bash: lj: 未找到命令
[root@sh ~]# lj 2> 1
[root@sh ~]# cat 1
-bash: lj: 未找到命令
&>:覆盖重定向标准输出和错误输出至同一文件
[root@sh ~]# ls &> 1
[root@sh ~]# cat 1
1
anaconda-ks.cfg
vsftpd.conf
[root@sh ~]# lj &> 1
[root@sh ~]# cat 1
-bash: lj: 未找到命令
管道
使用格式:命令1|命令2|命令3…
[root@sh ~]# cat -n anaconda-ks.cfg | head -1
1 #version=DEVEL
tee命令:从标准输入读取数据,输出一份到屏幕,一份保存到文件
[root@sh ~]# echo 'hello word ' | tee /root/3
hello word
[root@sh ~]# cat 3
hello word
Linux下的编辑器
Linux下常见的文本编辑器有:
emacs
pico
nano
joe
jed
vi
vi编辑器
vi编辑器是linux和unix上最基本的文本编辑器,工作在字符模式下。由于不需要图形界面,vi是效率很高的文本编辑器。尽管在linux上也有很多图形界面的编辑器可用,但vi在系统和服务器管理中的功能是那些图形编辑器所无法比拟的。
vi编辑器可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。
vim是vi的增强版,比vi更容易使用。vi的命令几乎都可以在vim上使用。
vi/vim的特点
vi/vim是一种纯文本编辑器,它不像word可以排版,可以调整字体大小,可以改变字体等等。
vi/vim只是一个文本编辑工具,只能对文本的内容进行操作,比如新增内容、修改内容、删除内容等等
vi/vim的三种编辑模式
命令模式:用户执行命令
输入模式:用于用户输入文本、修改文本
末行模式:用于查找文本、保存修改
vi/vim的三种模式间的转换的方式
命令模式–>输入模式
i:insert,在当前光标所在字符的前面,转为输入模式
I:大写的i,在当前光标所在行的行首转换为输入模式
a:append,在当前光标所在字符的后面转换为输入模式
A:在当前光标所在行的行尾转换为输入模式
o:open,在当前光标所在行的下方新建一行并转为输入模式
O:大写的o,不是数字0,在当前光标所在行的上方新建一行并转换为输入模式
模式切换
输入模式–>命令模式
ESC
命令模式–>末行模式
:
末行模式–>命令模式
ESC ESC
打开文件方式
vim filename //打开文件
[root@sh ~]# vi 1
vim +n filename //打开文件并定位到第n行
vim +/pattern filename //打开文件并定位到第一次被/pattern匹配到的内容行首
关闭文件方式
命令 | 方式 |
---|---|
q | 退出 |
wq | 保存退出 |
w | 保存 |
q! | 强制退出 |
wq! | 强制保存退出 |
ZZ | 保存退出 |
移动光标的方式
移动光标的方式 | 移动方法 | 意义 |
---|---|---|
逐字符移动 | h l j k #h #l #j #k | 向左移动一个字符 向右移动一个字符 向下移动一个字符 向上移动一个字符 向左移动#个字符 向右移动#个字符 向下移动#个字符 向上移动#个字符 |
以单词为单位移动 | w e b #w #e #b | 移动至下一个单词的词首 跳至当前或下一个单词的词尾 跳至当前或上一个单词的词首 以当前光标为起点跳至第#个单词的词首 以当前光标为起点跳至第#个单词的词尾 以当前光标为起点跳至第#个单词的词首 |
行内跳转 | 0 ^ $ | 数字0,跳转到绝对行首 跳转到行首的第一个非空白字符 跳转到绝对行尾 |
行间跳转 | gg G #gg #G | 跳转到第一行 跳转到最后一行 跳转至第#行 跳转至第#行 |
翻屏 | ctrl+f ctrl+b ctrl+d ctrl+u | 向下翻一屏 向上翻一屏 向下翻半屏 向上翻半屏 |
字符编辑
x:删除光标所在处的单个字符
#x:删除光标所在处及其向后#个字符
xp:交换光标所在处及其后面字符的位置
删除命令:d
d$:表示删除当前光标所在位置到行尾的内容
d^:表示删除当前光标所在位置到第一个行首非空白字符位置的内容
d0:表示删除当前光标所在位置到绝对行首的内容
#d跳转符:删除跳转符指定范围内的#个【删除右边5个字符(5d–>)】
#dw
#de【向后删除#个字符】
#db【向前删除#个字符】
dd:删除当前光标所在行整行
#dd:删除包括当前光标所在行在内的#行
D:删除当前光标所在行的内容,保留空行
末行模式下d命令的使用:
startADD,endADDd
复制与黏贴
复制命令yy
黏贴命令p:光标下方黏贴
黏贴命令P:光标上方黏贴
替换、撤销编辑与反复编辑操作
替换r
R:替换模式,替换多个字符
r#:将当前光标字符替换成#,#可以是任何字符
撤销编辑:u
#u:直接撤销此前的#次操作
ctrl+r:还原最近一次撤销操作
重复前一次编辑操作: .
可视化文本查找:
可视化模式:可视化模式下可以对选取的内容进行前面讲的所有编辑操作
v:按字符选取内容
V:按矩形快(行)选取内容
文本查找:
/pattern:从上往下查找匹配的内容
?pattern:从下往上查找匹配的内容
n:可视化模式下可以对选取的内容进行前面讲的所有编辑操作
查找并替换与行号控制:
查找并替换:s
s命令只能在末行模式下使用,
使用格式:
ADDR1,ADDR2 s/pattern/pattern/g
末行模式下显示与取消显示行号
set nu:显示行号
set nonu:取消显示行号
startADD,endADDd
复制与黏贴
复制命令yy
黏贴命令p:光标下方黏贴
黏贴命令P:光标上方黏贴
替换、撤销编辑与反复编辑操作
替换r
R:替换模式,替换多个字符
r#:将当前光标字符替换成#,#可以是任何字符
撤销编辑:u
#u:直接撤销此前的#次操作
ctrl+r:还原最近一次撤销操作
重复前一次编辑操作: .
可视化文本查找:
可视化模式:可视化模式下可以对选取的内容进行前面讲的所有编辑操作
v:按字符选取内容
V:按矩形快(行)选取内容
文本查找:
/pattern:从上往下查找匹配的内容
?pattern:从下往上查找匹配的内容
n:可视化模式下可以对选取的内容进行前面讲的所有编辑操作
查找并替换与行号控制:
查找并替换:s
s命令只能在末行模式下使用,
使用格式:
ADDR1,ADDR2 s/pattern/pattern/g
末行模式下显示与取消显示行号
set nu:显示行号
set nonu:取消显示行号