文章目录
一、基本操作
1、查看目录/文件
使用命令ls
或者dir
显示当前目录下的文件/目录(关于ls
命令的详细用法见本文 ls命令)
使用命令tree
显示当前目录及其子目录下文件和目录的树状结构(有的Linux系统需要安装才能使用,Fedora中是可以直接使用的)
Tips:ls
命令输出的文件会根据其类型标注颜色,dir
默认全部白色
文件类型 | 颜色 |
---|---|
目录 | 深蓝色 |
普通文件 | 白色 |
可执行文件 | 绿色 |
图形文件 | 紫色 |
链接文件 | 浅蓝色 |
压缩文件 | 红色 |
FIFO文件(命名管道) | 棕色 |
设备文件 | 黄色 |
使用示例
使用命令dir
,将显示当前目录下的文件/目录的信息
使用命令ls
,将高亮显示当前目录下的文件/目录的信息
使用命令tree
,将显示当前目录及其子目录下的所有文件/目录的树状结构
2、路径跳转
(1).路径
一个路径可以理解为一个目录/文件的位置,比如/home/excious/lcmd
,这个路径表示根目录/
下有一个home
目录,home
目录下有一个excious
目录,excious
目录下有一个lcmd
目录,这个路径/home/excious/lcmd
代表的就是这个lcmd
目录
终端命令行中能跳转到的路径都是一个目录的路径
在终端(命令行)中,有一个当前路径,代表你当前所在的目录,比如/home/excious/lcmd
像/home/excious/lcmd
这样的路径,称为绝对路径,以根目录符号/
开头
像./cptest
、../new
这样的路径,称为相对路径,以当前目录符号.
开头或以父目录符号..
开头,这种相对是相对于当前目录来说的。比如当前路径为/home/excious/lcmd
,那么路径./cptest
就相当于/home/excious/lcmd/cptest
,路径../new
就相当于/home/excious/new
当然,相对路径中当前目录.
和父目录..
都可以理解为目录中的一个子目录,任何一个目录中都有隐含的这两个目录,.
代表该目录本身,..
代表返回上一级目录(特殊地,根目录的父目录..
仍为自己本身)
因此,根据这种理解,就有另一种不太常用的路径写法,像/home/excious/lcmd/../new/my/././././bash
,理解的时候先把绝对路径的部分读完作为一个临时路径,读到了相对路径的部分则相对于刚才的临时路径解读为绝对路径。
要解读 /home/excious/lcmd/../new/bash/././././my
从前往后读,读到下一个相对路径 .. 或 . 出现的地方之前
/home/excious/lcmd (临时路径1)
读取到父目录 .. 后,将临时路径1变换为其父目录的绝对路径
/home/excious(临时路径2)
继续往后读,读到下一个相对路径 .. 或 . 出现的地方之前
/home/excious/new/bash(临时路径3)
读到当前目录 . 后,将临时路径3变换为其当前目录(自己本身)的路径
/home/excious/new/bash(临时路径4)
后面还有三个 ./ 同样如此解读
/home/excious/new/bash(临时路径5)
继续往后读取,直到结束
/home/excious/new/bash/my(最终路径)
从上面的分析过程中,可以知道,/home/excious/lcmd/../new/my/././././bash
就相当于/home/excious/new/bash/my
(2).跳转
终端(命令行)的当前目录指示了终端当前所在的目录,使用命令pwd
可以查看当前目录完整的绝对路径
pwd
# 输出:/home/excious/new/bash/my
很多时候,与文件相关操作时,直接指明文件名会在当前目录下搜寻,而不需要指明文件的具体路径
比如当前路径为/home/excious/lcmd
,想要查看该目录下一个02.txt
的文件,可以不用cat /home/excious/lcmd/02.txt
,也不用cat ./02.txt
,只需要cat 02.txt
即可(如果直接要直接执行该文件,还是要加上./
的——./02.txt
)
(※):使用cat
命令可以查看文件内容,后面会说明——可见本文 读取文件
因此,为了方便操作某一目录下的文件/目录,我们需要跳转到那个目录,也就是把那个目录作为终端的当前目录
使用cd
命令可以实现目录跳转,格式为cd 目录路径
比如当前路径为/home/excious/lcmd
,想跳转进入到/home/excious/lcmd/cptest/cpdir
,以下三种方式都可以实现
cd /home/excious/lcmd/cptest/cpdir
cd ./cptest/cpdir
cd cptest/cpdir
为什么有必要这样跳转呢,就比如/home/excious/lcmd/cptest/cpdir
这个目录下有两个文件01.txt
、02.txt
,你想用cat
命令分别查看它们的内容,但你当前目录是/home/excious/lcmd
,不跳转就得这么写
cat cptest/cpdir/01.txt
cat cptest/cpdir/02.txt
但是如果跳转了目录,使用cat
命令的时候就可以简化一点
cd cptest/cpdir
cat 01.txt
cat 02.txt
Tips:命令行输入时,按Tab键可以快速补齐文件名、路径、命令,便于快速操作
技巧示例
目录/home/excious/new
下,有如下文件/目录(也可用命令ls
观察)
输入cd
,加上空格,按下Tab,将提示当前目录下有哪些目录可以跳转(如果唯一,则会自动补全;如果不唯一,多次按下Tab将提示可选输入)
$ cd
bash/ dir/ dir2/ gcc/ learn/
$ cd
输入cd b
,按下Tab,将自动补全路径bash/
$ cd b
# 按下Tab键
$ cd bash/
3、创建目录
使用mkdir
命令创建目录
使用mkdir 新建目录名
在当前目录下创建目录
使用mkdir 某存在的目录路径/新建目录名
在指定目录下创建目录
使用mkdir -p 某存在的目录路径/不存在的目录1/不存在的目录2/新建目录名
在指定目录下创建不存在的目录及其子目录
使用示例
目录/home/excious/lcmd
下,有如下文件/目录,终端(命令行)的当前目录为/home/excious/lcmd
使用命令mkdir mkdirtest
,将在当前目录下创建一个新的空目录mkdirtest
使用命令mkdir mkdirtest/newtest
,将在刚刚创建的目录mkdirtest
下创建一个新的空目录newtest
使用命令mkdir -p new1/new2/new3
,将在当前目录下创建一个新的空目录new1
,在目录new1
下创建新目录new2
,在目录new2
下创建新目录new3
4、创建文件
方法一:touch
命令
使用示例
touch 01.txt
方法二:重定向符>
重定向符的一些知识可以将参考 输入/输出重定向符
使用示例
> 02.txt
方法三:echo
命令+重定向符>
(创建并写入)
使用示例
echo "内容" > 03.txt
方法四:cat
命令+重定向符>
(创建并写入)
使用示例
cat > 04.txt
内容
内容内容
^C # (按Ctrl + C)
思考与理解:
\qquad 其实,简单理解吧,cat
命令和echo
命令都能得到一个字符串
\qquad cat
命令和echo
命令都能得到一个字符串
\qquad\qquad cat
命令根据参数文件名读取文件的内容生成字符串
\qquad\qquad echo
命令根据参数字符串得到一个字符串
\qquad 如果命令行最终得到了这个字符串会在命令行中直接显示
\qquad 如果这个字符串顺着重定向符>
将会流向指定的文件
\qquad 如果这个字符串遇到管道|
将会作为参数传入下一条命令
方法五:gedit
命令(文本编辑器创建,需要有GNOME桌面,即可视化界面)
使用示例
gedit 05.txt
Tips:按下 Ctrl + C 结束命令、终止输入
5、写入文件
和创建文件时类似,可以配合cat
命令、echo
命令和重定向符>
或>>
写入文件
使用示例
cat > 01.txt
1
2
3
safs
略
^C # (按Ctrl + C)
6、读取文件
方法一:cat
命令(详细的cat
命令使用可见本文 cat命令 )
使用示例
cat 02.txt
方法二:tac
命令(从最后一行开始,往上按行读取)
使用示例
tac 02.txt
方法三:less
命令(命令行文本阅读器,按q
退出)
使用示例
less 02.txt
方法四:nl
命令(行号显示,相当于cat -n
)
使用示例
nl 02.txt
方法五:head
命令(参数-n 5
读取开头5行)
使用示例
head 02.txt
方法六:tail
命令(参数-n 5
读取末尾5行)
使用示例
tail 02.txt
7、复制文件
使用cp
命令复制文件
使用cp 源文件路径 目标目录路径
在目标目录路径下复制一个同名文件
使用cp 源文件路径 目标文件路径
在目标目录路径下复制一个对应的重命名的文件
使用示例
目录/home/excious/lcmd/new1
下,有如下文件/目录,终端(命令行)的当前目录为/home/excious/lcmd/new1
使用命令cp 1.txt new1.txt
,将把当前目录下的文件1.txt
复制一份并重命名为new1.txt
放到当前目录下
使用命令cp 1.txt cpcp
,将把当前目录下的文件1.txt
复制一份放到目录cpcp
下
使用命令cp 1.txt cpcp/2.txt
,将把当前目录下的文件1.txt
复制一份并重命名为2.txt
放到目录cpcp
下
二、Linux命令行特殊符号
要想看比较全面的,可以参考这篇博文 https://blog.csdn.net/liaowenxiong/article/details/113768770
1、~
、~+
、~-
~
符号代表用户主目录
比如我的用户为excious
,我的用户主目录为/home/excious
,这一目录可以用~
代替
~+
符号代表当前目录,可以相当于.
~-
符号代表上一次的目录
比如终端(命令行)的当前目录为/home/excious
,输入了命令cd new
跳转到/home/excious/new
后,~-
就代表了跳转前的目录/home/excious
,ls ~-
就相当于ls /home/excious
2、&
在命令的最后加上&
符号——命令 &
,代表将该命令放到后台中工作
特性:关闭当前终端窗口,程序仍在运行
3、>
、>>
、<
、<<
>
、>>
、<
、<<
这些是输入/输出重定向符
有三种输入/输出,分别如下:
符号 | 含义 |
---|---|
0 |
代表标准输入(stdin ),配合< 、<< 使用 |
1 |
代表标准输出(stdout ),配合> 、>> 使用 |
2 |
代表标准错误(stderr ),配合> 、>> 使用 |
输入重定向符<
、<<
符号 | 含义 |
---|---|
标准输入重定向符< |
也可写成0< , 文 件 → 数 据 命 令 文件 \xrightarrow[]{数据} 命令 文件数据命令 |
追加输入重定向符<< |
也可写成0<< ,需要后接自定义开始符,再次输入自定义开始符标识输入结束 |
使用示例
# 将a2.txt的内容作为grep命令的输入参数,查找文件内容中包含2的地方
grep -E "*2*" < a2.txt
# 以EOF作为输入的开始符和结束符,输入一系列内容作为grep命令的参数,查找这段内容中包含2的地方
grep -E "*2*" << EOF
12
124
afsa
EOF
命令执行的截图如下:
输出重定向符>
、>>
符号 | 含义 |
---|---|
标准输出重定向符> |
也可写成0> , 内 容 → 数 据 文 件 内容 \xrightarrow[]{数据} 文件 内容数据文件,会清空文件已有内容再输出到文件 |
追加输出重定向符>> |
也可写成0>> ,不会清空文件,而会在文件的末尾追加输出内容 |
错误输出重定向符2> |
错 误 内 容 → 数 据 文 件 错误内容 \xrightarrow[]{数据} 文件 错误内容数据文件,会清空文件已有内容再输出到文件 |
追加错误输出重定向符2>> |
不会清空文件,而会在文件的末尾追加输出内容 |
使用示例
# 将文件1.txt清空,并向其中添加内容
echo -e "123\nabc\n11111" > 1.txt
# 在文件1.txt后添加内容
echo -e "abc\n666" >> 1.txt
命令执行的截图如下:
4、|
|
代表管道,管道命令使用|
作为界定符,详细的管道介绍可参考 https://www.jianshu.com/p/9c0c2b57cb73
管道的作用是把上一条命令的输出结果作为下一条命令的输入参数,形如命令1 | 命令2 | 命令3
-
使用示例
-
当前在目录
/home/excious/lcmd
下,输入以下脚本 -
ls ls | grep "1" ls | grep "1" | wc -l
- 可以观察到以下输出:
- 解释一下
-
第一个命令
ls
,我们可以看到有01.txt 02.txt 03.txt 04.txt cptest examples new1 testsort.txt
,这其实就是ls
命令的输出 -
第二个命令
ls | grep "1"
,其实就是把上一个命令ls
的输出作为grep
命令用来匹配的输入参数,grep
命令对前面的输出结果01.txt 02.txt 03.txt 04.txt cptest examples new1 testsort.txt
进行查找匹配,匹配路径中含有1
的内容 - 输出结果如下:
-
01.txt new1
-
从输出结果来看,他匹配到了两行数据
01.txt
和new1
,将其作为输出 -
第三个命令
ls | grep "1" | wc -l
,其实就是把上一个命令ls | grep "1"
的输出作为wc
命令用来统计的输入参数,wc
命令对前面的输出结果进行统计,统计共有多少行,输出了2
三、Linux常用命令
1、cat
命令
cat
命令
- 加入参数
-n
显示行号
加入参数-b
计算行号跳过空白行 - 加入参数
-s
将两行以上的空行显示为1行 - 加入参数
-E
用$
显示行尾(-e
⇔ ⇔ ⇔-vE
)
加入参数-T
用^I
显示Tab符(-e
⇔ ⇔ ⇔-vT
)
加入参数-v
显示^M
符号
加入参数-A
来show all,相当于-vET
使用示例
当前目录为/home/excious/lcmd/examples/cat
,该目录下仅有一个1.txt
文件,其内容如下图所示:
使用命令cat 1.txt
,显示1.txt
的内容
使用命令cat -n 1.txt
,显示1.txt
的内容,并标注行号
使用命令cat -b 1.txt
,显示1.txt
的内容,并标注行号(标注时跳过空行,但会显示出空行)
使用命令cat -ns 1.txt
,显示1.txt
的内容,并标注行号(将多行空行显示为1行空行)
Tips:多个简单的参数可以合并起来写——-n -s
相当于-ns
使用命令cat -nET 1.txt
,显示1.txt
的内容,并标注行号(在行尾显示$
、将Tab符显示为^I
)
2、ls
命令
ls
命令
- 加入参数
-a
增加.
和..
的目录显示
加入参数-A
不显示.
和..
的目录(默认) - 加入参数
-l
显示详细信息 - 加入参数
-r
反序显示
加入参数-t
按时序显示 - 加入参数
-R
显示当前目录中所有文件、子目录、子目录下的全部文件 - 加入参数
-F
在目录后加/
、在可执行文档后加*
使用示例
当前目录为/home/excious/lcmd
使用命令ls
,查看当前目录下的文件/目录
使用命令ls -a
,查看当前目录下的文件/目录(包括当前目录.
和父目录..
)
使用命令ls -l
,查看当前目录下的文件/目录的详细信息
使用命令ls -r
,查看当前目录下的文件/目录,并反序显示
使用命令ls -t
,查看当前目录下的文件/目录,并按创建时间排序(最新修改的的优先)
使用命令ls -tr
,查看当前目录下的文件/目录,并按创建时间排序(最新修改的的最后)
使用命令ls -F
,查看当前目录下的文件/目录,并分别用*
和/
标识可执行文件和目录
使用命令ls -R
,查看当前目录及其子目录下的文件/目录
3、find
命令
find
命令
- 使用参数
-name
可以当前目录及其子目录下名称匹配的文件/目录 - 通过在最前面加入全局参数
-maxdepth 1
指定只在当前目录下查找 - 使用参数
-type
指定文件类型
类型标识 说明 d
目录 c
字型装置文件 b
区块装置文件 p
具名贮列 f
一般文件 l
符号连结 s
socket
使用示例
当前目录为/home/excious/lcmd
使用命令tree
,观察当前目录及其子目录下文件/目录的树形结构
使用命令find -name "*.txt"
(省略了要查找的目录.
,实际上是find . -name "*.txt"
),查找当前目录及其子目录下文件名满足*.txt
的文件/目录(*
代表任意个任意字符,*.txt
代表任意以.txt
结尾的文件/目录)
使用命令find /home/excious/lcmd -name "*.txt"
,查找目录/home/excious/lcmd
及其子目录下文件名以.txt
结尾的文件/目录
上面两例其实查找的是同一个目录,一个的结果显示形式是相对路径,一个的结果显示形式是绝对路径,这是因为指定的查找路径形式不一样,因此可知find
命令输出的形式取决于查找路径的形式
但是有时候,我们只想在某目录下查找,而不想在该目录的所有子目录下查找,因此我们可以加上参数-maxdepth 1
限定向下查找的深度为1
使用命令find -maxdepth 1 -name "*.txt"
,查找当前目录.
下文件名满足*.txt
的文件/目录
使用命令find -maxdepth 1 -type d
,查找当前目录.
下所有目录文件(会把自己本身.
算入)
4、grep
命令
grep
命令
- 一般使用格式
grep 要查找的文件内容 要匹配的文件名格式
- 加入参数
-c
统计所有查找的各个文件中,每个文件出现要查找内容的次数 - 加入参数
-B n
显示文件中匹配到要查找内容的前n行的内容
加入参数-A n
显示文件中匹配到要查找内容的后n行的内容 - 加入参数
-v
反向查找,显示出所有查找文件中不包含要查找内容的行 - 加入参数
-r
在对应目录及其子目录下进行查找(将要匹配的文件名格式换成要查找的目录) - 加入参数
-E 正则表达式
可以用正则表达式去匹配 - 加入参数
-l
输出能够匹配要查找内容的文件的文件名
加入参数-L
输出不能够匹配要查找内容的文件的文件名 - 加入参数
-n
显示找到内容在文件中对应的行号 - 加入参数
-i
查找时忽略大小写
使用示例
当前目录为/home/excious/lcmd
使用命令grep 12 *.txt
,查找当前目录.
下所有.txt
文件内容中包含12
的部分
使用命令grep -c 12 *.txt
,查找当前目录.
下所有.txt
文件内容中12
出现的次数
5、wc
命令
wc
命令
wc 文件名
显示文件的行数、单词数、字节数wc
命令输入多个文件参数可以多个组合统计- 加入参数
-l
显示行数(默认) - 加入参数
-c
显示字节数(默认) - 加入参数
-w
显示字数(默认)
6、cp
命令
cp
命令
- 加入参数
-r
才可以复制目录及目录下的所有文件 - 加入参数
-p
复制访问权限和修改时间 - 加入参数
-l
,不复制文件,只生成链接(硬链接,不像Windows中的快捷方式) - 加入参数
-d
,生成链接(软链接,不过删除了源文件后链接文件似乎也能打开) - 加入参数
-f
,覆盖文件不提示(默认情况) - 加入参数
-i
,覆盖文件要提示