linux与windows的目录结构对比
绝对路径与相对路径
一切皆文件的设计思想
绝对路径: 从/开头的路径
相对路径: 相对于当前目录开始
. 链接到当前目录
.. 链接到上一级目录
~ 当前用户的家目录
~用户名:指定某个用户家目录
# 1、绝对路径示例
ls /proc/sys/net/ipv4/ip_forward
ls ~egon/xxx # ~egon指定用egon用户的家目录,只有一个~号代表当前用户的家目录
# 2、相对路径示例
cd /proc/sys/net/ipv4/
ls ../../
cd /proc
ls sys/net/ipv4
文件的后缀名(扩展名,例如.txt、.mp4、.jpg)在linux系统中没有意义,我们通常加只是为了起到提示作用
// 方法一:
ls -l 文件名 //看第一个字符
- 普通文件(文本文件,二进制,压缩文件,电影,图片。。。),例如:/bin/ls
d 目录文件(蓝色),例如/home/
b 设备文件(块设备)存储设备硬盘,U盘,例如:/dev/sda
c 设备文件(字符设备)打印机,例如:终端/dev/tty1
s 套接字文件,例如:/run/chrony/chronyd.sock
p 管道文件,例如:/run/systemd/initctl/fifo
l 链接文件(淡蓝色),例如:/bin
ps:通过颜色判断文件的类型是错误的!!!
// 方法二:
[root@xxx ~]# file /etc/grub.conf
Windows: 以多根的方式组织文件 C:\ D:\ E:\
Linux: 以单根的方式组织文件 /
FHS(Filesystem Hierarchy Standard)指的是文件系统层次化标准,多数Linux版本采用这种文件组织形式,是以树形的结构来组织文件的。
| [root@aliyun ~] |
| total 64 |
| |
| |
| lrwxrwxrwx. 1 root root 7 Jul 11 2019 bin -> usr/bin |
| lrwxrwxrwx. 1 root root 8 Jul 11 2019 sbin -> usr/sbin |
| |
| |
| dr-xr-xr-x. 5 root root 4096 Feb 11 19:06 boot |
| |
| |
| drwxr-xr-x. 13 root root 4096 Jul 11 2019 usr |
| lrwxrwxrwx. 1 root root 7 Jul 11 2019 lib -> usr/lib |
| lrwxrwxrwx. 1 root root 9 Jul 11 2019 lib64 -> usr/lib64 |
| |
| |
| drwxr-xr-x. 5 root root 4096 Feb 24 16:42 home |
| dr-xr-x---. 11 root root 4096 Jul 8 17:03 root |
| |
| |
| drwxr-xr-x. 79 root root 4096 Jul 8 17:04 etc |
| """ |
| /etc/sysconfig/network-script/,网络配置文件目录,具体的网卡配置文件rockylinux有变动 |
| |
| /etc/hostname,系统主机名配置文件 |
| /etc/resolv.conf,dns客户端配置文件 |
| /etc/hosts,本地域名解析配置文件 |
| /etc/fstab 系统挂载目录 开机自启动挂载列表 |
| /etc/passwd 系统用户文件 |
| """ |
| |
| |
| drwxr-xr-x 19 root root 2960 Feb 15 17:22 dev |
| """ |
| /dev/cdrom 和/dev/sr0,系统光盘镜像设备 |
| /dev/null,黑洞设备,只进不出。类似于垃圾回收站 |
| /dev/random,生成随机数的设备 |
| /dev/zero,能源源不断地产生数据,类似于取款机,随时随地取钱 |
| /dev/pts/0,虚拟的Bash Shell终端,提供给远程用户使用 0代表第一个终端 1代表第2个终端 |
| 以此类推 |
| /dev/stderr,错误输出 |
| /dev/stdin,标准输入 |
| /dev/stdout,标准输出 |
| """ |
| |
| |
| dr-xr-xr-x 89 root root 0 Feb 15 17:22 proc |
| """ |
| 反映系统当前进程的实时状态 |
| /proc/meminfo:内存信息 |
| /proc/cpuinfo:cpu信息 |
| """ |
| |
| |
| drwxr-xr-x. 19 root root 4096 Jul 11 2019 var |
| """ |
| /tmp,系统临时目录(类似于公共厕所),系统会定时删除该目录下长时间没有访问的文件。 |
| /var,存放一些变化文件,如下 |
| mysql: /var/lib/mysql |
| vsftpd: /var/ftp |
| mail: /var/spool/mail |
| cron: /var/spool/cron |
| log: /var/log 系统日志文件存放目录 |
| /var/log/messages系统日志 |
| /var/log/secure系统登录日志 |
| /var/tmp 临时文件(主要是程序产生的临时文件) |
| |
| """ |
| |
| |
| drwxr-xr-x. 2 root root 4096 Apr 11 2018 media |
| drwxr-xr-x. 2 root root 4096 Apr 11 2018 mnt |
| drwxr-xr-x. 2 root root 4096 Apr 11 2018 opt |
| drwxrwxrwt. 10 root root 4096 Jul 9 15:16 tmp |
| |
| |
| drwx------. 2 root root 16384 Jul 11 2019 lost+found |
| 这个目录是使用标准的ext2/ext3档案系统格式才会产生的一个目录,目的在于当档案系统发生错误时, 将一些遗失的片段放置到这个目录下。这个目录通常会在分割槽的最顶层存在, 例如你加装一颗硬盘于/disk中,那在这个系统下就会自动产生一个这样的目录『/disk/lost+found |
| lost+found这个目录一般情况下是空的,当系统非法关机后,如果你丢失了一些文件,在这里能找回来用来存放fsck过程中部分修复的文件的 |
| lost+found:几乎每个被格式化过的Linux分区都会有,意外后找回的文件一般在这里面。 |
| 这个目录是储存发生意外后丢失的文件的。只有root用户才能打开 |
| |
| drwxrwxr-x 6 root root 4096 Feb 23 19:24 application |
| drwxr-xr-x 25 root root 660 Jul 8 17:00 run |
| drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv |
| dr-xr-xr-x 13 root root 0 Feb 16 01:22 sys |
#1、查看当前所在的目录
[root@localhost ~]# pwd
/root
#2、切换目录
cd 绝对路径 如:cd /home/alice cd ~alice
cd 相对路径 如:cd home/alice cd ..
cd - # 返回上次目录
cd # 直接回家,等同于cd ~
cd . #保持当前目录不变
cd .. #切换到当前目录的上一级目录
#3、查看目录树:需要先安装tree命令,执行yum install tree -y
tree -a 目录 # 显示所有文件,包括隐藏文件
tree -d 目录 # 只显示子目录
tree -L 1 目录 # -L 遍历目录的最大层数,-L后应该是大于0的正整数
tree -F 目录 # -F 在条目后加上文件类型的指示符号,例如会在显示出的目录后面加上左斜杠/
[root@localhost ~]# tree /a
/a
├── b
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
├── bb
│ ├── a.txt
│ ├── b.txt
│ └── c.txt
└── bbbb
了解一下tree命令其他选项
-a 显示所有文件和目录。
-A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
-C 在文件和目录清单加上色彩,便于区分各种类型。
-d 显示目录名称而非内容。
-D 列出文件或目录的更改时间。
-f 在每个文件或目录之前,显示完整的相对路径名称。
-F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号。
-g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
-i 不以阶梯状列出文件或目录名称。
-I 不显示符合范本样式的文件或目录名称。
-l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
-n 不在文件和目录清单加上色彩。
-N 直接列出文件和目录名称,包括控制字符。
-p 列出权限标示。
-P 只显示符合范本样式的文件或目录名称。
-q 用"?"号取代控制字符,列出文件和目录名称。
-s 列出文件或目录大小。
-t 用文件和目录的更改时间排序。
-u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
-x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。
#4、浏览
ls # 默认浏览当目录
ls -l 目录 # 浏览目录下的子目录子文件名的详细信息,ll等同于ls -l
ls -lh
ls -al 目录 # 浏览的结果中包含隐藏文件
ls -dl 目录 # 查看目录,目录末尾不能有/,例如ls -dl /etc而不能是ls -dl /etc/
[root@localhost ~]# ll a.txt
-rw-r--r--. 1 root root 0 12月 15 14:02 a.txt
# 各部分解析如下
-rw-r--r--. 权限,后面的点代表是否在selinux开启的情况下(enforcing或者permissive都属于开启)创建的文件
1 硬链接个数
root 属主
root 属组
0 文件大小,单位字节
12月 15 14:02 文件内容的修改时间,即mtime
a.txt 文件名字
# 权限的第一个为代表文件类型
格式 说明
- 普通文件(文本, 二进制, 压缩包, 图片, 日志等)
d 目录文件
b 设备文件(块设备)存储设备硬盘 /dev/sda1, /dev/sda2
c 设备文件(字符设备)打印机,终端 /dev/tty1, /dev/zero
s 套接字文件, 进程间通信(socket)
p 管道文件
l 链接文件
注意: Linux文件扩展名不代表任何含义, 仅仅是为了运维人员便于识别
ls -l 文件名 仅看的是文件内容的修改时间即mtime
Linux文件有三种时间,用stat查看
例如:stat anaconda-ks.cfg
(1)访问时间:atime,查看内容,用cat检测
(2)修改时间:mtime,修改内容
(3)改变时间:ctime,修改内容,修改权限等属性,凡是有改动都会变
创建
#1、=============创建文件:touch
touch file1.txt //无则创建,有则修改时间
touch /home/file10.txt
touch file{1..20}
touch Ego{n,N}.txt //等价touch Egon.txt EgoN.txt
#2、=============创建目录:
mkdir dir1
mkdir /home/dir2 /home/dir3
mkdir /home/{dir4,dir5}
mkdir -v /home/{dir6,dir7}
mkdir: 已创建目录 “/home/dir6”
mkdir: 已创建目录 “/home/dir7”
mkdir -p /home/dir8/111/222 //包括其父母的创建
复制
| |
| cp 源 目标 |
| |
| cp -v install.log /home/dir1 |
| cp -v install.log /home/dir1/aaa.txt |
| cp -r /etc /home/dir1 |
| cp install.log /home/dir2 |
| cp anaconda-ks.cfg !$ |
| cp anaconda-ks.cfg /home/dir2 |
| cp -r /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/passwd /etc/grub.conf /etc/hosts . |
| |
| cp -rv /etc /tmp |
| \cp -rv /etc /tmp |
| |
| 扩展用法: |
| cp -rfv /etc/hosts{,.old} |
| cp -rvf /etc/sysconfig/network-scripts/ifcfg-eth0{,.old} |
| |
| 关于-f参数的一个实验(对目标目录有wx权限,对目标文件没有任何权限,cp -f中的-f会将目标文件删掉后重建新的) |
| [root@aliyum ~] |
| [root@aliyum ~] |
| [root@aliyum ~] |
| [root@aliyum ~] |
| [root@aliyum ~] |
| [root@aliyum ~] |
| [root@aliyum ~] |
| drwxr-x-wx 2 root root 4096 Oct 20 00:07 /t2 |
| [root@aliyum ~] |
| -rw-r----- 1 root root 5 Oct 20 00:07 /t2/a.txt |
| [root@aliyum ~] |
| [root@aliyum ~] |
| Last login: Tue Oct 20 00:05:43 CST 2020 on pts/2 |
| [xxx@aliyum ~]$ cp /opt/a.txt /t2/a.txt |
| cp: cannot create regular file ‘/t2/a.txt’: Permission denied |
| [xxx@aliyum ~]$ \cp /opt/a.txt /t2/a.txt |
| cp: cannot create regular file ‘/t2/a.txt’: Permission denied |
| [xxx@aliyum ~]$ |
| [xxx@aliyum ~]$ |
| [xxx@aliyum ~]$ cp -f /opt/a.txt /t2/a.txt |
| [xxx@aliyum ~]$ exit |
| logout |
| [root@aliyum ~] |
| 1111 |
| [root@aliyum ~] |
| |
| ======================================================== |
| 小知识:root用户使用cp (默认有一个别名 alias cp='cp -i') -i 显示提示信息(是否覆盖) |
| 1. /bin/cp -rf /etc /tmp |
| 2. |
| |
| 3. |
| 4.-f 参数是强制复制,比如你在A文件夹里面有个文件名叫B, |
| 然后你把C文件夹里面的另一个文件名叫B的复制到A里面,这个时候会照成冲突, |
| 然后会提示你要不要继续复制.加上-f 就不会提示你了. |
| |
| 你输入-f 还是会提示你的原因是 |
| ------------------------------------------------------------- |
| 有的系统在安装的时候,cp - i 的 alias 就是 cp |
| 也就是说你在执行cp的时候,其实是执行的cp -i |
| 取消掉cp的alias就好了 |
| ========================================== |
| 解决办法 |
| unalias cp 后重新执行 |
| 或者 |
| \cp |
| ======================================================== |
移动与删除
| |
| mv 源 目标 |
| |
| |
| |
| |
| 示例:删除/home/dir1 |
| |
| |
| -r 递归 |
| -f force强制 |
| -v 详细过程 |
| ==文本文件 (cat less more head tail grep) |
| /etc/hosts |
| /etc/sysconfig/network |
| /etc/sysconfig/network-scripts/ifcfg-eth0 |
| /etc/passwd |
| /etc/shadow |
| /etc/group |
| /etc/grub.conf |
| /etc/resolv.conf |
| /var/log/messages //系统的主日志文件 |
| |
| cat |
| -n 显示行号 |
| -A 包括控制字符(换行符)linux $ Windows ^M$ |
| ======================================================== |
| 扩展知识: |
| dos2unix 将Windows格式的文件转换成Unix格式 |
| unix2dos 将Unix格式的文件转换成Windows格式 |
| 例如 |
| |
| |
| ======================================================== |
| |
| less more head tail |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
vi编辑器简介
什么是vi
vi编辑器的操作模式
vi编辑器的3种基本模式
在vi编辑器中光标的移动
移动光标位置的键与光标移动间的关系
进入插入模式
从命令行模式进入插入模式的命令
在命令行模式下删除与复制的操作
删除与复制命令
粘贴命令
复原和重做命令
扩展模式与文件的存储和退出
扩展模式下常用的命令
快速移动光标在文件中的位置
快速移动光标在屏幕中的位置
课后作业
1、什么是vim
| 可以理解为windows下面的文本编辑器,比如记事本,比如word文档。 |
| |
| vi编辑器通常被简称为vi,而vi又是visual editor的简称。它在Linux上的地位就像Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。 |
| |
| vi 编辑器并不是一个排版程序,它不像Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。没有菜单,只有命令,且命令繁多。 |
2、为何要用vim
3、vi与vim的区别
| vi不显示高亮颜色语法 |
| |
| vim显示高亮颜色语法。 |
| |
| 其他功能没有什么区别。 |
| |
| 所以在linux系统下,使用vi还是vim取决个人习惯。 |
| |
| 默认vi是安装的 , vim需要通过yum install vim -y |
4、vi编辑器的操作模式
| |
| vi的默认模式。在这一模式中,所有的输入被解释成vi命令,可以执行修改、复制、移动、粘贴和删除正文等命令,也可以进行移动光标、搜索字符串和退出vi的操作等。 |
| |
| |
| 在编辑模式中,可以往一个文件中输入正文。在这一模式下,输入的每一个字符都被vi编辑器解释为输入的正文。使用ESC键返回命令行模式。 |
| a:进入插入模式并在光标之后进行添加。 |
| i:进入插入模式并在光标之前进行插入。 |
| o:进入插入模式并在当前(光标所在)行之下开启新的一行。 |
| |
| |
| 在一些UNIX系统上也叫最后一行模式。在这一模式下,可以使用一些高级编辑命令,如搜寻和替代字符串、存盘或退出vi编辑器等。要进入最后一行模式,需要在命令行模式中输入冒号(:),冒号这一操作将把光标移到屏幕的最后一行。 |
3、在vi编辑器中光标的移动
4、在命令行模式下删除与复制的操作
5、粘贴命令
6、复原和重做命令
7、掌握扩展模式下常用的命令
8、掌握快速移动光标在文件中的位置的命令
9、掌握快速在屏幕中移动光标的位置的命令
10、三种模式下的操作汇总与补充
| vi ===> vim 文件编辑器 |
| |
| |
| |
| 命令模式: |
| a. 光标定位 |
| hjkl |
| 0 $ |
| gg G |
| 3G 进入第三行 |
| /string(n N 可以循环的) 快速定位到某一行 |
| |
| b. 文本编辑(少量) |
| y 复制 yy 3yy ygg yG (以行为单位) |
| d .删除 dd 3dd dgg dG (以行为单位) |
| p 粘贴 |
| x 删除光标所在的字符 |
| D 从光标处删除到行尾 |
| u undo撤销 |
| ^r redo重做 |
| r 可以用来修改一个字符 |
| |
| c. 进入其它模式 |
| a 进入插入模式 |
| i 进入插入模式 |
| o 进入插入模式 |
| A 进入插入模式 |
| |
| : 进入末行模式 |
| ^v 进入可视块模式 |
| R 进入替换模式 |
| |
| 插入模式: |
| ^p 唯一补齐 |
| |
| 末行模式: |
| a. 保存退出 |
| :10 进入第10行 |
| :w 保存 |
| :q 退出 |
| :wq 保存并退出 |
| :w! 强制保存 |
| :q! 不保存并退出 |
| :wq! 强制保存退出 |
| :x 保存并退出 |
| |
| b. 查找替换 |
| :范围 s/old/new/选项 |
| :1,5 s/Note/yyy/ 从1-5行的Note 替换为yyy |
| :5,$ s/Note/yyy/ $表示最后一行 |
| :1,$ s/to/xxx/g = :% s/to/xxx/g %表示全文 g表示全局 |
| :4,9 s/^ |
| :% s |
| :,8 s/to/xxx/ 从当前行到第8行 |
| |
| c. 读入文件/写文件 |
| :w |
| :w /aaa.txt 另存为/aaa.txt |
| :1,3 w /2.txt |
| :1 w! /root/ccc.txt 如果目标文件已经存在则需要加!号 |
| :r /etc/hosts |
| |
| d. 设置环境 |
| 临时设置: |
| :set nu 设置行号 |
| :set ic 不区分大小写 |
| :set ai 自动缩进 |
| :set list |
| :set nonu 取消设置行号 |
| :set noic |
| |
| 永久的环境: |
| /etc/vimrc 影响所有系统用户 |
| ~/.vimrc 影响某一个用户 |
| |
| set ic |
| set nu |
| |
| |
| |
| |
11、同时编辑多个文件
| |
| vim -o 文件1 文件2 |
| vim -O 文件1 文件2 |
| 使用ctrl + ww切换 |
| |
| |
| vim -p /etc/hosts /etc/grub.conf |
| 使用 ^PgUp, ^PgDn切换 |
12、文件内容对比
| |
| |
| diff |
| |
| vimdiff |
| |
| |
| touch a.txt b.txt |
| [root@localhost ~] |
| [root@localhost ~] |
| [root@localhost ~] |
| [root@localhost ~] |
| patching file a.txt |
| [root@localhost ~] |
| 222 |
13、vim执行过程
==============Vim非正常退出===============
(1)、模拟故障:
编辑文件的时候断开连接即可(断网或断电)
重新连接服务器
再次进行编辑文件
(2)、故障报错:
Found a swap file by the name “.vim.log.swp”
Swap file “.vim.log.swp” already exists
(3)、故障解决:
删除临时文件或者先恢复内容再删除
使用-r选项进行恢复。
13、练习
| |
| 1) 使用vi编辑器编辑文件/1.txt进入编辑模式写入内容“hello world” |
| 2) 进入命令行模式复制改行内容,在下方粘贴80行 |
| 3) 快速移动光标到文件的最后一行 |
| 4) 快速移动光标到当前屏幕的中间一行 |
| 5) 快速移动光标到文件的第五行 |
| 6) 在下方插入新的一行内容“welcome to egonlin.com” |
| 7) 删除刚插入的一行 |
| 8) 撤销上一步的操作 |
| 9) 进入扩展模式,执行文件的保存退出操作 |
| 10) 修改相应文件,内容如下: |
| |
| |
| 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行下面,还原上一步操作 |
| |
| 13.复制从11行到15行的内容并粘贴到8行上面,还原上一步操作 |
| |
| 14.把13行到18行的内容移动文件的尾部,还原上一步操作 |
| |
| 15.将文件中所有的/sbin/nologin为/bin/bash |
| |
| 16.在第一行下面插入新的一行,并输入"# Hello!" |
| |
| 17.保存文档并退出 |
| |
| |
| |
| 根据文件回答下列习题 |
| |
| [root@xxx ~] |
| server { |
| Listen 8080; |
| Server_Name vim.egonlin.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.修改Server_Name为server_name小写。 |
| |
| 4.修改vim.egonlin.com为vim.egon.com |
| |
| 5.在server_name行下插入一行 root /code; |
| |
| 6.复制5-14行的内容,然后将其粘贴到14行下面 |
| |
| 7.删除与proxy_set_header相关的两行全部删除 |
| |
| 8.如上操作完成后,在13-20行前面加上 |
| |
| 9.删除21-23的行,然后保存当前文件 |