WED.文件处理基础
一、Linux 系统的目录结构
-
Windows 系统 —— Linux 系统
文件夹 —— 目录
-
Windows: 以多根的方式组织文件 C:\ D:\ E:,即有多个顶级文件夹
-
Linux: 以单根的方式组织文件 /
-
FHS(Filesystem Hierarchy Standard)指的是文件系统层次化标准,多数Linux版本采用这种文件组织形式,是以树形的结构来组织文件的
二、绝对路径与相对路径
- 从根(顶级目录)开始写的路径就是绝对路径,否则就是相对路径
# 查看网卡配置文件,从根目录开始寻找,即通过绝对路径寻找
cat /etc/sysconfing/network-scripts/ifcfg-eth0
# 从当前文件夹开始寻找,即通过相对路径寻找
cat network-scripts/ifcfg-eth0
三、系统目录作用介绍
- 用户的家目录
# root 用户的家目录
/root
# 普通用户的家目录
/home/用户名
- 配置文件
# 网卡配置文件
cat /etc/sysconfig/network-scripts/ifcfg-eth0
# 系统主机名配置文件
cat /etc/hostname
# 更改主机名
hostnamectl set-hostname + 主机名
# 客户端配置文件
cat /etc/resolv.conf,dns
# 本地域名解析配置文件
cat /etc/hosts
# 系统挂载目录,开启自动挂载列表
cat /etc/fstab # 挂载即文件夹关联硬盘分区
# 系统用户文件
cat /etc/passwd
# 存放一些变化文件
cat /etc/var
# 系统临时目录,系统会定时删除该目录长时间没有访问的文件
cat /etc/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 # 早期第三方厂商的软件存放的目录.
# 权限 硬连接个数 属主 属组 文件大小 创建时间
d/rwx/r-x/r-x —— 目录文件/属主拥有读、写、执行权限/属组拥有读-执行权限/其余拥有读-执行权限
# 权限的第一个为代表文件类型
格式 说明
- 普通文件(文本, 二进制, 压缩包, 图片, 日志等)
d 目录文件
# b 设备文件(块设备)存储设备硬盘 /dev/sda1, /dev/sda2
# c 设备文件(字符设备)打印机,终端 /dev/tty1, /dev/zero
# s 套接字文件, 进程间通信(socket)
# p 管道文件
l 链接文件
注意: Linux文件扩展名不代表任何含义, 仅仅是为了运维人员便于识别
# 孤儿文件,储存发生意外后丢失的文件的,只有root用户才能打开
drwx------. 2 root root 16384 Jul 11 2019 lost+found # 孤儿文件
root:x:0:0:root:root:/bin/bash
用户名:密码:UID:GID:用户描述信息:用户家目录:登录后第一个运行的程序
# UID 为 0 即为超级管理员
四、文件管理基本命令
- cd 切换目录
pwd 查看当前所在目录
cd 切换目录
cd ~ 进入当前用户家目录
cd - 返回上次目录
cd . 保持当前目录
cd .. 切换到当前目录的上级目录
- tree 目录树
# 查看目录树:需要先安装tree命令,执行yum install tree -y
tree -a 目录 # 显示所有文件,包括隐藏文件
tree -d 目录 # 只显示子目录
tree -L 1 目录 # -L 遍历目录的最大层数,-L后应该是大于0的正整数
tree -F 目录 # -F 在条目后加上文件类型的指示符号,例如会在显示出的目录后面加上左斜杠/
- ls 浏览目录
ls # 默认浏览当目录
ls -l 目录 # 浏览目录下的子目录子文件名的详细信息
ls -al 目录 # 浏览的结果中包含隐藏文件
ls -dl 目录 # 查看目录
[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 文件修改时间
a.txt 文件名字
- touch 创建文件
touch file1.txt //无则创建,有则修改时间
touch /home/file10.txt
touch file{1..20}
touch Ego{n,N}.txt //等价touch Egon.txt EgoN.txt
touch -t 2011111111 2018.rmvb
- 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 # 递归创建目录
- cp 复制文件
cp 源 目标
cp -a /root/a.txt b.txt # 将 a.txt 的内容拷贝到 b.txt 中,复制时尽可能保证文件的结构和属性,除从属关系外,包括查看时间以及创建时间在内的内容均保持一致
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}
"""
小知识: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
"""
- mv/rm 移动与删除
# mv 移动
mv 源 目标
# mv file2 /home/dir3 将file2移动到/home/dir3里
# mv file4 file5 将file4重命名为file5,当前位置里的移动就是重命名
# 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
- stat
# stat testfile #输入命令
File: `testfile'
Size: 102 Blocks: 8 IO Block: 4096 regular file
Device: 807h/2055d Inode: 1265161 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-08-13 14:07:20.000000000 +0800 # 最近访问时间
Modify: 2014-08-13 14:07:07.000000000 +0800 # 最近更改时间(只修改内容时改变)
Change: 2014-08-13 14:07:07.000000000 +0800 # 最近改动时间(修改内容/权限等属性时都会改变)
- man 手册
man + 命令
查看该命令的帮助文档
/字符串 -- 高亮显示所该文档中
每一个该字符串的位置,"n" 切换下一个
五、Vim 基本操作
vi ===> vim 文件编辑器
# vim /boot/grub2/grub.cfg
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
命令模式:
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
# vim -O /etc/hosts /etc/grub.conf ^w 按两次切换
# vimdiff grub.conf /etc/grub.conf 对比文件,^w 按两次切换
# vim -p /etc/hosts /etc/grub.conf ^PgUp, ^PgDn
- 补丁
diff 1.txt 2.txt # 比较两个文件的不同之处
......
......
diff 1.txt 2.txt > test.txt # 保存为补丁文件