linux系统中从命令行管理文件
文件命名规则:
(1)不能使用/来当文件名,/是用来做根的,也是用来做路径分隔符的
(2)文件名不能超过255个字符
(3)区分大小写file File FILE fIle
(4)目录也是文件,在同一路径下,两个文件不能同名
创建、删除、编辑普通文件
创建普通文件:touch
格式:touch [OPTION]… FILE…
touch的两种用法:
1、如果文件已存在,更新文件的三个时间,stat可以查看文件的详细信息
atime access time 看了一下内容 cat
mtime modify time 文件内容被改变了,ctime也会发生改变
ctime change time 元数据被改变,重命名
2、如果文件不存在,则表示创建文件
创建多个普通文件:
方法1:touch 文件名1 文件名2 文件名3
方法2:touch {文件名1,文件 名2,文件名3}
touch {1,2}{3,4}
touch abc{1…100}
删除普通文件:rm [-f] 文件名
向已创建的普通文件添加数据内容:
1、将输出重定向到文件
将输入接到标准输出(从键盘输入,从显示器输出):echo
重定向:>
追加重定向:>>
2、读取标准输入的数据,并将其内容输出到文件的同时输出到屏幕(即想把输出保存到文件中,又想在屏幕上看到内容):tee 文件
管道符|:管道符左边命令的输出作为管道符右边命令的输入。
3、从shell提示符编辑文本文件
vim文本编辑器特点:所有的UNIX like系统都会内置vi文本编辑器,其他的文本编辑器则不一定会存在;
很多软件的编辑接口都会主动调用vi(例如crontab);
vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设计;vim会根据文件的扩展名或者是文件内的开头信息判断该文件的内容而自动调用该程序的语法判断式,再以颜色来显示程序代码与一般信息。
程序简单,编辑速度相当快速。
vim:
一般模式:按esc键可回到命令模式
dw 按单词删除
u 撤销当前操作
dd 删除当前行,=剪切
ctrl+r 重做上一个操作
yy 复制光标所在行
2 yy 复制光标所在行和光标下一行
p 粘贴到光标下一行
P 粘贴到光标上一行
cc 剪切
行数cc 剪切当前行开始的几行
X 删除光标所在位置的内容,即向后删除一个字符
X 向前删除一个单词
w,b 按单词进行移动光标
gg 跳转到文档首部行首
dgg 删除光标至文档首部
G 跳转到文档尾部行首
$ 行尾
^ 行首
n[enter] n为数字,光标向下移动n行
h 往左按字符移动光标
j 往下(后)按行移动光标
k 往上(前)按行移动光标
l 往右按字符移动光标
H 跳转到当前屏幕输出的最上面一行
L 跳转到当前屏幕输出的最下面一行
M 跳转到当前屏幕输出的中间那一行
插入模式:
i 在光标前插入
I在光标所在行第一个非空格符前插入
a 在光标后插入
A 在光标所在行末尾插入
s 删除光标所在位置字符并插入
S 删除光标所在行并插入
o 在光标所在行下一行插入
O 在光标所在行上一行插入
命令行模式(末行模式):
:wq 保存退出
:q 退出(未修改文件内容才可以退出)
:wq! 强制保存退出
:q! 强制退出,不保存
:set nu 显示行号
:set nonu 不显示行号
:行号 跳转到指定行号
:3,5 d 删除3-5行
:r 文件名1 读出文件1的内容到当前文件里
:%s/字符串2/字符串3 字符串3替换字符串2
:%s/1/2/g 将1替换为2,全局修改
:w 文件名1 另存为文件名1
/word 向下寻找一个字符串为word的字符串
n重复前一个查找的操作
N反向进行前一个查找的操作
?word 向上寻找一个字符串名称为word的字符串
ZZ 若文件没有改动,则离开,,若文件已经被改动过,则保存后离开
拓展*
块选择(Visual Block)
v 字符选择,会将光标经过的地方反白选择
V 行选择,会将光标经过的地方反白选择
[ctrl]+v 块选择,可以用长方形的方式选择数据
y 将反白的地方复制
d 将反白的地方删除
多文件编辑:
vim 文件1 文件2 文件3
:files显示多个文件文件名
:n查看下一个文件内容
:N查看上一个文件内容
多窗口功能:
vim 文件1
:sp 文件名 在同一个窗口启动另一个文件
:sp 同一个文件出现在两个窗口间
[ctrl]+w+w [ctrl]+w+w
查看普通文件的内容
文本统计:wc——word count
显示文件行数、单词数、字节数和文件名:wc 文件名
###在UTF-8编码格式里面,显示时一个字符占一个字节,一个中文字占用3个字节
只显示单词数:wc -w 文件名
只显示字节数:wc -c 文件名
只显示行数:wc -l 文件名
只显示字符数:wc -m 文件名
显示最长的一行的字符数(不包括断行符):wc -L 文件名
1、直接查看文件内容
cat连接并显示文件内容到标准输出
显示文件内容并显示行号:cat -n 文件名
黑洞机制(shell脚本里面经常用)
将文件内容重定向到/dev/null:cat 文件 >/dev/null
不带任何选项时,从标准输入接收输出到标准输出
逆序显示文件:tac
从头开始逐行查看:more /var/log/messages
在没有翻到最后一屏时支持向前翻
前后查看文件内容:less /var/log/messages
man手册查看命令用法默认用less打开
默认查看文件前10行:head /etc/passwd
指定查看前5行:head -5 /etc/passwd
默认查看后10行:tail /etc/passwd
查看后5行:tail -5 /etc/passwd
2、对文件数据内容进行处理之后显示
文本切割显示:
cut -d 指定分隔符 -f 指定第几列 被切割文件
-f 1,3第一列和第三列
-f 1-3第一列到第三列
-c 1-4 指定第一到第四个字符
指定分隔符的时候空格需要用单引号或双引号引起来
cut -d : -f 1-3 --output-delimiter=@ /etc/passwd
文本排序显示:
排序显示(默认根据字符在ASCII码中的升序排序):sort 文件名
按照数值大小排序:sort -n 文件名
排序并去掉重复的:sort -u 文件名
逆序排序:sort -r 文件名
按照用户uid数字大小排序显示:
sort -t 指定分隔符 -k 指定第几列 -n /etc/passwd
-f 排序时忽略字符大小写65 97
显示时去掉重复的行,重复的行必须相邻:uniq 文件名
-d 只显示重复的行
-D 显示所有重复的行
-c 显示重复行重复的次数
文本过滤显示:grep可以根据特定的字符串,对指定文件的每一行进行搜索,如果找到了这个字符串,就将含有这些内容的行输出。
查找文件里有字符h的字符串:grep h 文件名
匹配整个单词:grep -w 单词 文件名
匹配以q开始的行:grep 1 文件名
匹配以q结束的行:grep q$ 文件名
匹配以数字开头的行:grep 2 文件名
匹配以q或者f开头的行:grep 3 文件名
不匹配以q或者f开头的行:grep [qf] 文件名
匹配oo前面不是f或者g的字符串:grep [^gf]oo 文件名
匹配以#号开头的行:grep ^#
过滤空白行:grep ^$
如果要明确搜索子目录:grep -r h ./*
忽略子目录:grep -d skip h ./*
-l:查询多文件时只输出包含匹配字符的文件名
搜索时忽略大小写:grep -i
搜索时显示没有匹配到的行:grep -v
搜索时显示匹配到的那一行以及下2行:grep -A 2
搜索时显示匹配到的那一行以及上2行:grep -B 2
搜索时显示匹配到的那一行以及上下2行:grep -C 2
创建、删除目录文件
创建目录文件:mkdir
格式:mkdir [OPTION]… DIRECTORY…
-p 如果需要的话创建父目录
-v显示创建目录的详细过程
删除文件:rm(rm是rm -i的命令别名,该选项用来提示用户进行交互)
格式: rm [OPTION]… FILE…
删除普通文件:rm [-f] 文件名
删除目录文件:rm -r [-f] 目录文件名
复制、移动文件
复制文件:cp
格式:cp [OPTION]… [-T] SOURCE DEST
cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE…
移动文件:mv
格式:mv [OPTION]… [-T] SOURCE DEST
mv [OPTION]… SOURCE… DIRECTORY
mv [OPTION]… -t DIRECTORY SOURCE…
查找文件的路径
文件名的查找:
whereis和locate都是利用数据库查找数据(Linux系统会将系统内的所有文件都记录在数据库文件里面,当使用whereis和locate进行查找时,都会以此数据库的内容为准)
数据库文件/var/lib/mlocate/mlocate.db
数据库的创建默认是每天执行一次,不同的发行版不一样
手动更数据库:直接输入updatedb命令,该命令会去读取/etc/updatedb.conf这个配文件的设置,然后再去硬盘里面进行查找文件名的操作,最后就更新整个数据库文件。
locate会将有文件名及其所在路径包含关键字段的文件与目录都显示。
find [path] [options] [expression]
1.与时间有关的参数:共有-atime,-ctime,-mtime。ll --time=atime
-mtime n:意义为在n天之前的一天之内被更改过的文件;-mtime 4,前4~5那一天的文件名
-mtime -n:列出在n天之内(包含n天本身)被更改过的文件名;-mtime -4,小于等于4天内的文件名
-mtime +n:列出在n天之前(不包含n天本身)被更改过的文件名;-mtime +4,大于等于5天前的文件名
find /-mtime 0 #0代表目前的时间,所以从现在开始到24小时前有改动过内容的文件都会被列出来
find /etc/ -newer /etc/passwd寻找/etc/下面的文件,如果文件日期比/etc/passwd新就列出
2.与用户或者用户组名有关的参数
-uid n:n为数字,这个数字是用户的账号ID,即UID
-gid n:GID
-user name:根据文件拥有者寻找文件
-group name:根据文件所属组寻找文件
-nouser:寻找文件的所有者不存在/etc/passwd的人
-nogroup:寻找文件的所有用户组不存在于/etc/group(当你自行安装软件时,很可能该软件的属性当中并没有文件所有者)
3.与文件权限及名称有关的参数
-name filename:查找文件名为filename的文件,支持通配符和?(由于find命令自己能解析通配符的含义,所以加引号不会让和?这两个符号失效)
-size [±]SIZE:查找比SIZE还要大(+)或者小(-)的文件。这个SIZE的规格有:c代表字节,k代表1024字节。-size +50k表示要找比50kB还要大的文件。
-type TYPE:根据文件类型查找文件,一般正规文件f,设备文件c、b,目录d,链接文件l,socket(s),FIFO(p)
-perm -mode:根据文件权限寻找文件。-perm -0744,当一个文件权限为4755时,也会被列出来。
-perm +mode:查找文件权限“包含任一mode的权限”的文件。-perm +755,当一个文件权限为-rw-------时也会被列出来,因为它有rw的属性存在
find /bin /sbin -perm +6000找出在/bin和/sbin这两个目录下具有SUID或SGID的文件
4.其他可执行的操作
-exec command:command为其他命令,-exec后面可再接其他的命令来处理查找到的结果
-print:将结果打印到屏幕上,这个操作是默认操作
find / -perm +700 -exec ls -l {} ;
{}表示“由find找到的内容”,find的结果会被放置到{}位置中。
-exec一直到“;”是关键字,代表额外命令的开始(-exec)到结束(;),在这中间的就是find命令内的额外命令。额外的命令不支持命令别名。