Linux文件和目录常用命令

Linux文件系统和windos文件系统区别

  1. linux区分大小写,windows在dos界面命令下不区分大小写
  2. linux所有内容均以文件形式保存包括硬件、用户,而windows文件和硬件没什么关系,两个之间没有关联;
  3. windows用扩展名区分文件如.exe代表执行文件,.txt代表文本文件,而linux无扩展名的概念,
    当然为了管理员区分方便会有部分扩展,例如.gz ,.bz2 ,.tar.bz2代表压缩包,.html ,,php代表网页文件,这些纯粹是给管理员看的便于区分,
    但是linux本身是没有扩展名的,linux是以权限区分文件的,文件权限总共有十位(可用ls -l查看每个文件的权限)
  4. windows属于多根目录文件系统,linux属于根目录文件系统,所有文件都在根目录()下,
  5. Linux有四种基本文件系统类型:普通文件、目录文件、连接文件和特殊文件,可用file命令来识别。
    详见:https://www.cnblogs.com/cyjaysun/p/4462325.html
  6. Linux文件或者目录名称最长可以有256个字符
    以.开头的文件为隐藏文件,需要使用-a参数才能显示,比如在桌面上touch .123.txt ,这个文件是看不到的
    .代表当前目录
    ..代表上级目录

常见命令

曾经使用过的命令

按上下光标键可以在曾经使用过的命令间来回切换
如果想退出选择并且不想执行当前选中的命令,可以按 ctrl+c

ls命令常用选项

-a 显示指定目录下所有子目录与文件,包括隐藏文件
-l 以列表方式显示文件的详细信息(权限,大小,修改时间等),白色字体为文件,蓝色字体为目录首字母为d
-h 配合-l以人性化的方式显示文件大小,单独使用无效果。
-lS 列出文件列表的同时按size从大到小排序
-r 按行逆序输出
-R 递归列出遇到的子目录,当内容太多可以用ctrl+c停止终端输出
-t 按时间顺序排序
以上选项常常参杂配合使用,十分灵活,下面有几个常见用法:
ls *.txt : 列出以.txt结尾的文件(*为通配符)
ls -al > mydirectorylist: 将目录信息写入文件(>为输出重定向,若文件存在则覆盖,否则创建并写入)
ls -ltr : 以修改时间倒序列出

ls通配符的使用

* 代表任意多个字符
? 代表任意一个字符
[] 代表可以匹配字符数组中的任意一个
[abc] 匹配a\b\c中的任意一个
[a-f] 匹配从a-f范围内的任意一个字符

touch

创建文件或修改文件时间(普通文件),如果文件不存在则创建一个空白文件,否则修改文件的修改时间。
-a 只更改访问时间
-c 不创建任何文件
-d 用指定数字串(4位以内必须合法)表示文件时间
-m 只更改修改时间,和访问时间不同

mkdir

在当前目录下创建新的目录,新的目录名称不能与当前目录中已有的目录或文件重名
mkdir命令不加任何选项默认在当前目录下创建目录,目录的默认权限为777-umask。如果目录已经存在将会提示错误。
-p 递归创建目录,若要创建的路径已存在,则忽略
-m 为目录指定权限,如 mkdir -m=777 a (创建目录a并指定权限为:rwxrwxrwx)
-v 为每个目录打印提示信息,一般和-p联用
例: mkdir -pv 123/{1,2/{3,4}} #注意不要有多余空格

1
2
3
4
5
mkdir: 已创建目录 "123" 
mkdir: 已创建目录 "123/1"  
mkdir: 已创建目录 "123/2"
mkdir: 已创建目录 "123/2/3"
mkdir: 已创建目录 "123/2/4"

rm命令删除文件或目录,直接从磁盘上删除,而非放入回收站,无法恢复,慎用!

-r 递归删除目录下的内容,若删除的是文件夹则必须加此参数
-f 强制删除,忽略不存在的文件,不显示提示信息
-i 提示是否移除每个文件。如果回答是否定的(y/n),文件将被跳过
-v 在移除每个文件之前打印其名称,一般和-r联用
例: mkdir -p 123/1/2

1
2
3
4
rm -rv 123  
已删除目录:"123/1/2"
已删除目录:"123/1"
已删除目录:"123"

rm与rmdir

rmdir [options] directory...
rmdir 删除空目录。如果所给出的目录不为空,则报错
-p如果目录由多个路径名组成,从最后一个路径名开始依次删除,直到所有的路径名都被删完。
例如:命令rmdir -p a/b/c按 照rmdir/a/b/c; rmdir a/b; rmdir a的顺序删除目录。

cp与mv,拷贝和移动文件
copy

cp 源文件 目标文件
cp 复制文件(或者目录等),可以使用这个命令复制一个文件到一个指定的目的地,或者复制任意多个文件到一个目的目录.
如果目标路径已有重名文件则覆盖,否则直接复制并给其命名。
-i 提示是否覆盖现有普通目标文件。
-r 若给出的源文件是目录文件,则递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名,否则提示无法覆盖非目录

move

mv 源文件 目标文件
mv改“源文件”名到“目标文件”名, 或移动“源文件”(可以不只一 个)到一个“目录”
若操作合法的前提下:当目标文件含有与源文件重名的文件时直接覆盖;当目标文件不存在则创建目标文件再将内容移入,相当于重命名
-f 直接覆盖不提示
-i 覆盖前提示
-v 说明完成了什么

查看文件内容
cat [选项列表] [文件列表]...

将文件列表中的文件或标准输入连接到标准输出。
-A 全部显示
-b 给非空行输出行号
-n 给所有行输出行号
-s 将所有的连续的多个空行替换为一个空行

more

more是一个过滤器, 用于分页显示(一次一屏)文本.
-num 这个选项指定屏幕的行数 (以整数表示).
+num 从行号num开始显示
-f 使more计数逻辑行, 而不是屏幕行 (就是说, 长行不会断到 下一行).
-s 把重复的空行压缩成一个空行.

grep

grep [options] PATTERN [FILE...]
Grep 搜索以 FILE 命名的文件输入(或者是标准输入,如果没有指定文件名,或者给出的文件名是-的话),寻找含有与给定的模式PATTERN相匹配的内容的行。
默认情况下,grep将把含有匹配内容的行打印出来。
^a 行首,搜寻以a开头的行
a$ 行尾,搜寻以a结束的行
-H 为每个匹配打印文件名。
-i 忽略模式PATTERN 和输入文件中的大小写的分别。
-n 在输出的每行前面加上它所在的文件中它的行号。
-R/r 递归地读每一目录下的所有文件。这样做和 -d recurse 选项等价
-v 改变匹配的意义,只选择不匹配的行

正则表达式是一个描述了一个字符串集合的模式。正则表达式的构造类似于算
术表达式,使用各种各样的操作符来将更小的表达式连在一起

echo

echo[OPTION]... [STRING]...
允许在标准输出上显示STRING(s).
-n 不输出行尾的换行符.
-e 允许对下面列出的加反斜线转义的字符进行解释.
-E 禁止对在STRINGs中的那些序列进行解释.

重定向

> 将命令执行结果重定向到一个文件,如果文件已存在,直接覆盖,否则创建文件并写入
>> 表示追加,将内容追加到已有文件的末尾,如果文件不存在则创建文件并写入

管道|

Linux允许将一个命令的输出通过管道作为另一个命令的输入, | 的左端为写,右端为读(管道至少需要两个命令)
常用的管道命令:
more: 分屏显示内容
grep: 在命令执行结果的基础上查询指定的文本
如: ls -lha | grep -n d

实验:在输出信息的同时把信息记录到文件中

tee 命令

用法:tee [选项]... [文件]...
将标准输入复制到每个指定文件,并显示到标准输出。
-a 内容追加到给定的文件而非覆盖
例: ls -l ha | tee -a 1.txt

将一个文件中的内容读入另一个文件中:cat
1
cat a >> b