Linux学习笔记 ·001【基本操作、常用命令】(还有一小部分待更新完整,暂时先发布了)

一、基本操作

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.txt02.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/exciousls ~-就相当于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.txtnew1,将其作为输出
第三个命令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,覆盖文件要提示

猜你喜欢

转载自blog.csdn.net/qq_44220418/article/details/115192982