1.切换目录
$ cd /usr/bin # 切换至指定目录
$ cd ~ # 主目录
$ cd . # 当前目录
$ cd .. # 上级目录
$ cd - # 最近两次工作目录来回切换
2.查看文件
# 示例 列出文件(夹)
$ ls -lspha --color=auto /
$ ls [选项] [目录/文件]
-a # 列出所有文件(夹)
-l # 列表模式输出
-h # 与 -l 一起使用, 列出详细信息, 便于阅读文件大小, 即长格式
-s # 以块数形式显示每个文件分配的尺寸
-p # 对目录加上表示符号 "/"
-d # 只列出文件夹信息
-i # 显示 inode
# -简写命令, --全写命令
3.文件属性
[root@unix] ~# ls -l ? #下面的例子是从不同的文件夹中找的
drwxr-xr-x. 75 root root 8.0K 2月 9 15:13 etc/
lrwxrwxrwx. 1 root root 7 4月 21 20:19 lib->...
-r--r-----. 1 root root 4.3K 9月 30 21:18 sudoers
brw-rw----. 1 root disk 8 12月 9 13:10 sda1
crw-------. 1 root root 252 2月 9 13:10 rtc0
字符 | 解释 |
---|---|
d,l,c,b,- | 文件类型 |
rwx rwx rwx | 属主权限 属组权限 其他人权限 |
. | ACL权限 |
75 | 硬链接数 |
root root | 属主 属组 |
8.0K | 对象大小 |
2月 9 15:13 | 最后修改日期 |
etc/ | 对象名称 |
如上表所述 | |
第一个字符表示对象类型 |
- d 目录
- - 文件
- l 软链接文件(link)
- b 可供存储接口设备(块设备文件,可随机读取,如硬盘)
- s 套接字文件
- p 管道文件
- c 串行端口设备(字符设备文件,不可随机读取,如键盘)
接下来有三组字符: rwxr-xr-w
第一组表示所有者的权限
第二组表示所属组的权限
第三组表示其他用户权限
其中
[r]表示读取 数字表示 [4]
[w]表示写入修改 数字表示 [2]
[x]表示执行权限 数字表示 [1]
[s]特殊权限 (SetUID/SetGID)
[t]特殊权限 (StickyBIT)
长格式如下:
文件类型 : 文件所有者权限 : 文件所属组权限 : 其他用户权限 : ACL权限 : 硬链接数 : 所有者用户名 : 所属组组名 : 占用空间 : 修改日期 : 对象名称
4.文件(夹) · 基本操作
创建文件(夹)
$ touch [选项] [目标文件]
-m # 更新"修改时间"
-a # 更新"访问时间"
-c # 不创建任何文件
$ mkdir [选项] [目标目录]
-m # 创建目录时指定权限
-p # 递归创建
# 举例
$ mkdir -m=777 notes
$ mkdir -m=u=rwx,g=rwx,o=rwx notes
$ mkdir -p d1/d2/d3/d4
删除文件(夹)
$ rm [选项] [被删除文件]
-i # 每次询问是否删除
-f # 强制且无提示
-r # 递归删除目录下内容
$ rm -rf f1 f2 d3/ d4 # (示例) 强制删除文件f1, f2, 文件夹d3, d4
# rm 命令要慎用!
$ rmdir # 删除空目录
复制文件(夹)
$ cp [选项] [单个原文件] [目标文件]
$ cp [选项] [原始文件集] [目标位置]
-i # 覆盖时提示
-f # 如果存在目标文件直接覆盖不提示
-r # 复制文件夹和全部子文件
-p # 复制文件属性
移动文件(夹)
$ mv [选项] [单个原文件] [目标文件]
$ mv [选项] [原始文件集] [目标位置]
-i # (则覆盖前提示已存在文件) 可以重命名文件
-f # 直接覆盖已存在的目标文件而不提示
-b # 如果目标文件存在, 则覆盖前自动创建备份 (文件名以~结尾)
# (示例) 将文件1,2,3,4,5一次性移动到根目录下
$ mv 1 2 3 4 5 /
文件查看
$ pwd # 显示当前工作目录
$ tree -d # 树状图文件目录结构 (-d 只显示目录)
# 顺序输出
$ cat [选项] [被查看文件]
-s # 抑制重复的空输出行
-b # 非空输出行号, 重写-n
-n # 输出所有行行号
-v # 使用^和M-表示法,LFD和TAB除外
-E # 在每行末尾显示换行标记 $
-T # 将TAB字符显示为^I
-e # 相当于-vE
-t # 相当于-vT
-A # 显示隐藏字符 (相当于-vET)
# 逆序(按行)输出
$ tac [选项] [被查看文件]
-b # 在之前而不是之后附加分隔符
-r # 将分隔符解释为正则表达式
-s "STRING" # 使用 STRING 作为分隔符而不是换行符
# 分屏查看大文件
# enter 向下翻一行, space /f 前进一页
# b 后退一页, q退出, /word 搜索,
$ more [选项] [被查看文件]
-d # 显示帮助而不是铃声
-f # 计算逻辑行数而不是屏幕行数
-l # 表单馈送后禁止暂停
-c # 不滚动, 显示文本并清除行尾
-p # 不滚动, 清除屏幕并显示文本
-s # 将多个空行压缩为一行
-u # 取消下划线和粗体
-n [number] # 设置每屏的行数
# 分屏查看大文件, 比 more 功能更加丰富
$ less [被查看文件]
# 查看文件最后几行
$ tail -n 5 # 只显示 (5行) 文件尾部内容
-f # 动态显示文件内容
# 查看文件开头几行
$ head -n 9 # 只显示(9行)文件头部内容
文件类型
$ file [文件] # 查看文件类型
链接
$ ln file newfile # 硬链接
# 它们共用同一个磁盘空间
# 可以同步更新, 但不可跨分区, 不可对目录使用
$ ln -s file newfile # 软链接, 目标文件必须存在, 否则链接无效
# 像快捷方式, 可以跨分区, 可以指向目录
$ readlink # 将软链接当作文件读取, 而不是读取链接指向的文件
重定向
$ echo "text" > file # stdout 覆盖到目标文件
>> file # stdout 追加到目标文件
$ echo "text" 2> file # stderr 覆盖到目标文件
2>> file # stderr 追加到目标文件
$ echo "text" &> file # 混合覆盖到目标文件
&>> file # 混合追加到目标文件
[stdout+err] > file 2>&1 # 混合覆盖到目标文件
[stdout+err] >> file 2>&1 # 混合追加到目标文件
# 举例: 命令 ls 如果正确执行并且有输出就写入a.txt 错误就写入b.txt
$ ls >> a.txt 2>> b.txt
重定向 | 正确输出 | 错误输出 | 混和输出(两种写法) |
---|---|---|---|
覆盖 | [>] | [2>] | [&>];[>] [2>&1] |
追加 | [>>] | [2>>] | [&>>];[>>] [2>&1] |
5.搜索 · 过滤
文件/目录搜索
$ find [搜索范围] [-参数] [匹配条件]
-type # 指定文件类型, d/f/l:目录/普通文件/软链接
-name # 按照指定文件名
-iname # 忽略文件名大小写
-size # 按照文件大小
# [+200][-500][110]表示大于/小于/等于200/500/110
# 单位: 数据块, 1数据块=512字节=0.5Kb
-inum # 按照inode
-user # 按照所属用户
-group # 按照所属组
-amin # access访问时间
-cmin # change文件属性
-mmin # modify文件内容
# 这3个后面加上-30, 表示找出30分钟之内
# 修改过访问时间/文件属性/文件内容的文件
-a # 用于 "且" 的逻辑运算
-o # 用于 "或" 的逻辑运算
-ok [commd] {} \; # 表示对搜索结果进一步操作
# 大括号{}表示搜索结果, 并将其作为新命令的输入
# 反斜杠\表示转义, 封号;表示结束
# 如 find /tmp -name data -ok ls -l {}\;
-exec [cmd] {} \; # 同上但是没有询问信息
# 举例:
$ find /etc -iname *.conf -a -size +204800 -user root -o -group root -mmin 60
# 查找条件:
# 文件名以 .conf 结尾
# 文件大小大于 204800 字节
# 文件所有者为 root 或文件所属组为 root
# 文件在 60 分钟内被修改过
# 建议: 尽量缩小搜索范围, 精确搜索条件, 避免系统资源高占用
通配符:
* 该通配符表示匹配 0 个到任意多个的任意字符
? 该通配符表示匹配一个且只匹配一个任意字符
# locate 可以基于数据资源库快速查找文件,速度快,占用资源少
# 数据库:/var/lib/mlocate/mlocate.db 或者 /var/lib/plocate/plocate.db
# 需要安装软件包 mlocate/plocate
$ locate [选项] [匹配模式]
-b # 仅搜索路径名的文件名部分 (路径不参与匹配)
-c # 打印匹配数, 而不是匹配项
-d [PATH] # 在DBPATH中搜索文件
-i # 不区分大小写搜索
-l [LIMIT] # 匹配项数量不会多于 LIMIT
-0 # 用 NUL 而不是换行符分隔匹配项
-N # 不要引用文件名, 即使打印到tty
-w # 搜索整个路径名 (这是默认的;请参见-b)
$ updatedb # 系统会定期更新数据库, 也可以手动更新, 但是/tmp不在范围内
特性 | mlocate | plocate |
---|---|---|
速度 | 较慢 | 较快 |
数据库大小 | 较大 | 较小 |
索引更新方式 | 全量更新 | 增量更新 |
支持的数据库格式 | Berkeley DB | Posting lists |
其他特性支持 | 正则表达式搜索 | 支持模糊搜索 |
文件内容搜索
$ grep -n # 显示匹配行和行号
-v # 显示不包含匹配文本的所有行
-i # 忽略大小写
--color=auto # 高亮显示匹配项
$ grep -in [关键词] [待搜索文件]
# ^a 行首, 搜索以a开头的行
# e$ 行尾, 搜索以e结尾的行
可执行文件 (命令) 的搜索
$ which [commd] # 输出文件所在的绝对路径
$ which bash # 输出 /bin/bash
$ whereis [commd] # 输出文件的绝对路径和帮助文档所在位置
$ whereis bash # 输出 bash: /usr/bin/bash
# /usr/share/man/man1/bash.1.gz
# /usr/share/info/bash.info.gz