马哥N49第三周作业

1、描述Linux发行版的系统目录名称命名规则以及用途。
linux各发行版都遵循LSB(Linux Standards base)规则,使用一致相关的基础目录名称,跟目录系统结构(root file system),使用FHS(Files Hierarchy Standard)层次结构。

目录名称 作用
/ 根目录
/boot 系统启动引导文件存放目录,内核文件(vmlinuxz)以及引导加载器(boot loader)都存放在此目录下
/bin 存放系统基本命令,该目录不能独立分区,os启动会使用到该目录的文件
/sbin 存放管理类的基本命令,该目录不能独立分区,os启动会使用到该目录的文件
/lib 存放系统启动时程序依赖的基本共享库文件以及内核模块文件(lib/modules)
/lib64 专用于x86_64系统上的辅助共享库文件存放
/etc 配置文件目录
/home 普通用户的家目录
/root 管理员用户的家目录
/media 移动设备挂载点
/mnt 临时文件系统挂载点
/dev 设备文件及特殊文件存储位置
/opt 第三方应用程序的安装位置
/srv 系统上运行的服务用到的数据
/tmp 临时文件存储位置
/proc 用关于输出内核与进程信息相关的虚拟文件系统,属于虚拟文件系统,内存中的数据,如内核、程序的进程、外部设备的状态、网络的状态等,处于动态变化中
/sys 用于输出当前系统上硬件设备相关信息的虚拟文件系统
/usr 全局共享只读数据,整个目录都是只读权限,在centos7以上版本/bin、/sbin实际上软链接/usr/bin、/usr/sbin
/var 常态变化的文件,包括缓存(cache)、登录文件(log file)、以及某些程序运行产生的文件,包括程序文件(lock file,run file)

2、描述文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳
信息?

元数据 含义
文件的类型 Linux中文件的类型有链接文件、块设备、字符设备、普通文件、目录文件、套接字文件、管道文件
大小 每个文件的大小
节点号(inode number) 每个分区中文件都有唯一一个节点编号,指向文件的真实数据
权限 文件的权限,有读、写、执行三种
所有者 文件的所有者
所属组 文件的所属组
时间 文件的时间属性有atime(记录最后一次访问时间)、ctime(记录最后一次元数据修改时间)、mtime(记录最后一次文件数据部分的修改时间);修改文件内容后mtime和ctime都会改变,ls显示的是mtime
  • stat命令查看文件的时间戳
[root@localhost ~]# stat anaconda-ks.cfg 
  File: anaconda-ks.cfg
  Size: 1439        Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d  Inode: 202386602   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-09-23 02:19:41.728836595 -0400  #文件的atime
Modify: 2020-08-26 13:46:15.413990590 -0400  #文件的mtime
Change: 2020-08-26 13:46:15.413990590 -0400 #文件的ctime
 Birth: -
[root@localhost ~]# 
  • touch命令修改文件的时间戳 -a选项只修改atime(也会同时修改ctime),-m选项只修改mtime(也会同时修改ctime),-t指定文件时间戳
[root@localhost ~]# stat anaconda-ks.cfg 
  File: anaconda-ks.cfg
  Size: 1439        Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d  Inode: 202386602   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-09-23 02:19:41.728836595 -0400
Modify: 2020-08-26 13:46:15.413990590 -0400
Change: 2020-08-26 13:46:15.413990590 -0400
 Birth: -
[root@localhost ~]# 
[root@localhost ~]# touch anaconda-ks.cfg  # touch已存在的文件将修改三个时间
[root@localhost ~]# stat anaconda-ks.cfg   #可以看到3个时间戳已被更改
  File: anaconda-ks.cfg
  Size: 1439        Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d  Inode: 202386602   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-10-09 05:23:00.778460556 -0400
Modify: 2020-10-09 05:23:00.778460556 -0400
Change: 2020-10-09 05:23:00.778460556 -0400
 Birth: -
[root@localhost ~]# touch -a anaconda-ks.cfg  #仅修改atime和ctime
[root@localhost ~]# stat anaconda-ks.cfg 
  File: anaconda-ks.cfg
  Size: 1439        Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d  Inode: 202386602   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-10-09 05:28:48.621068644 -0400
Modify: 2020-10-09 05:23:00.778460556 -0400
Change: 2020-10-09 05:28:48.621068644 -0400
 Birth: -
[root@localhost ~]#
[root@localhost ~]# touch -m anaconda-ks.cfg  #仅修改mtime和ctime
[root@localhost ~]# stat anaconda-ks.cfg 
  File: anaconda-ks.cfg
  Size: 1439        Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d  Inode: 202386602   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-10-09 05:28:48.621068644 -0400
Modify: 2020-10-09 05:30:21.069496032 -0400
Change: 2020-10-09 05:30:21.069496032 -0400
 Birth: -
[root@localhost ~]# 
[root@localhost ~]# touch -t 202001010000.00 anaconda-ks.cfg  #指定atime和mtime的时间戳
[root@localhost ~]# stat anaconda-ks.cfg 
  File: anaconda-ks.cfg
  Size: 1439        Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d  Inode: 202386602   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-01-01 00:00:00.000000000 -0500
Modify: 2020-01-01 00:00:00.000000000 -0500
Change: 2020-10-09 05:34:03.128522619 -0400
 Birth: -
[root@localhost ~]#

3、总结软连接和硬连接区别,并用实例操作说明。

硬链接 软链接
不可跨分区 可跨分区
不可对目录创建 可对文件和目录创建
与源文件同一个inode,相当于给一个文件创建了多个别名 会创建新的inode
与源文件属于同一个文件 不属于同一个文件
删除一个硬链接不影响其他有相同inode的文件 删除软链接并不影响被指向的文件,但若指向文件被删除,则成为死链接,重新创建被指向文件,死链接可恢复
只能对已存在的文件创建 可对不存在的文件创建
  • 本质:
    硬链接:本质是同一文件,与源文件拥有相同的data block和inode
    软链接:本质不是同一文件,与源文件拥有不同的inode
[root@localhost data]# ln nianling.txt nl.txt  #创建一个硬链接
[root@localhost data]# ll -i nianling.txt nl.txt  # 可以看到硬链接拥有相同的inode号139
139 -rw-r--r--. 2 root root 37 Oct  8 03:55 nianling.txt
139 -rw-r--r--. 2 root root 37 Oct  8 03:55 nl.txt
[root@localhost data]# cat nl.txt 
xiaoming=20
xiaohong=18
xiaoqiang=22
[root@localhost data]# 
[root@localhost data]# cat nianling.txt  #内容也是一样
xiaoming=20
xiaohong=18
xiaoqiang=22
[root@localhost data]# ln -s nianling.txt ./nl2.txt  #创建一个软链接
[root@localhost data]# ll -i nianling.txt ./nl2.txt   #两个文件拥有不同的inode号
139 -rw-r--r--. 2 root root 37 Oct  9 06:21 nianling.txt
140 lrwxrwxrwx. 1 root root 12 Oct  9 06:23 ./nl2.txt -> nianling.txt
[root@localhost data]# 
  • 跨设备:
    硬链接:不可跨设备,因为每个设备拥有自己的inode,可能会导致出现两个相同的inode
    软链接:可跨设备,因为是不同的inode
[root@localhost data]# ln nianling.txt /boot/nl.txt  #硬链接不可跨设备
ln: failed to create hard link '/boot/nl.txt' => 'nianling.txt': Invalid cross-device link
[root@localhost data]# 
[root@localhost data]# ln -s ../data/nianling.txt /boot/nl.txt  #软链接可以跨设备
[root@localhost data]# ll /boot/nl.txt
lrwxrwxrwx. 1 root root 20 Oct  9 06:32 /boot/nl.txt -> ../data/nianling.txt
[root@localhost data]# cat /boot/nl.txt
xiaoming=20
xiaohong=18
xiaoqiang=22
[root@localhost data]# 
  • 链接数:
    硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数会减少
    软链接:创建和删除软链接,链接数不会变化
[root@localhost data]# ll nianling.txt  #链接数是2
-rw-r--r--. 2 root root 37 Oct  9 06:21 nianling.txt
[root@localhost data]# 
[root@localhost data]# rm nl.txt  #删除一个硬链接
rm: remove regular file 'nl.txt'? y
[root@localhost data]# 
[root@localhost data]# ll nianling.txt #删除一个硬链接后,链接数由2减为1
-rw-r--r--. 1 root root 37 Oct  9 06:21 nianling.txt
[root@localhost data]# 
[root@localhost data]# ll nl2.txt nianling.txt  #此时源文件链接数是1
-rw-r--r--. 1 root root 37 Oct  9 06:21 nianling.txt
lrwxrwxrwx. 1 root root 12 Oct  9 06:23 nl2.txt -> nianling.txt
[root@localhost data]# 
[root@localhost data]# rm nl2.txt  #删除软链接
rm: remove symbolic link 'nl2.txt'? y
[root@localhost data]# 
[root@localhost data]# ll nianling.txt  #链接数还是1
-rw-r--r--. 1 root root 37 Oct  9 06:21 nianling.txt
[root@localhost data]# 
  • 文件夹:
    硬链接:不支持对目录创建硬链接
    软链接:支持
[root@localhost data]# mkdir /data/tmp
[root@localhost data]# ln /data/tmp /data/tmp2 #不支持目录
ln: /data/tmp: hard link not allowed for directory
[root@localhost data]# 
[root@localhost data]# ln -s /data/tmp /data/tmp2   #支持目录
[root@localhost data]# ll /data/tmp2 
lrwxrwxrwx. 1 root root 9 Oct  9 06:39 /data/tmp2 -> /data/tmp
[root@localhost data]# 

  • 相对路径:
    硬链接:原始文件相对路径是相对于当前工作目录
    软链接:原始文件相对路径是相对于链接文件的相对路径
[root@localhost data]# ln nianling.txt tmp/nl3.txt  #当前工作目录是/data
[root@localhost data]# realpath tmp/nl3.txt  #可以看到是相对于/data目录创建的
/data/tmp/nl3.txt
[root@localhost data]# 
[root@localhost data]# ln -s nianling.txt /boot/nl.txt  #在/data目录创建软链接
[root@localhost data]# ll /boot/nl.txt
lrwxrwxrwx. 1 root root 12 Oct  9 06:27 /boot/nl.txt -> nianling.txt  #这个软链接指向的是/boot/下的nianling.txt
[root@localhost data]# cat /boot/nl.txt   #所以访问这个软链接失败
cat: /boot/nl.txt: No such file or directory
[root@localhost data]# 
[root@localhost data]# ln -s ../data/nianling.txt /boot/nl2.txt  #当相对于软链接的/boot/目录去创建软链接,访问成功
[root@localhost data]# ll /boot/nl2.txt
lrwxrwxrwx. 1 root root 20 Oct  9 06:53 /boot/nl2.txt -> ../data/nianling.txt
[root@localhost data]# cat /boot/nl2.txt
xiaoming=20
xiaohong=18
xiaoqiang=22
[root@localhost data]# 
  • 删除源文件:
    硬链接:只是链接数减少,链接文件访问不受影响
    软链接:链接文件将无法访问
[root@localhost data]# ll -i tmp/nl3.txt nianling.txt /boot/nl2.txt   
309 lrwxrwxrwx. 1 root root 20 Oct  9 06:53 /boot/nl2.txt -> ../data/nianling.txt
139 -rw-r--r--. 2 root root 37 Oct  9 06:21 nianling.txt
139 -rw-r--r--. 2 root root 37 Oct  9 06:21 tmp/nl3.txt
[root@localhost data]# 
[root@localhost data]# rm -f nianling.txt   #删除源文件
[root@localhost data]# cat tmp/nl3.txt   #硬链接仍旧可以访问
xiaoming=20
xiaohong=18
xiaoqiang=22
[root@localhost data]# cat /boot/nl2.txt   #软链接已经无法访问,已经是一个死链接
cat: /boot/nl2.txt: No such file or directory
  • 文件类型
    硬链接:和源文件相同
    软链接:链接文件和源文件无关
[root@localhost data]# ll tmp/nl3.txt nianling.txt /boot/nl2.txt 
lrwxrwxrwx. 1 root root 20 Oct  9 06:53 /boot/nl2.txt -> ../data/nianling.txt  #可以看到软链接是链接文件
-rw-r--r--. 2 root root 37 Oct  9 06:21 nianling.txt   #源文件
-rw-r--r--. 2 root root 37 Oct  9 06:21 tmp/nl3.txt   #和源文件一样还是普通文件
[root@localhost data]#

4、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
Linux常用的文件管理类命令有cpmvrmmkdirlspwdcddirnamerealpathbasenametouchtreestatfile

  • cp 复制文件命令,常用选项有-a-v-b-p-r
[root@localhost data]# cd ~tracy
[root@localhost tracy]# ll .bashrc 
-rw-r--r--. 1 tracy tracy 312 Nov  8  2019 .bashrc
[root@localhost tracy]# cp .bashrc /data/  #直接复制,不加任何选项,可以看到所有者和所属组等元数据已经改变
[root@localhost tracy]# ll .bashrc /data/.bashrc 
-rw-r--r--. 1 tracy tracy 312 Nov  8  2019 .bashrc
-rw-r--r--. 1 root  root  312 Oct 10 05:07 /data/.bashrc
[root@localhost tracy]# 
[root@localhost tracy]# cp -av .bashrc /data/.bashrc2  #添加-a选项可以看到所有者和所属组等元数据没变,-v选项表示显示可视化的复制过程
'.bashrc' -> '/data/.bashrc2'
[root@localhost tracy]# ll .bashrc /data/.bashrc2
-rw-r--r--. 1 tracy tracy 312 Nov  8  2019 .bashrc
-rw-r--r--. 1 tracy tracy 312 Nov  8  2019 /data/.bashrc2
[root@localhost tracy]# 
[root@localhost tracy]# cp -b .bashrc /data/  #-b选项复制前会先把已存在的文件备份为filename~,其中--backup=numbered 可以备份为filename~1~、filename~2~......filename~9~......
cp: overwrite '/data/.bashrc'? y
[root@localhost tracy]# ll -a /data/.[^.]*
-rw-r--r--. 1 root  root  312 Oct 10 05:22 /data/.bashrc
-rw-r--r--. 1 root  root  312 Oct 10 05:15 /data/.bashrc~
-rw-r--r--. 1 tracy tracy 312 Nov  8  2019 /data/.bashrc2
[root@localhost tracy]# 
[root@localhost tracy]# cp -p .bashrc /data/.bashrc3  #-p选项类似-a选项,保留文件的所有者和所属组等
[root@localhost tracy]# ll !*
ll -p .bashrc /data/.bashrc3
-rw-r--r--. 1 tracy tracy 312 Nov  8  2019 .bashrc
-rw-r--r--. 1 tracy tracy 312 Nov  8  2019 /data/.bashrc3
[root@localhost tracy]# 
[root@localhost tracy]# cp /etc/ /data/
cp: -r not specified; omitting directory '/etc/'    #可以看到直接复制目录是不成功的
[root@localhost tracy]# 
[root@localhost tracy]# cp -r /etc/ /data/    #加了-r选项就可以复制目录了,等价-R,递归复制。
[root@localhost tracy]# ll -d /data/etc/
drwxr-xr-x. 135 root root 8192 Oct 10 05:28 /data/etc/
[root@localhost tracy]#
  • mv命令实现文件或目录的移动和改名,常用选项有-i-f-b等选项,-i是交互式,-f强制、-b如果目标存在先进行备份
[root@localhost data]# cp /etc/issue /etc/issue.bak
[root@localhost data]# mv /etc/issue.bak ./
[root@localhost data]# cp /etc/issue /etc/issue.bak
[root@localhost data]# 
[root@localhost data]# \mv -ib /etc/issue.bak ./  #-i选项会提示是否覆盖,但是其实-b选项会备份源文件 
mv: overwrite './issue.bak'? y
[root@localhost data]# 
[root@localhost data]# ll ./issue.ba*
-rw-r--r--. 1 root root 23 Oct 10 05:37 ./issue.bak
-rw-r--r--. 1 root root 23 Oct 10 05:36 ./issue.bak~
[root@localhost data]# 
[root@localhost data]# > ./issue.bak  #清空这个文件
[root@localhost data]# cp /etc/issue /etc/issue.bak
[root@localhost data]# mv -f /etc/issue.bak ./   #-f选项会强制覆盖已存在文件,并不提示。
[root@localhost data]# head -2 ./issue.bak   #文件已被覆盖成有内容的文件
\S
Kernel \r on an \m
[root@localhost data]# 
  • mkdir创建文件夹,常用选项有-p-m
[root@localhost data]# mkdir ./test/aaa/bbb   #当创建bbb但不存在aaa和test目录是失败的
mkdir: cannot create directory ‘./test/aaa/bbb’: No such file or directory
[root@localhost data]# 
[root@localhost data]# mkdir -p ./test/aaa/bbb  #添加-p选项,则会忽略错误并创建bbb需要的父目录
[root@localhost data]# tree ./test
./test
└── aaa
    └── bbb

2 directories, 0 files
[root@localhost data]# 
[root@localhost data]# mkdir -m 777 ./test2  #-m选项可以直接指定创建的文件夹的权限
[root@localhost data]# ll -d ./test2
drwxrwxrwx. 2 root root 6 Oct 10 05:51 ./test2
[root@localhost data]# 

  • ls 列出显示目标文件和目录,常用的选项有-a-l-d-i等选项
[root@localhost data]# ls -a -l -i  #-a选项表示包含隐藏文件,-l选项表示显示更多的信息,-i表示显示文件的inode
total 36
      128 drwxr-xr-x.  7 root  root   229 Oct 10 05:51 .
      128 dr-xr-xr-x. 18 root  root   236 Aug 26 13:41 ..
     4282 -rw-r--r--.  1 root  root     0 Oct 10 05:35 b1.txt
      141 -rw-r--r--.  1 root  root   312 Oct 10 05:22 .bashrc
      143 -rw-r--r--.  1 root  root   312 Oct 10 05:15 .bashrc~
100667520 drwxrwxrwx.  2 root  root     6 Oct 10 05:51 test2
      132 -rw-r--r--.  1 root  root  1918 Sep 23 21:52 test.txt
 33554560 drwxr-xr-x.  2 root  root    21 Oct  9 06:55 tmp
      140 lrwxrwxrwx.  1 root  root     9 Oct  9 06:39 tmp2 -> /data/tmp
[root@localhost data]# 
[root@localhost data]# 
[root@localhost data]# ls -ld tmp  #-d选项显示目录和符号链接信息,通常配合-l选项使用
drwxr-xr-x. 2 root root 21 Oct  9 06:55 tmp

  • pwd打印当前工作目录常用选项有-P
[root@localhost data]# cd /bin/  
[root@localhost bin]# pwd -P #显示真实的路径
/usr/bin
[root@localhost bin]# pwd 
/bin

  • cd 切换目录,change directory,选项-P
[root@localhost ~]# cd .. #切换到上一级目录
[root@localhost /]# 
[root@localhost /]# cd -  #切换到上一次的工作目录
/root
[root@localhost ~]# cd -P /bin/  #-P选项切换到软链接的物理路径,而不是软链接目录
[root@localhost bin]# pwd
/usr/bin
[root@localhost bin]# 

  • dirname取文件的路径,不要文件名
[root@localhost bin]# dirname /etc/issue
/etc
[root@localhost bin]# 
  • realpath取文件或目录的真实物理绝对路径
[root@localhost bin]# realpath /bin/
/usr/bin
[root@localhost bin]# 
  • basename取文件名,不要路径
[root@localhost bin]# basename /etc/issue
issue
[root@localhost bin]# 
  • touch 创建空文件和更新文件的元数据信息
[root@localhost ~]# touch -a anaconda-ks.cfg  #仅修改atime和ctime
[root@localhost ~]# stat anaconda-ks.cfg 
  File: anaconda-ks.cfg
  Size: 1439        Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d  Inode: 202386602   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-10-09 05:28:48.621068644 -0400
Modify: 2020-10-09 05:23:00.778460556 -0400
Change: 2020-10-09 05:28:48.621068644 -0400
 Birth: -
[root@localhost ~]#
[root@localhost ~]# touch -m anaconda-ks.cfg  #仅修改mtime和ctime
[root@localhost ~]# stat anaconda-ks.cfg 
  File: anaconda-ks.cfg
  Size: 1439        Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d  Inode: 202386602   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-10-09 05:28:48.621068644 -0400
Modify: 2020-10-09 05:30:21.069496032 -0400
Change: 2020-10-09 05:30:21.069496032 -0400
 Birth: -
[root@localhost ~]# 
[root@localhost ~]# touch -t 202001010000.00 anaconda-ks.cfg  #指定atime和mtime的时间戳
[root@localhost ~]# stat anaconda-ks.cfg 
  File: anaconda-ks.cfg
  Size: 1439        Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d  Inode: 202386602   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-01-01 00:00:00.000000000 -0500
Modify: 2020-01-01 00:00:00.000000000 -0500
Change: 2020-10-09 05:34:03.128522619 -0400
 Birth: -
[root@localhost ~]#
  • tree 目录树,列出目标目录中的所有文件
[root@localhost data]# tree
.
├── scripts
│   └── system_info.sh
├── test
│   └── aaa
│       └── bbb
8 directories, 9 files
[root@localhost data]# 

  • stat查看文件的元数据等
[root@localhost ~]# stat anaconda-ks.cfg 
  File: anaconda-ks.cfg
  Size: 1439        Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d  Inode: 202386602   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-09-23 02:19:41.728836595 -0400
Modify: 2020-08-26 13:46:15.413990590 -0400
Change: 2020-08-26 13:46:15.413990590 -0400
 Birth: -
[root@localhost ~]# 
  • file查看目标文件的类型
[root@localhost data]# file b.sh 
b.sh: Bourne-Again shell script, UTF-8 Unicode text executable
[root@localhost data]# 
[root@localhost data]# file b.txt
b.txt: ASCII text
[root@localhost data]#

5、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空
白字符

[root@localhost data]# cp /etc/profile /tmp/profile
[root@localhost data]# vim /tmp/profile
image.png

6、在vim中设置tab缩进为4个字符

[root@localhost ~]# cat ~/.vimrc 
set expandtab
set tabstop=4
[root@localhost ~]#
架构作业:
1、几种Io模型的原理
  • 同步阻塞IO
    进程发起iIO请求后等待内核响应,如果IO不能立即完成,进程会一直等待内核响应,并轮询查看IO是否完成,如果完成进程将IO返回给用户,进程在等待期间不能接受和处理新的用户请求。
  • 同步非阻塞IO
    进程发起iIO请求后等待内核响应,如果IO不能立即完成,进程不会再等待内核响应,进程会去接受和处理其它新的请求,但仍会轮询查看IO是否完成,如果完成进程将IO返回给用户。
  • IO多路复用
    也叫事件驱动IO模型,select() poll() epoll()会不断轮询所负责的所有socket,当某个socket的数据返回后就会通知进程,进程再去内核空间复制数据到用户空间,这期间是阻塞的。
  • 信号驱动IO
    异步阻塞IO,进程向内核发起IO请求,不用等待内核响应,可以继续接受其他请求,内核收到的IO请求如果不能立即完成,由内核等待完成后并通知进程。
  • 异步非阻塞IO
    进程向内核发起IO请求后,继续处理其他用户的请求,内核收到IO请求后,如果不能立即完成,内核会继续处理其他事务,等到IO完成后通知给内核,内核将IO完成的结果直接返回给进程,期间大家都可以各自处理新的请求,互不干扰,因此性能是五种中最好。
2、实现nginx基于域名PC端和移动端
2.1在nginx主配置文件的http模块加入虚拟主机的配置文件
http {
···
include /apps/nginx/conf/conf.d/\*.conf
}
2.2 pc端配置
vim /apps/nginx/conf/conf.d/pc.conf
server {
    listen 80;
    server_name www.pc.com;
    location / {
        root /data/nginx/pc;
        index index.html;
    }
}

echo pc > /data/nginx/pc/index.html
2.3 移动端配置
vim /apps/nginx/conf/conf.d/mobile.conf
server {
    listen 80;
    server_name www.mobile.com;
    location / {
        root /data/nginx/mobile;
        index index.html;
    }
}

echo mobile > /data/nginx/mobile/index.html
2.4 启动nginx
/apps/nginx/sbin/nginx -t
/apps/nginx/sbin/nginx 
2.5 修改客户端的hosts文件,并访问测试
[root@client ~]# cat /etc/hosts
 10.0.0.22   www.mobile.com www.pc.com

[root@client ~]# curl www.mobile.com
 mobile
[root@client ~]# curl www.pc.com
 pc
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容