Linux文件
一、文件系统
管理文件系统
文件系统日志方法:
数据模式 索引节点和文件都会被写入日志;丢失数据风险低,但性能差
有序模式 只有索引节点数据会被写入日志,但只有数据成功写入后才删除;在性能和安全性之间取得了良好的折中
回写模式 只有索引节点数据会被写入日志,但不控制文件数据何时写入;丢失数据风险高,但仍比不用日志好
操作文件系统
fdisk 创建分区——sudo fdisk /dev/sdb
fdisk 命令:
a 设置活动分区标志
b 编辑BSD Unix系统用的磁盘标签
c 设置DOS兼容标志
d 删除分区
l 显示可用的分区类型
m 显示命令选项
n 添加一个新分区
o 创建DOS分区表
p 显示当前分区表
q 退出,不保存更改
s 为Sun Unix系统创建一个新磁盘标签
t 修改分区的系统ID
u 改变使用的存储单位
v 验证分区表
w 将分区表写入磁盘
x 高级功能
创建文件系统——sudo mkfs.ext4 /dev/sdb
创建文件系统的命令行程序:
工 具 用 途
mkefs 创建一个ext文件系统
mke2fs 创建一个ext2文件系统
mkfs.ext3 创建一个ext3文件系统
mkfs.ext4 创建一个ext4文件系统
mkreiserfs 创建一个ReiserFS文件系统
jfs_mkfs 创建一个JFS文件系统
mkfs.xfs 创建一个XFS文件系统
mkfs.zfs 创建一个ZFS文件系统
mkfs.btrfs 创建一个Btrfs文件系统
type mkfs.ext4 -- type命令判断工具是否可用
新文件系统挂载(重启linux文件系统不会自动挂载,除非创建在/etc/fstab)
——sudo mkdir /mnt/my_partition -- 创建挂载点
——sudo mount -t ext4 /dev/sdb /mnt/my_partition -- 挂载
文件系统的检查与修复
fsck
fsck 的命令行选项:
-a 如果检测到错误,自动修复文件系统
-A 检查/etc/fstab文件中列出的所有文件系统
-C 给支持进度条功能的文件系统显示一个进度条(只有ext2和ext3)
-N 不进行检查,只显示哪些检查会执行
-r 出现错误时提示
-R 使用 -A 选项时跳过根文件系统
-s 检查多个文件系统时,依次进行检查
-t 指定要检查的文件系统类型
-T 启动时不显示头部信息
-V 在检查时产生详细输出
-y 检测到错误时自动修复文件系统
逻辑卷管理(未文件系统创建逻辑存储设备)
逻辑卷管理布局:卷组、逻辑卷、物理卷(linux将每一个逻辑卷视为一个物理分区)
LVM 允许你在Linux上用简单的命令行命令管理一个完整的逻辑卷管理环境
功能三:快照(备份逻辑卷文件);条带化(跨多个物理硬盘创建逻辑卷);镜像(实时更新的逻辑卷的完整副本)
使用LVM
①定义物理卷:
通过t命名改变分区类型:t——8e——w(8e代表LVM,w保存)
sudo pvcreate /dev/sdb1 -- 标记为LVM分区
sudo pvdisplay /dev/sdb1 -- 查看创建进度( VG Name 内容为空,因为物理卷还不属于某个卷组)
②创建卷组
sudo vgcreate Vol1 /dev/sdb1 -- 创建卷组Voll
sudo vgdisplay Vol1 -- 查看创建卷组细节
③创建逻辑卷
lvcreate 的选项:
-c --chunksize 指定快照逻辑卷的单位大小
-C --contiguous 设置或重置连续分配策略
-i --stripes 指定条带数
-I --stripesize 指定每个条带的大小
-l --extents 指定分配给新逻辑卷的逻辑区段数,或者要用的逻辑区段的百分比
-L --size 指定分配给新逻辑卷的硬盘大小
--minor 指定设备的次设备号
-m --mirrors 创建逻辑卷镜像
-M --persistent 让次设备号一直有效
-n --name 指定新逻辑卷的名称
-p --permission 为逻辑卷设置读/写权限
-r --readahead 设置预读扇区数
-R --regionsize 指定将镜像分成多大的区
-s snapshot 创建快照逻辑卷
-Z --zero 将新逻辑卷的前1 KB数据设置为零
sudo lvcreate -l 100%FREE -n lvtest Vol1 -- 为逻辑卷命名lvtest(指定卷组Voll)
sudo lvdisplay Vol1 -- 查看逻辑卷创建细节
④创建文件系统
sudo mkfs.ext4 /dev/Vol1/lvtest
sudo mount /dev/Vol1/lvtest /mnt/my_partition -- 挂载
⑤修改LVM
Linux LVM命令:
vgchange 激活和禁用卷组
vgremove 删除卷组
vgextend 将物理卷加到卷组中
vgreduce 从卷组中删除物理卷
lvextend 增加逻辑卷的大小
lvreduce 减小逻辑卷的大小
二、文件
清空当前界面(clear)
查看历史命令(history)
列出文件和目录(ls):
ls -- 按列字母排序列出
ls -a -- 列出包括文件前代·的隐藏文件*(!隐藏文件的查看方式:cat .bash_history )
ls -F -- 区别文件和目录列出,文件后加正斜线区分/,文件后加*表示有执行权限的文件
ls -F -R -- 递归文件。直到所有目录或子目录下的文件。
ls -l -- 长列表显示文件详细信息:文件属性(类型和权限)、数量(!对于目录文件(-2)才是实际子目录的个数)、属主、属组、字节大小(byte)、上次更改时间、文件名。(!可以仅查看某个目录:ls -ld New_Dir 文件:ls -l new_file.sh)
支持通配符使用?*(?号代表一个字符,*号代表0个或多个字符)
支持正则表达式:
ls -l my_scr[ai]pt a 或 i
ls -l f[a-i]ll a 到 i
ls -l f[!a]ll 排除 a
扩展:!列出当前环境所有包括隐藏文件:ls -al
!列出当前环境所有包括隐藏文件 并区别目录:ls -F -al
!列出当前环境所有包括隐藏文件 区别目录 并递归:ls -FR -al
切换目录(cd):
HFS标准(文件系统层次结构标准):http://www.pathname.com/fhs
Linux目录名称
/ 虚拟目录的根目录。通常不会在这里存储文件
/bin 二进制目录,存放许多用户级的GNU工具
/boot 启动目录,存放启动文件
/dev 设备目录,Linux在这里创建设备节点
/etc 系统配置文件目录
/home 主目录,Linux在这里创建用户目录
/lib 库目录,存放系统和应用程序的库文件
/media 媒体目录,可移动媒体设备的常用挂载点
/mnt 挂载目录,另一个可移动媒体设备的常用挂载点
/opt 可选目录,常用于存放第三方软件包和数据文件
/proc 进程目录,存放现有硬件及当前进程的相关信息
/root root用户的主目录
/sbin 系统二进制目录,存放许多GNU管理员级工具
/run 运行目录,存放系统运作时的运行时数据
/srv 服务目录,存放本地服务的相关文件
/sys 系统目录,存放系统硬件信息的相关文件
/tmp 临时目录,可以在该目录中创建和删除临时工作文件
/usr 用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里
/var 可变目录,用以存放经常变化的文件,比如日志文件
cd /bin -- 进入bin目录(!绝对路径:目录或文件前加(/))
cd bin -- 进入当前目录下一个目录bin(!相对路径)
cd ../bin -- 进入bin的父目录(!扩展:cd ../../bin )
cd -- 返回当前用户起始目录(!查看当前目录位置:pwd )
处理目录(可以使用tree工具检查目录)
创建:
mkdir New_Dir -- 创建新目录
mkdir -p New_Dir/Sub_Dir/Under_Dir -- 创建层级目录
删除:
rmdir New_Dir -- 删除空目录
rm -ri New_Dir -- 每一级提示删除:目录文件都删除掉
rm -rf New_Dir -- 递归删除(!强制删除:不提示,目录和文件一起删除)
更改:
mv Old_Dir New_Dir -- 修改目录名(!New_Dir若存在,则会将Old_Dir移动到New_Dir下 )
处理文件
创建:
touch New_Dir/my_file -- 创建空文件,当文件存在更改修改时间
删除:
rm -i file -- 删除文件(会有提示)
rm -f file -- 强制删除文件(不会有提示,慎用)
更改:
mv old_file new_Scripts -- 移动或重命文件(!如果 new_Scripts 文件存在将被覆盖,如果 new_Scripts 是文件夹,old_file将被移动到文件夹 new_Scripts 下 )
touch -a old_file -- 更改访问时间(!默认显示更改时间,查看文件内容的时间不会显示。查看访问时间:ls -l --time=atime new_file)
复制(cp):
cp old_file new_file -- 复制old_file,命名为new_file
cp -i old_file Old_Dir/ -- 将old_file文件复制到Old_Dir下。如果Old_Dir有old_file文件,会提示是否覆盖
cp -R Scripts/ Mod_Scripts/ -- 递归复制文件夹中所有内容到Mod_Scripts/ (扩展!备份script结尾的文件:cp *script Mod_Scripts/ )
链接(ln):
创建软链接
ln -s data_file sl_data_file -- 符号链接sl_data_file(注意不要软链接上创建软连接,容易断裂和混乱)
创建硬链接
ln data_file sl_data_file -- 硬链接(其实是同一个文件属性更改,如重命名,inode编码并没有改变。!查看文件的唯一inode编码:ls -i *data_file(扩展:ls -li *data_file 长列表显示))
查看文件(file、cat、more):
一、file tmp -- 查看文件类型:确定该文本文件的 字符编码、文件类型
二、cat(查看所有内容。所有展示一旦运行不能停止,不适合大型文件查看)
cat old_file
cat -n old_file -- 给查看文件加上行号
cat -b old_file -- 给有文本的加上行号
cat -T old_file -- T 参数会用 ^I 字符组合去替换文中的所有制表符
三、more(分页工具:会在显示每页数据之后停下来,q键退出)
四、less(more的升级版,部分中文会转数字不好用)
五、查看文件首尾数据
head old_file -- 默认查看前面10行数据
head -5 old_file -- 限制查看前五行数据
fail old_file -- 默认查看倒数10行数据
fail -n 2 old_file -- 限制查看倒数2行数据
编辑:
流编辑器:sed、gwak
交互式编辑器:vim
排序(sort):
sort 命令参数:
-b --ignore-leading-blanks 排序时忽略起始的空白
-C --check=quiet 不排序,如果数据无序也不要报告
-c --check 不排序,但检查输入数据是不是已排序;未排序的话,报告
-d --dictionary-order 仅考虑空白和字母,不考虑特殊字符
-f --ignore-case 默认情况下,会将大写字母排在前面;这个参数会忽略大小写
-g --general-number-sort 按通用数值来排序(跟 -n 不同,把值当浮点数来排序,支持科学计数法表示的值)
-i --ignore-nonprinting 在排序时忽略不可打印字符
-k --key=POS1[,POS2] 排序从POS1位置开始;如果指定了POS2的话,到POS2位置结束
-M --month-sort 用三字符月份名按月份排序
-m --merge 将两个已排序数据文件合并
-n --numeric-sort 按字符串数值来排序(并不转换为浮点数)
-o --output=file 将排序结果写出到指定的文件中
-R --random-sort 按随机生成的散列表的键值排序
--random-source=FILE 指定 -R 参数用到的随机字节的源文件
-r --reverse 反序排序(升序变成降序)
-S --buffer-size=SIZE 指定使用的内存大小
-s --stable 禁用最后重排序比较
-T --temporary-directory=DIR 指定一个位置来存储临时工作文件
-t --field-separator=SEP 指定一个用来区分键位置的字符
-u --unique 和 -c 参数一起使用时,检查严格排序;不和 -c 参数一起用时,仅输出第一例相似的两行
-z --zero-terminated 用NULL字符作为行尾,而不是用换行符
sort file -- 按字符排序
sort -n file -- 按数值排序(!默认升序。降序排列:sort -nr file )
sort -t ':' -k 3 -n /etc/passwd -- -t 以分隔符:分隔,-k 3代表行第三列该列排序
查找文本特定信息(grep):
grep three file -- 搜索文件中的three的文本.如:grep ly_sw_cs /etc/passwd 查看ly_sw_cs用户是否可以使用系统
grep -v t file -- 输出不匹配t的行
grep -n t file -- 如果要显示匹配模式的行所在的行号,可加 -n 参数
grep -c t file -- 如果只要知道有多少行含有匹配的模式,可用 -c 参数
grep -e t -e f -e ,file -- 输出了含有字符 t 或字符 f 或',' 的所有行
grep [tf] file -- 正则表达式,t或f或',',同-e
压缩文件(gzip,tar)
gzip file -- 压缩文件file,支持通配符gzip file* (原文件转化为压缩文件 file.gz )
tar 命令的功能(归档):
-A --concatenate 将一个已有tar归档文件追加到另一个已有tar归档文件
-c --create 创建一个新的tar归档文件
-d --diff 检查归档文件和文件系统的不同之处
--delete 从已有tar归档文件中删除
-r --append 追加文件到已有tar归档文件末尾
-t --list 列出已有tar归档文件的内容
-u --update 将比tar归档文件中已有的同名文件新的文件追加到该tar归档文件中
-x --extract 从已有tar归档文件中提取文件
-C dir 切换到指定目录
-f file 输出结果到文件或设备 file
-j 将输出重定向给 bzip2 命令来压缩内容
-p 保留所有文件权限
-v 在处理文件时显示文件
-z 将输出重定向给 gzip 命令来压缩内容
tar -cvf test.tar test/ test2/ -- 创建了名为test.tar的归档文件,含有test和test2目录内容 (打包)
tar -tf test.tar -- 列出tar文件test.tar的内容(但并不提取文件)
tar -xvf test.tar -- 从tar文件test.tar中提取内容(解包)
以.tgz结尾的gzip文件是压缩过的tar文件可用命令 tar -zxvf filename.tgz 来解压
三、文本编辑工具
linux编辑器分类:
? vim编辑器
? nano编辑器
? emacs编辑器
? KWrite编辑器
? Kate编辑器
? GNOME编辑器
linux的交互式编辑器选择一种就可以了
交互式编辑器vim:
检查vim软件包
which vim -- /usr/bin/vim
readlink -f /usr/bin/vi -- 找出链接文件的最后一环/usr/bin/vim.tiny
vim基础
vim编辑器有三种操作模式(ESC到一般模式与其他模式切换):
一般模式
插入模式(i a A o R 进入)
命令行模式(/ :进入)
vim中有用来移动光标的命令(处理放向键失灵的特殊情况):
h :左移一个字符。
j :下移一行。
k :上移一行。
l :右移一个字符。
vim提供了一些能够提高移动速度的命令:
PageDown(或Ctrl+F):下翻一屏。
PageUp(或Ctrl+B):上翻一屏。
G :移到缓冲区的最后一行。
gg :移到缓冲区的第一行。
num G :移动到缓冲区中的第num行。
vim命名行(普通模式下键入:):
q! :取消所有对缓冲区数据的修改并退出
wq :将缓冲区数据保存到文件中并退出
复制和黏贴:普通模式下,通过寄存器使用p命名实现
剪切黏贴:x/dw/dd/d$;p
复制黏贴:yw/y$;p(yw表示复制一个单词,y$表示复制到行尾)
查找和替换
查找的3种情况,下斜线+单词查找,要继续查找同一个单词,按下斜线键,然后按回车键:(在一般模式中直接使用 /+字符串 查找)
如果要查找的文本出现在光标当前位置之后,则光标会跳到该文本出现的第一个位置。
如果要查找的文本出现在光标当前位置之前,则光标会绕过文件末尾,出现在该文本所在的第一个位置(并用一条消息指明)。
输出一条错误消息,说明在文件中没有找到要查找的文本。
替换
:s/old/new/ :替换当前行的第一个old
:s/old/new/g :一行命令替换所有 old 。
:n,ms/old/new/g :替换行号 n 和 m 之间所有 old 。
:%s/old/new/g :替换整个文件中的所有 old 。
:%s/old/new/gc :替换整个文件中的所有 old ,但在每次出现时提示。
vim常用命令解释:
x 删除当前光标所在位置的字符
dd 删除当前光标所在行
dw 删除当前光标所在位置的单词
d$ 删除当前光标所在位置至行尾的内容
J 删除当前光标所在行行尾的换行符(拼接行)
u 撤销前一编辑命令
i 在当前光标前插入数据
a 在当前光标后追加数据
A 在当前光标所在行行尾追加数据
o 在当前光标所在行上添加一行
r 用char替换当前光标所在位置的单个字符
R 用text覆盖当前光标所在位置的数据,直到按下ESC键
生活就要逢山开路遇水搭桥,愿共勉!