Linux命令——文件管理
cat命令
命令:cat
cat命令用于连接文件并打印到标准输出设备上。
使用权限
所有使用者
语法格式
cat [选项列表] [文件列表]
参数说明
-A, –show-all
-b, –number-nonblank 给非空输出行编号
-E, –show-ends 在每行结束显示$
-s, –squeeze-blank 将所有的连续的多个空行替换为一个空行
-T, –show-tabs 把TAB字符显示为^I
-v, –show-nonprinting 除了LFD和TAB之外所有控制符用^和M-记方式显示
–help 显示帮助信息并退出
–version 显示版本信息并退出
实例
查看textfile1.txt文件的内容并并打印到标准输出设备上
cat textfile1.txt
把textfile1.txt的文档内容加上行号后输入textfile2.txt文档中:
cat -n textfile1.txt > textfile2.txt
把textfile1.txt和textfile.txt的文档内容加上行号(空白行不加)之后将内容附加到textfile3.txt文档里
cat -b textfile1.txt textfile2.txt >> textfile3.txt
chmod命令
命令:chmod
chmod - 改变文件的访问权限
使用权限
所有使用者
语法格式
chmod [-cfvR] [--help] [--version] [--]
参数说明
其中:
- u表示文件的拥有者,g表示与该文件的拥有者属于同一个群体(group)者,o表示其他以外的人, a表示这三者皆是(所有用户)。
- +表示增加权限、-表示取消权限、=表示唯一设定权限。
- r表示可读,w表示可写, x表示可执行,X表示只有当该文件是一个子目录或者该文件已经被设定过为可执行。
其他参数说明:
-c, –changes 只有在文件的权限确实改变时才进行详细的说明
-f, –silent, –quiet 不能输出权限不能改变的文件的错误信息
-v, –verbose 详细说明权限的变化
-R, –recursive 改变目录及其所有子目录的文件的权限
–help 显示辅助说明
–version 显示版本信息
实例
将文件file.txt设置为所有人皆可读取:
chmod ugo+r file1.txt
chmod a+r file1.txt
将文件file.txt设置为该文件拥有者,与其他同一个群体者可写入,但其他以外的人则不可写入
chmod ug+w,o-w file.txt
将hello.py设定为只有该文件拥有者才可以执行
chmod u+x hello.py
将目录下的所有文件与子目录皆设为任何人可读取
chmod -R a+r *
用数字来表示权限
用的三位二进制数来表示,如 rwx为111,转为十进制为7,rw-为110,十进制为6,r-x为101,为5,r–为100,为4
设置为所有人可读可写可执行
chmod 777 hello.py
chown 命令
命令chown
修改文件所有者和组别
chown修改每个由第一个非选项参数声明的给定file文件的用户和/或组的所有权
使用权限
所有使用者
语法格式
chown [options] user [:group] file...
参数说明
-R 递归地修改目录及其下面内容的所有权
-c, –changes 详尽地描述每一个file实际改变了哪些所有权
-f, –silent, –quiet 不打印文件所有全部能修改的报错信息
-h, –no-dereference 只作用于其本身的符号链接,而部修改他们所指向的文件, 这只在提供了lchown系统调用的情况下才使用
-v, –verbose 详尽地描述对每个file所执行的操作(或者无操作)
–dereference 修改符号链接目标端的所有权,而非符号链接自身
–reference=rfile 修改file的所有权为rfile的所有权
–help 在标准输出上打印一条用法信息,并以成功状态退出
–version 在标准输出上打印版本信息,然后以成功状态退出
实例
将文件file1.txt的拥有者设为users群体的使用者tengtengcai
将文件file2.txt的拥有者设为root超级管理员的使用者
chown tengtengcai:users file1.txt
chown root file2.txt
cmp命令
命令cmp
比较两个文件一个字节一个字节的不同
语法
cmp [-clsv][-i <字符数目>] [--help] [文件名称1] [文件名称2]
参数
-b, –print-bytes 输出不同的字节
-i, –ignore-initial 跳过两个输入的第一个跳过字节
-l, –verbose 输出两个文件不同字节数的值
-n, –bytes=LIMIT 最多比较limit个字节
-s, –quiet, –silent 支持所有的普通输出
–help 显示帮助信息并正常退出
-v, –version 输出版本信息并正常退出
实例
比较file1.py和file2.py两文件字节的不同
cmp file1.py file2.py
diff命令
命令diff
找出两个文件的不同点
语法
diff [选项] 源文件 目标文件
参数
-a 所有的文件都视为文本文件来逐行比较,甚至他们似乎不是文本文件
-b 忽略空格引起的变化
-B 忽略插入删除空行引起的变化
–brief 仅报告文件是否相异,在乎差别的细节
-c 使用上下问输出格式
-C 行数(一个整数)
–context[=lines] 使用上下问输出格式,显示以指定行数(一个整数), 或者是三行(当行数没有给出时,对于正确的操作,上下文至少要有两行)
-i 忽略大小写
-r 比较子目录中的文件
-v 显示版本信息,并正常退出
-help 显示帮助信息,并正常退出
实例
比较两个文件的不同
diff cal.py cal1.py
3c3
<
---
> # 这是注释
30c30
<
---
> # 这也是个注释
file命令
命令file
确定文件类型
语法
file [-bcnsvzL][-f 命令文件][-m 幻数文件] file...
参数
-b 不输出文件名(简要模式)
-c 检查时打印输出幻数文件的解析结果,常与-m一起使用,用了在安装幻数文件之前调试它.
-f 命名文件 从参数表前的[命名文件], 中读出将要检查的文件名(每行一个文件), 要有[命名文件],或者至少有一个文件名参数;如果要检查标准输入,使用‘’-‘’作为文件参数.
-m list 指定包含幻数的文件列表,可以是单个文件,也可以是用冒号分开的多个文件.
-n 每检查完一个文件就强制刷新标准输出,仅在检查一组文件时才有效,一般在将文件类型输出到管道时才采用此选项.
-v 打印程序版本并退出.
-z 视图查看压缩文件内部信息.
-L (在支持符号链接的系统上)选项显示符号链接文件的原文件,就像ls命令的like-name选项
-s 通常,file只是视图去检查在文件列表中那些stat报告为正常文件的文件类型,由于读特殊文件将可能导致不可知后果,所以这样可以防止发生问题。使用-s选项时file命令也将去读取文件列表中的块特殊文件和字符特殊文件.
实例
显示文件类型:
file test.py
test.py: Python script, UTF-8 Unicode text executable
# 不显示文件名称
file -b test.py
Python script, UTF-8 Unicode text executable
# 显示MIME类型
file -i test.py
test.py: text/x-python; charset=utf-8
# 不显示名字而且显示出MiME类型
file -bi test.py
text/x-python; charset=utf-8
显示符号链接的文件类型
file nginxhost/
nginxhost/: directory
file nginxhost
nginxhost: symbolic link to `/usr/share/nginx/html/'
git命令
命令git
git是文字模式下的管理员,git是用来管理文件的程序,是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
语法
git [选项参数]
参数
add 添加文件到索引
clone 将存储库克隆到新目录中
commit 记录对数据库的更改
diff 显示提交和提交工作树之间的更改
init 创建一个空Git存储库或重新初始化一个已存在的
log 显示提交日志
**mv **移动或重命名文件、目录或symlink
pull 从另一个存储库或本地分支获取和合并
push 与相关对象一起更新远程引用
rm 从工作树和索引中删除文件
show 显示各种类型的对象
status 显示工作数状态
tag 创建、列出、删除或验证用签名标记的对象
实例
初始化一个仓库
git init
Initialized empty Git repository in /home/tianjun/pycode/.git/
克隆一个github上的一个项目
git clone https://github.com/TengTengCai/BookCrawler.git
Cloning into 'BookCrawler'...
remote: Counting objects: 118, done.
remote: Compressing objects: 100% (48/48), done.
remote: Total 118 (delta 36), reused 49 (delta 19), pack-reused 48
Receiving objects: 100% (118/118), 71.65 KiB | 13.00 KiB/s, done.
Resolving deltas: 100% (62/62), done.
文件到索引
git add code.py
将记录变更到文件库
git commit -m '版本说明,消息'
创建分支
git checkout -b tj
查看分支
git branch
master
* tj
切换分支
git branch master
删除分支
git checkout -D tj
将文件库发送到远端服务器进行更新,只有配置了远端服务器才会生效
git push origin <分支名>
从远端服务器进行更新或回退文件库版本,只有配置了远端服务器才会生效
git pull origin <分支名>
cut命令
命令cut
在文件的每一行中提取片断,在每个文件file的各行中,把提取的片段显示在标准输出
语法
cut [option] [file]
参数
-b, –bytes=LIST 输出这些字节,这些字符位置将忽略多字符边界,除非也指定了-n标志
-c, –character=LIST 输出这些字符
-d, –delimiter=DELIM 自定义分隔符,默认为制表符
-f, –fields=LIST 与-d一起使用,指定显示哪个区域
-n 取消分割多字节符。仅和-b标志一起使用。如果字符的最后一个字符落在由-b标志的List参数指示的范围之内,该字符将被写出,否则,该字符将被移除
实例
查看文件中每行的第一个字符
cat hello.txt
你好
我是藤藤菜
他
cut -c 1 hello.txt
你
我
他
ln命令
命令ln
ln命令是一个飞车重要的命令,它的功能是为某一文件在另外一个位置建立一个同步的链接。当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只需要在某一个固定的目录,放上该文件,然后在其他的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
语法
ln [参数] [源文件或目录] [目标文件或目录]
软链接
- 软链接,以路径的形式存在,类似于windows操作系统中的快捷方式
- 软链接可以跨文件系统,硬链接不可以
- 软链接可以对一个不存在的文件名进行链接
- 软连接可以对目录进行链接
硬链接
- 硬链接,以文件副本的形式存在。但不占用实际空间
- 不允许给目录创建硬链接
- 硬链接只有在同一个文件系统中才能创建
参数
-b 删除,覆盖以前建立的链接
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接)
-v 显示详细的处理过程
实例
less命令
命令less
它与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件
语法
less [参数] [文件]
参数
-b <缓冲区大小> 设置缓存区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时将超出部分舍弃
-x<数字> 将“tab”键显示为规定的数字空格
/字符串 向下搜索字符串的功能
?字符串 向上搜索字符串的功能
n 重复前一个搜索(与/或?有关)
N 反向重复前一个搜索(与/或?有关)
b 向后翻一页
d向后翻半页
h 显示帮助界面
Q 退出less命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一页
回车键 滚动一行
[pagedown] 向下翻动一页
[pageup] 向上翻动一页
实例
查看文件
less myredis.conf
ps查看进程信息并通过less分页显示
ps -ef | less
more命令
命令more
类似cat,不过会以一页一页的形式显示,更方便使用者逐页阅读,而基本的命令就是按空白键(space)就往下一页显示,按b键就会往回(back)一页显示,而且还有搜寻字符串的功能(与vi相似)使用中的说明文件,按h
语法
more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames...]
参数
-num 一次显示的行数
-d 提示使用者,在画面下方显示[Press space to continue, ‘q’ to quit], 如果使用者按错键,则会显示[Press ‘h’ for instructions] 而不是‘哔’一声
-l 取消遇见特殊字元^L(送纸字元)时会暂停的功能
-f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
-p 不以卷动的方式显示每一页,而是先清除屏幕后再显示内容
-c 于-p相似,不同的是先显示内容再清除其他旧资料
-s当遇到有连续两行以上的空白行,就代换为一行的空白行
-u 不显示下引号
+num从第num行开始显示
fileNames 欲显示内容的文档,可为复数个数
实例
逐页显示myredis.conf文件
more myredis.conf
从第480行开始显示myredis.conf文件
more +480 myredis.conf
mv命令
命令mv
用来为文件或目录改名、或将文件或目录移入其他位置。
语法
mv [选项] ... 源文件 目标文件
mv [选项] ... 源文件... 目录
mv [选项] ... --target-directory=DIRECTORY SOURCE...
参数
-b 为现有的每个目标文件作一个备份
-f, –force 覆盖前永不提示
-i, –interactive 覆盖前提示
-u, –update 只移动更老的或者标记新的非目录
-v, –verbose 说明完成了什么
–help 显示帮助并退出程序
–version 输出版本信息且退出程序
实例
将文件aaa更名为bbb
mv aaa bbb
将info目录放入logs目录中。注意,如果logs目录不存在,则该命令info改名为logs
mv info/ logs
将/home/tengtengcai 下的所有文件和目录移到当前目录下
mv /usr/student/* .
rm命令
命令rm
移除文件或目录
语法
rm [操作] [文件或目录]
参数
-i 删除前逐一询问确认
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认
-r 将目录及以下之档案亦逐一删除
实例
删除文件可以直接使用rm命令,若删除目录则必须配合选项“-r”,例如
rm -i test.txt
rm:是否删除普通空文件 "test.txt"?y
不询问,直接删除homework目录下的所有文件
rm -rf homework/*
文件一旦通过rm命令删除,则无法恢复,所以必须格外小心地使用该命令
touch命令
命令touch
用于修改文件或者目录的时间属性,包括存取和更改时间。若文件不存在,系统会创建一个新的文件。
语法
touch [-acm] [-r ref_file(参照文件)] | -t time(时间值)] | file...
参数
-a 修改文件file的存取时间
-c 不创建文件file
-m 修改文件file file
-r ref_file 将参照文件 ref_file相应的时间戳记的数值作为指定文件 file时间戳记的新值
**-t time **使用指定的时间值time做为指定文件file相应时间戳记的新值,此处的time规定为如下形式的十进制数:[[CC]YY]MMDDhhmm[.SS]
实例
使用指令修改文件的时间属性为当前系统时间
touch test.txt
使用指令时,如果指定的文件不存在,则将创建一个新的空白文件,如,在当前目录下使用指令创建一个空白文件file
touch file
cp命令
命令cp
复制文件和目录
语法
cp [选项] 文件路径
cp [选项] 文件...目录
参数
-a, –archive复制时,尽可能保持文件的结构和属性.但不保持目录结构 等同于 -dpR
-d, –no-dereference 复制符号链接作为符号链接而不是复制它指向的文件,并且保护在副本中原文件之间的硬链接.
-f, –force 删除存在的目标文件
-i, –interactive 无论是否覆盖现存文件都作提示
-l, –link 制作硬链接代替非目录拷贝
-p, –parents 保持原始文件的所有者,组,许可和时间表属性
-r 递归地复制目录,复制任何非目录和非符号链接
-R, –recursive 递归地复制目录,保留非目录
实例
使用命令将当前目录test下所有文件复制到新目录newdir下
cp -r test/* newdir