Fork me on GitHub

-linux-文件管理

linux与windows的目录结构对比

  • 绝对路径与相对路径

  • 一切皆文件的设计思想

  • 文件的时间

    [root@arther-linux ~]# ls -l
    文件名 仅看的是文件的修改时间
    
    Linux文件有三种时间
    
    [root@arther-linux ~]# stat anaconda-ks.cfg 
      文件:"anaconda-ks.cfg"
      大小:3108      	块:8          IO 块:4096   普通文件
    设备:fd00h/64768d	Inode:2231463     硬链接:1
    权限:(0600/-rw-------)  Uid:(    0/    root)   Gid:(    0/    root)
    环境:system_u:object_r:admin_home_t:s0
    最近访问:2020-11-19 16:42:52.617000000 +0800 # 查看内容,用cat检测
    最近更改:2020-11-19 16:42:52.619000000 +0800 # 修改内容,如用vim编辑器
    最近改动:2020-11-19 16:42:52.619000000 +0800 # 修改内容,修改权限等属性,凡是有改动都会变
    创建时间:-
    
  • 文件的扩展名

    Linux文件是没有扩展名!!! 
    // 方法一: ls -l 文件名 //看第一个字符 
    
    - 普通文件(文本文件,二进制,压缩文件,电影,图片。。。),例如:/bin/ls 
    d 目录文件(蓝色),例如/home/ 
    b 设备文件(块设备)存储设备硬盘,U盘,例如:/dev/sda 
    c 设备文件(字符设备)打印机,例如:终端/dev/tty1 
    s 套接字文件,例如:/run/rpcbind.sock 
    p 管道文件,例如:/run/systemd/initctl/fifo l 链接文件(淡蓝色),例如:/bin 
    
    蓝色表示目录文件
    绿色表示可执行文件
    红色表示压缩文件
    浅蓝色表示链接文件
    白色表示其他文件
    黄色表示设备文件(包括block、char、fifo
    ps:通过颜色判断文件的类型是错误的!!! 
      
    // 方法二: [root@arther-linux ~]# file /etc/grub.conf
    

二 系统目录结构与作用

Windows:以多根的方式组织文件 C:\ D:\ E:\

Linux: 以单根的方式组织文件 /

FHS(Filesystem Hierarchy Standard)指的是文件系统层次化标准,多数Linux版本采用这种文件组织形式,是以树形的结构来组织文件的。

[root@arther-linux ~]# ls -l /
#  /是所有linux操作系统的顶点目录,不像windows,每个分区都有一个定点目录
# 总用量 66

-1.命令相关目录
/bin -> usr/bin 			# 普通用户使用的命令,如ls、date
/sbin -> usr/sbin 		# 管理员使用的命令,如adduser

-2.启动目录
/boot/ ->  	# 存放的启动相关的文件,例如 kernel,grub(引导装载程序)

-3.系统文件目录
/usr 								# 系统文件,相当于C:\Windows
/lib -> usr/lib 		# 库文件Glibc
/lib64 -> usr/lib64 # 库文件Glibc

-4.用户家目录
/home/ 	# 普通用户家目录
/root/ 	# root用户的HOME,管理员用户

-5.配置文件目录
/etc/   # 很重要,系统级服务配置文件 都在这里
    /etc/sysconfig/network-script/ifcfg-* # 网络配置文件 
    /etc/hostname													# 系统主机名配置文件 
    /etc/resolv.conf											# dns客户端配置文件 
    /etc/hosts														# 本地域名解析配置文件 
    /etc/fstab 														# 系统挂载目录 开机自启动挂载列表 
    /etc/passwd 													# 系统用户文件

-6.设备目录文件
/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						 # 标准输出
    
-7.虚拟文件系统:类似于小汽车的仪表板,能够看到汽车是否有故障,或者是否缺油了
/proc/	# 虚拟的文件系统,反映出来的是内核, 进程信息或实时状态
		# 反映系统当前进程的实时状态 
  	/proc/meminfo:内存信息 
    /proc/cpuinfo:cpu信息
    
-8.可变目录与临时目录
/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 	#临时文件(主要是程序产生的临时文件)
          								[root@arther-linux ~]# tail -f /var/log/messages
            							# 该指令动态的去查看日志,即能看到日志实时的变化
              
-9.设备(主要指存储设备)挂载目录
'''
挂载是将分区关联到某一目录的过程,挂载分区使起始于这个指定目录(通称为挂载点,mount point)的贮存区能够被用。
'''
 /media/ # 移动设备默认的挂载点
 /mnt/ # 手工挂载设备的挂载点
 /opt/ # 早期第三方厂商的软件存放的目录.
 /tmp/ # 临时存放文件,类似于回收站,超过十天自动删除

-10.其他一些目录
/lost+found/ # 孤儿文件 
这个目录是使用标准的ext2/ext3档案系统格式才会产生的一个目录,目的在于当档案系统发生错误时, 将 一些遗失的片段放置到这个目录下。这个目录通常会在分割槽的最顶层存在, 例如你加装一颗硬盘于/disk 中,那在这个系统下就会自动产生一个这样的目录/disk/lost+found 
lost+found这个目录一般情况下是空的,当系统非法关机后,如果你丢失了一些文件,在这里能找回来用来 存放fsck过程中部分修复的文件的 lost+found:几乎每个被格式化过的Linux分区都会有,意外后找回的文件一般在这里面。 这个目录是储存发生意外后丢失的文件的。只有root用户才能打开

drwxr-xr-x 25 root root 660 Jul 8 17:00 run  # 存放程序运行后所产生的pid文件 
drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv # 物理设备产生的一些文件 
dr-xr-xr-x 13 root root 0 Feb 16 01:22 sys 	 # 硬件设备的驱动程序信息

三 绝对路径与相对路径

绝对路径:从/开头的路径 /home

相对路径: 相对于当前目录开始

. 链接到当前目录

.. 链接到上一级目录
  		 当前用户的家目录
# 1、绝对路径示例 
touch /home/alice/file1 
touch ~alice/file2 
# 2、相对路径示例 
touch ../file3 
touch file4 
touch abc/file5

四 基本命令

-1.查看当前所在的目录
[root@arther-linux ~]# 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 在条目后加上文件类型的指示符号,例如会在显示出的目录后面加上左斜杠/

了解一下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 目录 			# 浏览目录下的子目录子文件名的详细信息 
ls -al 目录 		# 浏览的结果中包含隐藏文件 
ls -dl 目录 		# 查看目录

[root@arther-linux /]# ll bin
lrwxrwxrwx. 1 root root 7 11月 19 16:30 bin -> usr/bin
  
# 各部分解析如下
lrwxrwxrwx. 权限,后面的点代表是否在selinux开启的情况下(enforcing或者permissive都属于开 启)创建的文件

1 							硬链接个数 
root 						属主 
root 						属组 
7 							文件大小,单位字节 
12月 15 14:02   文件修改时间 
bin 						文件名字


# 权限的第一个为代表文件类型
格式 						说明 
- 							普通文件(文本, 二进制, 压缩包, 图片, 日志等) 
d 							目录文件 
b 							设备文件(块设备)存储设备硬盘 /dev/sda1, /dev/sda2 
c 							设备文件(字符设备)打印机,终端 /dev/tty1, /dev/zero 
s 							套接字文件, 进程间通信(socket) 
p 							管道文件 
l 							链接文件

注意: Linux文件扩展名不代表任何含义, 仅仅是为了运维人员便于识别
  
-5.stat命令(查看文件时间)
	  Linux文件有三种时间,用stat查看 
	  例如:stat anaconda-ks.cfg

	  访问时间:atime,查看内容,用cat检测
	  修改时间:mtime,修改内容
	  改变时间:ctime,修改内容,修改权限等属性,凡是有改动都会变

五 文件管理:创建、复制、移动、删除

1 创建

-1.创建文件:touch

touch file1.txt 						# 无则创建,有则修改时间 
touch /home/file10.txt 			
touch file{1..20} 					# 创建1,2,3,4....20为文件名的文件
touch Ego{n,N}.txt 					# 等价touch Egon.txt EgoN.txt

-2.创建目录:mkdir
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 //包括其父母的创建


2 复制

-1.复制:cp
cp 源 目标

[root@arther-linux /]# cp -v /home/1.txt /home/dir1/
"/home/1.txt" -> "/home/dir1/1.txt"  # 显示详细的复制过程,不能复制文件夹(目录)

[root@arther-linux /]# cp -r /home/dir1 /home/dir2
# 递归复制文件夹,以及该文件夹下的内容

[root@arther-linux /]# cp -rv /home/bibibi /home/dir1/
"/home/bibibi" -> "/home/dir1/bibibi"
"/home/bibibi/.bash_logout" -> "/home/dir1/bibibi/.bash_logout"
"/home/bibibi/.bash_profile" -> "/home/dir1/bibibi/.bash_profile"
"/home/bibibi/.bashrc" -> "/home/dir1/bibibi/.bashrc"
# 两者结合,又能复制文件夹及其下的文件,也能显示复制的详细过程

# 扩展用法: 
cp -rfv /etc/hosts{,.old} 
cp -rvf /etc/sysconfig/network-scripts/ifcfg-eth0{,.old}

小知识:root用户使用cp (默认有一个别名 alias cp='cp -i') -i 显示提示信息(是否覆盖) 
1. /bin/cp -rf /etc /tmp 
2. # unalias cp # cp -rf /etc /tmp 
3. # \cp -rf /etc /tmp 
4.-f 参数是强制复制,比如你在A文件夹里面有个文件名叫B,然后你把C文件夹里面的另一个文件名叫B的复 制到A里面,这个时候会照成冲突,然后会提示你要不要继续复制.加上-f 就不会提示你了.

你输入-f 还是会提示你的原因是 
------------------------------------------------------------- 
有的系统在安装的时候,cp - i 的 alias 就是 cp 也就是说你在执行cp的时候,其实是执行的cp -i 取消掉cp的alias就好了 

==========================================
# 解决办法 
unalias cp

3 移动与删除

-1.移动:mv
[root@arther-linux /]# mv /home/dir1/1.txt /home/dir2/ 
# 将1.txt从dir1移到dir2中

[root@arther-linux /]# mv /home/dir1/arther.txt /home/dir1/egon.txt
# 在当前文件夹下移动就是重命名

-2.删除:rm
示例:删除/home/dir1 
# cd /home 
# rm -rf 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格式 
例如
# unix2dos file1 
# dos2unix file2

less more head tail 
# head /etc/passwd
# head -2 /etc/passwd 
# tail /etc/passwd 
# tail -1 /etc/passwd 
# more /etc/passwd 
# 使用more命令之后,每次在屏幕上显示一屏(一页)的文件内容,并且在屏幕 的尾部将会出现“—More--(n%)”的信息,其中,n%是已经显示文件内容的百分比。按空格下一页,按b上一 页,more +40 a.txt从第40行开始查看 
# tail -f /var/log/messages //-f 动态查看文件的尾部 
# logger xxxxxxxxx //手动产生日志信息


grep 针对文件内容进行过滤 
# grep 'root' /etc/passwd 
# grep --color 'root' /etc/passwd 
# grep --color '^root' /etc/passwd 
# grep --color 'bash$' /etc/passwd

七 文件管理:修改文件内容

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 vim编辑器的操作模式

![image-20201122194829991](/Users/arther_wan/Library/Application Support/typora-user-images/image-20201122194829991.png)

-1.命令号模式:在编辑模式下按下ESC键返回命令行模式

vi的默认模式。在这一模式下,所有的输入被解释成vi命令,可以执行修改、复制、移动、粘贴和删除正文等 命令,也可以进行移动光标、搜索字符串和退出vi的操作等。

-2.编辑/插入模式:输入a、i、o之一

在编辑模式中,可以往一个文件中输入正文,在这一模式下,输入的每一个字符都会被vi编辑器解释为输入的正文。使用ESC键返回命令行模式。
a: 进入插入模式并在光标之后进行添加。
i: 进入插入模式并在光标之前进入插入。
o: 进入插入模式并在当前(光标所在)行之下开启新的一行。

-3.扩展/末行模式;输入:

在一些UNIX系统上也叫最后一行模式。在这一模式下,可以使用一些高级编辑命令,如搜寻和替代字符串、存 盘或退出vi编辑器等。要进入最后一行模式,需要在命令行模式中输入冒号(:),冒号这一操作将把光标移 到屏幕的最后一行。

-4.在vi编辑器中光标的移动

需要在命令行模式下

键组合(命令) 光标的移动
$ 光标移动到当前行的结尾
^ 光标移动到当前行的开头

-5.在命令行模式下删除与复制的操作

需要在命令行模式下

键组合(命令) 含义
dd 删除光标所在的那一行
ndd n为数字;删除光标所在的向下n行,例如20dd;就是向下删除20行
yy 复制光标所在的那一行
yy n为数字;复制光标所在的向下n行,例如20dd;就是向下复制20行

-6.粘贴命令

键组合(命令) 含义
p 将已复制的数据在光标下一行粘贴
P 将已复制的数据在光标上一行粘贴

-7.复原和重做命令

键组合(命令) 含义
U 复原前一个操作
ctrl+r 重做上一个操作

-8.掌握扩展模式下常用的命令

命令 含义
:w 将文件存入/写入(saves/writes)磁盘
:q 退出(quits)vi编辑器(并不存盘)
:wq 将文件存入/写入(save/writes)磁盘并退出(quits)vi编辑器

-8.掌握快速移动光标在文件中的位置的命令

命令 含义
G 光标移动到文件的最后一行第一个字符前
nG n为数字,光标移动到这个文件的第n行。例如200G就能移动到这个文件的第200行。
gg 移动这个文件的第一行

-9.掌握快速在屏幕中移动光标的位置的命令

命令 含义
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下那一行的第一个字符

-10.三种模式下的操作汇总与补充

命令模式: 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/^#//  4-9行的以#开头的替换为空 
          :% s#/dev/sda#/var/ccc#g 
          :,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 影响某一个用户 
          # vim ~/.vimrc # 在家目录下新增一个文件,输入下述内容 
          set ic 
          set nu

-12.同时编辑多个文件

#1、 
vim -o 文件1 文件2 # 水平分隔 
vim -O 文件1 文件2 # 垂直分隔 使用ctrl + ww切换 

#2、 
vim -p /etc/hosts /etc/grub.conf 
使用 ^PgUp, ^PgDn切换

-13.文件内容对比

# 相同文件之间差异对比,通常用于对比修改前后的差异。 
diff 				#文件对比(No) 
vimdiff 		#以vim方式打开两个文件对比,高亮显示不同的内容 
# patch实验: 
touch a.txt b.txt [root@localhost ~]# echo 111 >> a.txt 
[root@localhost ~]# echo 222 >> b.txt 
[root@localhost ~]# diff -u a.txt b.txt > patch.diff 
[root@localhost ~]# patch a.txt patch.diff patching file a.txt 
[root@localhost ~]# cat a.txt 
222
posted @ 2020-12-11 19:11  artherwan  阅读(115)  评论(0编辑  收藏  举报