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不在范围内
特性mlocateplocate
速度较慢较快
数据库大小较大较小
索引更新方式全量更新增量更新
支持的数据库格式Berkeley DBPosting 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