Linux基础命令学习笔记

本文详细介绍了Linux的基础知识,包括目录结构、路径描述方式、常用命令如ls、cd、pwd、mkdir、cp、mv、rm、grep、wc和管道符的使用。重点讲解了ls命令的参数和选项,以及文件和目录的操作。此外,还介绍了Linux命令行编辑器vim的基本操作,包括三种工作模式和常用快捷键。最后,通过实例展示了如何在命令行中查找文件和使用编辑器编辑文本。

前言

我说过我要学习Linux,也已经写了两篇博客了,是看书写的,但是我发现有些不足,不是我想要的

我看的Linux学习笔记,感觉内容不是很深,快速入门的,一共就335多页。我感觉Linux学习的东西还是很多的

看鸟哥的那本书,内容太多了,1100多页,我感觉我跟不上进度。然后我还想看另一本数据分析的书。更何况学期过半,我还要应付考试。

然后目光转向了B站,一开始准备踏踏实实看韩顺平老师的Linux,也做了部分笔记,但是谁知道黑马程序员雪中送炭在B站上架了Linux的教程,这让我很犹豫究竟选哪个,其实内容大概都差不多。我想我的Java就是在B站上学的,于是就看的黑马程序员的Linux,做笔记

Linux的基本操作。

Linux目录

Linux操作系统的目录结构

  • Linux的目录结构是一个树形结构
  • Windows系统可以拥有多个盘符,如C盘、D盘、E盘
  • Linux没有盘符这个概念,只有一个根目录/,所有文件都在下面

Windows可以有多个顶级目录(C盘、D盘),而Linux只有一个顶级目录,根目录/

这里对应了上一篇我的读书笔记的内容,Windows和Linux的文件系统最大的区别就是Windows是由盘符区分,而Linux没有。

文件夹里面是文件夹,是文件这个还是没有变的

Linux路径的描述方式

  • 在Linux系统中,路径之间的层级关系,使用:/来表示
  • 在Windows系统中,路径之间的层级关系,使用:\来表示

实不相瞒,我还真没有注意这个问题,只知道在课上敲目录的都是用的/

  • D:\data\work\hello.txt

    D:表示D盘

    \表示层级关系

这是Windows的路径描述,D盘下有一个data文件夹,文件夹中还有一个文件夹work,work文件夹里面有个hello.txt文件

  • /usr/llocal/hello.txt

    开头的/表示根目录

    后面的/表示层级关系

第一个/表示根目录,其他的/表示层级关系/,那就是根目录下有一个usr文件夹,这个文件夹里面有一个local文件夹,里面是hello.txt文件

这是老师举了个例子,说明Windows和Linux路径描述的区别,我以前还真没有注意过

练习

在根目录下有一个文件夹test,文件夹内有一个文件hello.txt,请描述文件的路径

/test/hello.txt

在根目录下有一个文件itheima.txt,请描述文件的路径

/itheima.txt

在根目录下有一个文件夹itcast,在itcast文件夹内有文件夹itheima,在itheima文件夹内有文件
hello.txt,请描述文件的路径

/itcast/itheima/hello.txt

我的感觉是和Windows的路径描述基本一样,只不过开头部分,Windows可能是C盘、D盘,而Linux只有一个根目录/,然后是层级关系表示不一样,其他的都是一个思想

Linux命令入门

Linux命令基础

什么是命令

  • 命令行:即Linux终端(Terminal),是一种命令提示符页面。以纯“字符”的形式操作系统,可以使用各种字符化命
    令对系统发出操作指令。
  • 命令:即Liux程序。一个命令就是一个Liux的程序。命令没有图形化页面,可以在命令行(终端中)提供字符化的反馈。

我想到了一个直观的解释,python解释器和python代码是什么关系,就是python代码是运行在解释器上的,同理,命令是运行在命令行上的

掌握Linux命令的基础格式

首先要明白,无论是什么命令,用这个做什么,他们的格式都是相同的

command [-aptions] [parameter]

  • command :命令本身
  • -aptions:[可选,非必填]命令的一些选项,可以通过选项控制命令的行为细节
  • parameter:[可选,非必填]命令的参数,多数用于命令的指向目标等

语法中的[],表示可选的意思

然后下面有个例子

  • ls -l/home/itheima,ls是命令本身,-l是选项,/home/itheima是参数
    意思是以列表的形式,显示/home/itheima目录内的内容
  • cp -r test1 test2,cp是命令本身,-r是选项,test1和test2是参数
    意思是复制文件夹test1成为test2

command 就是要执行的命令,这个肯定不能少。因为这个步骤少了,计算机知道你要干什么吗,靠意念玩转Linux?

-aptions我的理解是命令的模式,一个命令有好多模式。不同的模式是不同的效果。如果不填就是默认的。

parameter:这个是要交代一下文件在哪里,你要对这个文件执行命令,那你就要说明白你的文件在哪里。

ls命令入门

ls命令介绍

ls [-a -l -h] [Linux路径]

  • -a -l -h :是可选的选项
  • Linux路径是此命令的可选的参数

当不使用选项和参数,直接使用ls命令本体,表示:以平铺形式,列出当前工作目录下的内容

[huan@localhost ~]$ ls
公共  模板  视频  图片  文档  下载  音乐  桌面

这个命令就类似查看文件夹里面有什么内容,在Windows里面双击这个文件夹就可以看见里面有什么文件,Linux的图形界面也是可以哒。但是在命令行下面,只能通过这种方式查看文件夹内容了。

HOME目录和工作目录

直接输入ls命令,表示列出当前工作目录下的内容,当前工作目录是?

Linux系统的命令行终端,在启动的时侯。默认会加载:

  • 当前登录用户的HOME目录作为当前工作目录,所以ls命令列出的是HOME目录的内容
  • HOMW目录:每个Linux操作用户在Linux系统的个人账户目录,路径在:/home/用户名
    • 如吗,图中的Linux用户是itheima,其HOME目录是:/home/itheima
    • Windows系统和Linux系统均设有用户的HOME目录,如图

在我启动终端时,那么我的工作目录就是我的家目录。

[huan@localhost ~]$ ls
公共  模板  视频  图片  文档  下载  音乐  桌面

我现在在我的家目录里面进行工作,

HOME目录,我的理解就是用来存放用户家目录的目录,我们可以看一下,

[huan@localhost home]$ ls /home/
huan

现在可以看到在/home/目录下只有一个目录,也就是huan,我的家目录,

我可以添加一个用户,然后再看看这个目录会发生什么

[root@localhost ~]# adduser u1
[root@localhost ~]# ls /home/
huan  u1

adduser命令是添加用户的命令,我添加了一个用户u1,这时再看/home/目录,那么就有两个用户了,这里面存放了两个用户的家目录。

Linux是多用户操作系统,所以每个用户的家目录都给放在/home目录里面

Windows也有这种操作,Mac也有

ls命令的参数和选项

ls [-a -l -h] [Linux路径]

在这里吧ls命令的完整形式展示一下

ls命令的参数
  • ls不使用参数,表示列出:当前工作的内容,即用户的HOME目录
  • 当使用参数,ls命令的参数表示:指定一个Linux路径,列出指定理解的内容

我们重温一下ls命令,查看当前工作的内容,文件夹里面有什么。

不给参数,那就是当前工作的文件夹

[huan@localhost ~]$ ls
公共  模板  视频  图片  文档  下载  音乐  桌面

现在我的工作环境是我的家目录

如果给定参数

[huan@localhost root]$ ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

给定一个/参数,那就是看一下根目录文件夹里面有什么东西

/:根目录

还有我上面的一个ls命令

[root@localhost ~]# ls /home/
huan  u1

给定的参数是/home/那就是查看根目录下home文件夹里面都有哪些文件

ls命令的选项
  • -a:表示:all的意思,即列出全部文件(包含隐藏的文件/文件夹)
[huan@localhost ~]$ ls -a
.   .bash_history  .bash_profile  .cache   .dbus      .ICEauthority  .mozilla  模板  图片  下载  桌面
..  .bash_logout   .bashrc        .config  .esd_auth  .local         公共      视频  文档  音乐

对比ls

[huan@localhost ~]$ ls
公共  模板  视频  图片  文档  下载  音乐  桌面

展示的文件一下子就多了。

.开头的文件或者文件夹都是Linux系统隐藏的文件,自动隐藏,只能通过-a选择查看

  • -l:表示:以列表(竖向排列)的形式展示内容,并展示更多信息
[huan@localhost ~]$ ls -l
总用量 0
drwxr-xr-x. 2 huan huan 6 11月  4 02:41 公共
drwxr-xr-x. 2 huan huan 6 11月  4 02:41 模板
drwxr-xr-x. 2 huan huan 6 11月  4 02:41 视频
drwxr-xr-x. 2 huan huan 6 11月  4 02:41 图片
drwxr-xr-x. 2 huan huan 6 11月  4 02:41 文档
drwxr-xr-x. 2 huan huan 6 11月  4 02:41 下载
drwxr-xr-x. 2 huan huan 6 11月  4 02:41 音乐
drwxr-xr-x. 2 huan huan 6 11月  4 02:41 桌面

我学习过Linux,但是不深,这个展示的信息更多,有drwxr-xr-x权限、huan huan用户组和用户、6大小、11月 4 02:41创建日期等等。

以列标的形式展示

语法中的选项是可以组合使用的,比如学习的-a-l可以组合应用

  • ls -l -a
  • ls -la
  • ls -al
[huan@localhost ~]$ ls -al
总用量 36
drwx------. 15 huan huan 4096 11月  4 21:20 .
drwxr-xr-x.  4 root root   28 11月  4 20:02 ..
-rw-------.  1 huan huan  149 11月  4 21:21 .bash_history
-rw-r--r--.  1 huan huan   18 4月   1 2020 .bash_logout
-rw-r--r--.  1 huan huan  193 4月   1 2020 .bash_profile
-rw-r--r--.  1 huan huan  231 4月   1 2020 .bashrc
drwx------. 16 huan huan 4096 11月  5 2022 .cache
drwxr-xr-x. 14 huan huan 4096 11月  5 2022 .config
drwx------.  3 huan huan   25 11月  4 02:41 .dbus
-rw-------.  1 huan huan   16 11月  4 02:41 .esd_auth
-rw-------.  1 huan huan 1240 11月  4 21:20 .ICEauthority
drwx------.  3 huan huan   19 11月  4 02:41 .local
drwxr-xr-x.  4 huan huan   39 11月  4 02:28 .mozilla
drwxr-xr-x.  2 huan huan    6 11月  4 02:41 公共
drwxr-xr-x.  2 huan huan    6 11月  4 02:41 模板
drwxr-xr-x.  2 huan huan    6 11月  4 02:41 视频
drwxr-xr-x.  2 huan huan    6 11月  4 02:41 图片
drwxr-xr-x.  2 huan huan    6 11月  4 02:41 文档
drwxr-xr-x.  2 huan huan    6 11月  4 02:41 下载
drwxr-xr-x.  2 huan huan    6 11月  4 02:41 音乐
drwxr-xr-x.  2 huan huan    6 11月  4 02:41 桌面

展示其中一种用法,就是把他的选项功能全部加起来使用,展示所有文件包括隐藏文件,以列表形式展示

除了选项本身可以组合以外,选项和参数也可以一起使用

[huan@localhost ~]$ ls -al /
总用量 20
dr-xr-xr-x.  17 root root  224 11月  4 02:36 .
dr-xr-xr-x.  17 root root  224 11月  4 02:36 ..
lrwxrwxrwx.   1 root root    7 11月  4 02:28 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 11月  4 02:37 boot
drwxr-xr-x.  20 root root 3320 11月  4 21:10 dev
drwxr-xr-x. 139 root root 8192 11月  4 21:22 etc
drwxr-xr-x.   4 root root   28 11月  4 20:02 home
lrwxrwxrwx.   1 root root    7 11月  4 02:28 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 11月  4 02:28 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 4月  11 2018 media
drwxr-xr-x.   2 root root    6 4月  11 2018 mnt
drwxr-xr-x.   3 root root   16 11月  4 02:33 opt
dr-xr-xr-x. 220 root root    0 11月  4 21:10 proc
dr-xr-x---.   5 root root  205 11月  4 21:03 root
drwxr-xr-x.  42 root root 1300 11月  4 21:22 run
lrwxrwxrwx.   1 root root    8 11月  4 02:28 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 4月  11 2018 srv
dr-xr-xr-x.  13 root root    0 11月  4 21:10 sys
drwxrwxrwt.  21 root root 4096 11月  4 21:21 tmp
drwxr-xr-x.  13 root root  155 11月  4 02:28 usr
drwxr-xr-x.  20 root root  282 11月  4 02:38 var

根目录隐藏文件好像不多,但是起到了演示的效果

  • -h:表示以易于阅读的形式,列出文件大小,如k、m、g
  • -h选项必须要搭配-l一起使用
[huan@localhost ~]$ ls -l /
总用量 20
lrwxrwxrwx.   1 root root    7 11月  4 02:28 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 11月  4 02:37 boot
drwxr-xr-x.  20 root root 3320 11月  4 21:10 dev
drwxr-xr-x. 139 root root 8192 11月  4 21:22 etc
drwxr-xr-x.   4 root root   28 11月  4 20:02 home
lrwxrwxrwx.   1 root root    7 11月  4 02:28 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 11月  4 02:28 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 4月  11 2018 media
drwxr-xr-x.   2 root root    6 4月  11 2018 mnt
drwxr-xr-x.   3 root root   16 11月  4 02:33 opt
dr-xr-xr-x. 221 root root    0 11月  4 21:10 proc
dr-xr-x---.   5 root root  205 11月  4 21:03 root
drwxr-xr-x.  42 root root 1300 11月  4 21:22 run
lrwxrwxrwx.   1 root root    8 11月  4 02:28 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 4月  11 2018 srv
dr-xr-xr-x.  13 root root    0 11月  4 21:10 sys
drwxrwxrwt.  21 root root 4096 11月  4 21:21 tmp
drwxr-xr-x.  13 root root  155 11月  4 02:28 usr
drwxr-xr-x.  20 root root  282 11月  4 02:38 var

740963320表示文件的大小,因为没有加h 默认是KB单位

如果加个h

[huan@localhost ~]$ ls -lh /
总用量 20K
lrwxrwxrwx.   1 root root    7 11月  4 02:28 bin -> usr/bin
dr-xr-xr-x.   5 root root 4.0K 11月  4 02:37 boot
drwxr-xr-x.  20 root root 3.3K 11月  4 21:10 dev
drwxr-xr-x. 139 root root 8.0K 11月  4 21:22 etc
drwxr-xr-x.   4 root root   28 11月  4 20:02 home
lrwxrwxrwx.   1 root root    7 11月  4 02:28 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 11月  4 02:28 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 4月  11 2018 media
drwxr-xr-x.   2 root root    6 4月  11 2018 mnt
drwxr-xr-x.   3 root root   16 11月  4 02:33 opt
dr-xr-xr-x. 221 root root    0 11月  4 21:10 proc
dr-xr-x---.   5 root root  205 11月  4 21:03 root
drwxr-xr-x.  42 root root 1.3K 11月  4 21:22 run
lrwxrwxrwx.   1 root root    8 11月  4 02:28 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 4月  11 2018 srv
dr-xr-xr-x.  13 root root    0 11月  4 21:10 sys
drwxrwxrwt.  21 root root 4.0K 11月  4 21:21 tmp
drwxr-xr-x.  13 root root  155 11月  4 02:28 usr
drwxr-xr-x.  20 root root  282 11月  4 02:38 var

会发现上面的74096、3320变成了74.0k3.3k

现在因为是新系统,文件都不大,所以都是bk。没有看见b,我想是因为默认显示了7b,b隐藏了。

-lh提供三个单位KB、MB、GB

目录切换相关命令(cd/pwd

cd切换工作目录命令

我们可以通过cd命令,更改当前所在的工作目录

cd命令来自英文:Change Directory

语法:cd [Linux路径]

  • cd命令无需选项,只有参数,表示要切换到哪个目录下
  • cd命令直接执行,不写参数,表示回到用户的HOME目录

这个就类似于我们在Windows系统双击文件夹进入文件夹是一个道理,

打开终端,我们会在自己的家目录

[huan@localhost ~]$ ls
公共  模板  视频  图片  文档  下载  音乐  桌面

ls看一下我们家目录都有哪些文件夹,比如说我们打开桌面 这个文件夹

[huan@localhost ~]$ cd 桌面
[huan@localhost 桌面]$ ls
test1

切换到桌面目录,然后我们看一下桌面文件夹都有哪些文件夹,有个test1

我们切换到根目录

[huan@localhost 桌面]$ cd /
[huan@localhost /]$ ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[huan@localhost /]$ ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

/根目录,所以cd / 切换到了根目录,我们查看了一下文件内容,又用ls查看了一下根目录,会发现是一个内容

[huan@localhost /]$ cd
[huan@localhost ~]$ ls
公共  模板  视频  图片  文档  下载  音乐  桌面

cd不写路径,直接回到根目录。

pwd展示当前工作目录命令

通过ls来验证当前的工作目录,其实是不恰当的。

我们可以通过pwd命令,来查看当前所在的工作目录。

pwd命令来自:Print Work Directory

语法:pwd

  • pwd命令,无选项,无参数,直接输入pwd即可

如果一个文件夹里面的内容很多很多,那么用ls是很不方便的,

而pwd,就是类似于一个提示,告诉你你现在在哪里

[huan@localhost ~]$ pwd
/home/huan

我们在我的家目录

[huan@localhost ~]$ cd /bin
[huan@localhost bin]$ pwd
/bin

切换到根目录下的bin,再使用pwd命令

会发现我们在根目录下的bin文件夹下

练习

请使用cd命令并结合ls命令,任意在Liux文件系统内探索。

[huan@192 ~]$ cd /etc
[huan@192 etc]$ ls
abrt                        favicon.png    ksmtuned.conf             passwd-           setuptool.d
adjtime                     fcoe           ld.so.cache               pbm2ppa.conf      sgml
aliases                     festival       ld.so.conf                pinforc           shadow
aliases.db                  filesystems    ld.so.conf.d              pkcs11            shadow-
alsa                        firefox        libaudit.conf             pki           ...

查看根目录下etc文件夹里面有什么东西,要先进到里面,然后ls,文件太多了,省略

[huan@192 etc]$ cd /home/huan/下载
[huan@192 下载]$ ls
[huan@192 下载]$

这个里面空空如也

并尝试找出名字叫做games的文件夹在哪里。

相对路径、绝对路径和特殊路径

相对路径和绝对路径

[huan@localhost ~]$ ls
公共  模板  视频  图片  文档  下载  音乐  桌面

比如说,我想进入桌面这个文件夹,那我应该怎么做,有两种方法

第一种:cd /home/huan/桌面

第二种:cd 桌面

这两种方法都可以进入,但是一个长一个短,那如果我们为了省事都用短的,那还会有错误,这时就需要了解两个概念

  • 绝对路径:以根目录为起点,描述路径的一种写法,路径描述以/开头
  • 相对路径:以当前目录为起点,描述路径的一种写法,路径描述无需以/开头

以根目录为起点的是绝对路径,很明显第一种方法采用的是绝对路径进入目录

第二种方法采用的是相对路径,以当前目录。

~表示我在家目录,其实我也用ls查看了我的家目录有哪些内容。我当前所在的目录是我的家目录,所以是以家目录为起点,然后找到的桌面文件夹。

[huan@localhost ~]$ cd 桌面
[huan@localhost 桌面]$ pwd
/home/huan/桌面
[huan@localhost ~]$ cd /home/huan/桌面
[huan@localhost 桌面]$ pwd
/home/huan/桌面

可以看到无论哪种方式进入目录都是可以的

但是要注意相对路径的使用,必须是当前目录下有你要进入的目录,如果没有,那就是进不去,

[huan@localhost 桌面]$ ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[huan@localhost 桌面]$ cd bin
-bash: cd: bin: 没有那个文件或目录

Linux目录下有个bin文件,那我直接cd进入是不行的,因为我的前目录下没有bin文件

只能cd /bin

特殊路径符

  • . :表示当前目录,比如:cd ./DesKtop表示切换到当前目录下的DesKtop目录下,和cd DesKtop效果一致
  • .. :表示上一级目录,比如:cd .. 即可切换到上一级目录,cd ../..切换到上二级的目录
  • ~:表示HOME目录,比如:cd ~ 即可切换到HOME目录或cd ~/DesKtop ,切换到HOME内的DesKtop目录。
[huan@localhost bin]$ cd ~
[huan@localhost ~]$ pwd
/home/huan

[huan@localhost bin]$ 中可以看出来我现在在bin目录下,如果我要回到家目录,一开始我们用的是这种方法cd /home/huan ,现在只需要一个cd ~ 即可。

这个cd ~也等同于cd

[huan@localhost /]$ cd
[huan@localhost ~]$ pwd
/home/huan

一样的。

知道了~这个是家目录,那么就可以借助~实现更多操作

[huan@localhost /]$ cd ~/桌面
[huan@localhost 桌面]$

进入家目录下的桌面目录。 一开始我们是cd /home/huan/桌面

[huan@localhost test1]$ pwd
/home/huan/桌面/test1
[huan@localhost test1]$ cd ..
[huan@localhost 桌面]$ pwd
/home/huan/桌面

cd ..回到上一级目录,我先用pwd看了一下我的位置,是在我的家目录下的桌面文件夹下的test1文件夹

那么test1上一级目录就是桌面

通过cd ..这个命令衍生除了几个命令:

cd ../..返回二级目录

[huan@localhost test1]$ cd ../..
[huan@localhost ~]$ pwd
/home/huan

cd ../../..返回三级命令

[huan@localhost test1]$ cd ../../..
[huan@localhost home]$ pwd
/home

以上条件目录路径都是以/home/huan/桌面/test1为基准,返回二级目录就是家目录/home/huan

返回三级目录就是/home

[huan@localhost ~]$ cd ./下载
[huan@localhost 下载]$ pwd
/home/huan/下载

[huan@localhost ~]$ cd 下载
[huan@localhost 下载]$ pwd
/home/huan/下载

.当前目录,可以看出来cd ./下载cd 下载没有什么区别

练习

当前工作目录内有一个test文件夹,文件夹内有一个文件hello.txt,请描述文件的相对路径

test/hello.txt

在当前工作目录的上级目录有一个test文件夹,文件夹内有一个文件hello.txt,请描述文件的相对
路径

../test/hello.txt

在HOME目录内有一个test文件夹,文件夹内有一个文件hello.txt,请描述文件的路径,需要使用
符号~

~/test/hello

创建目录命令(mkdir

mkdir命令

通过mkdir命令可以创建新的目录(文件夹)

mkdir来自英文:Make Directory

语法:mkdir [-p] Linux路径

  • 参数必填,表示Linux路径,即要创建的文件夹的路径,相对路径或绝对路径均可
  • -p选项可选,表示自动创建不存在的父目录,适用于创建连续多层级的目录
[huan@localhost ~]$ mkdir 桌面/test1
[huan@localhost ~]$ ls 桌面
test1

在桌面创建一个test1文件夹,采用相对路径

[huan@localhost ~]$ mkdir /home/huan/桌面/test2
[huan@localhost ~]$ ls 桌面
test1  test2

还是在桌面创建文件夹,采用绝对路径

[huan@localhost /]$ mkdir ~/桌面/test3
[huan@localhost /]$ ls ~/桌面
test1  test2  test3

这里用到了特殊路径符。

mkdir -p 选项

在这里有个小技巧,CTRL+L清屏。

如果要一次性创建多个层级目录,就要使用到-p选项

我们先看个反例,不带p

[huan@localhost 桌面]$ mkdir test4/test4_1/test4_2
mkdir: 无法创建目录"test4/test4_1/test4_2": 没有那个文件或目录

我们的最终目的是要创建test4_2文件夹,但是出现了错误,原因是没有test4和test4_1文件夹

这时就要用-p,连续创建文件夹

[huan@localhost 桌面]$ mkdir -p test4/test4_1/test4_2
[huan@localhost 桌面]$ cd test4/test4_1/test4_2
[huan@localhost test4_2]$ pwd
/home/huan/桌面/test4/test4_1/test4_2

可以看到已经创建完成。pws后的路径/home/huan/桌面/test4/test4_1/test4_2

注意:创建文件夹需要修改权限,请确保操作均在HOME目录内,不要在HOME外操作

涉及到权限问题,HOME外无法成功

[huan@localhost /]$ mkdir test1
mkdir: 无法创建目录"test1": 权限不够

没有权限,失败了

练习

请通过命令在HOME目录内,创建如下路径(需使用特殊符号):itcast/itheima./nice/666

mkdir -p ~/桌面/itcast/itheima./nice/666

文件操作命令part1(touchcatmore

touch创建文件

可以通过touch命令创建文件

语法:touch Linux路径

  • touch命令无选项,参数必填,表示要创建的文件路径,相对、绝对、特殊路径符均可以使用
[huan@localhost 桌面]$ touch test.txt
[huan@localhost 桌面]$ ls
test1  test.txt

touch命令就是用来创建文件的,touch 文件名就可以创建了,可以用ls看一下这个文件有没有创建成功

怎么区分文件夹和文件,markdown好像没有Linux代码的高亮,可能在这个上看不清,深色代表文件夹,浅色就是文件

还可以通过ll这个命令查看

[huan@localhost 桌面]$ ll
总用量 0
drwxrwxr-x. 2 huan huan 6 11月  7 14:33 test1
-rw-rw-r--. 1 huan huan 0 11月  9 13:36 test.txt

先说一下ll这个命令,ll等价于ls - l

至于这个命令,上面已经解释过了。

我们重点关注前面的内容,有个d-

drwxrwxr-x-rw-rw-r--

前面的第一个字符,就可以看出来这个什么类型文件

  • d:Directory、目录,文件夹
  • -:文件

由于-rw-rw-r--有好几个-,不要惊慌,就看第一个字母,-,文件

创建好了这个文件,我们该如何编辑呢,可以通过vi进行编辑,这是在命令行下完成的,目前我不熟悉,我们可以使用Cent‘OS的图形化进行编辑。就和Windows下如何写word文档一样。找到文件,双击,最后记得保存

cat命令 查看文件内容

准备好文件内容后,可以通过cat查看内容

语法:cat Linux路径

  • cat同样没有选择,只有必参数,参数表示:被查看的文件路径,相对、绝对、特殊路径符都可以使用
[huan@localhost 桌面]$ cat test.txt
hello world
a like linux

这就是一个查看文件内容的命令,看看这个文件里面有啥

more命令查看文件内容

more命令同样可以查看文件内容,同cat不同的是:

  • cat是直接将内容全部显示出来
  • more支持翻页,如果文件内容过多,可以一页页的展示

语法:more Linux路径

  • 同样没有选择,只有必参数,参数表示:被查看的文件路径,相对、绝对、特殊路径符都可以使用

我们查看一个Linux系统内置文件,路径为 /etc/services

如果用cat查看

[huan@localhost 桌面]$ cat /etc/services
opennl-voice    1259/udp                # Open Network Library Voice
ibm-ssd         1260/tcp                # ibm-ssd
ibm-ssd         1260/udp                # ibm-ssd
mpshrsv         1261/tcp                # mpshrsv
...

内容会全部展示出来,因为内容太多,我用省略号代替了

用more查看

  • 在查看过程中,通过空格翻页
  • 通过q退出
[huan@localhost 桌面]$ more /etc/services   
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2013-04-10
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1700, ``Assigned Numbers'' (October 1994).  Not all ports
# are included, only the more common ones.
#
# The latest IANA port assignments can be gotten from
#       http://www.iana.org/assignments/port-numbers
# The Well Known Ports are those from 0 through 1023.
# The Registered Ports are those from 1024 through 49151
# The Dynamic and/or Private Ports are those from 49152 through 65535
#
# Each line describes one service, and is of the form:
#
# service-name  port/protocol  [aliases ...]   [# comment]

tcpmux          1/tcp                           # TCP port service multiplexer
tcpmux          1/udp                           # TCP port service multiplexer
rje             5/tcp                           # Remote Job Entry
rje             5/udp                           # Remote Job Entry
echo            7/tcp
--More--(0%)

这个和阅读电子书一样,--More--(0%)显示阅读进度。按下q退出

文件操作命令part1(cpmvrm

cp命令复制文件文件夹

cp命令可以用于复制文件\文件夹,cp命令来自英文单词copy

语法:cp [-r] 参数1 参数2

  • -r选项,可选,用于复制文件夹使用,表示递归
  • 参数1,Linux路径,表示被复制的文件或文件夹
  • 参数2,Linux,表示要复制去的地方
[huan@localhost 桌面]$ cp test.txt test1.txt
[huan@localhost 桌面]$ ls
test1  test1.txt  test.txt
[huan@localhost 桌面]$ cat test1.txt
hello world
a like linux
[huan@localhost 桌面]$ cat test.txt
hello world
a like linux

我们写过一个文件,test.txt,我们就复制这个文件,上面就是代码

因为文件在桌面,我要复制到桌面,同时我也在桌面,所以就可以用相对路径。

我们复制一个文件夹

[huan@localhost 桌面]$ ls
test1  test1.txt  test.txt
[huan@localhost 桌面]$ cp test1 test2
cp: 略过目录"test1"
[huan@localhost 桌面]$ cp -r test1 test2

如果复制文件夹,不带上-r选项,会出现提示,

-r,递归,应该是复制这个文件夹里面全部内容

[huan@localhost 桌面]$ cp -r test1/t1 /home/huan/
[huan@localhost 桌面]$ ls /home/huan/
t1  公共  模板  视频  图片  文档  下载  音乐  桌面

这是用来绝对路径和相对路径

吧test1下的文件夹复制到我的家目录。

mv移动文件或文件夹

mv命令可以用于移动文件\文件夹,mv命令来自英文单词:move

语法:mv 参数1 参数2

  • 参数1:Linux路径,表示被移到的文件或文件夹
  • 参数2:Linux路径,表示要移动去的地方,如果目标不存在,则进行改名,确保目标存在

这个就是对文件或者文件夹的移动

[huan@localhost 桌面]$ mv test1.txt /home/huan/
[huan@localhost 桌面]$ ls /home/huan/
t1  test1.txt  公共  模板  视频  图片  文档  下载  音乐  桌面

移动文件到我的家目录下。因为我和我的文件都在桌面,所以就用了相对路径,

[huan@localhost 桌面]$ mv test1 /home/huan/
[huan@localhost 桌面]$ ls /home/huan/
t1  test1  test1.txt  公共  模板  视频  图片  文档  下载  音乐  桌面

移动文件夹。

[huan@localhost 桌面]$ mv test.txt t.txt
[huan@localhost 桌面]$ ls
test2  t.txt

对文件或者文件夹改名,因为t.txt不存在,所以改名。

[huan@localhost 桌面]$ mv t100.txt /home/huan/test200.txt
[huan@localhost 桌面]$ ls /home/huan/
t1  test1  test100  test1.txt  test200.txt  公共  模板  视频  图片  文档  下载  音乐  桌面

移动t100.txt文件到家目录并改名为test200.txt

mv命令虽然没有选项,但是还是有几种用法。

rm删除文件、文件夹

rm命令可用于删除文件、文件夹

rm命令来自英文单词:remove

语法:rm [-r -f] 参数1 参数2 … 参数N

  • 同cp一样,-r选项用于删除文件夹
  • -f表示force,强制删除(不会弹出提示确认信息)
    • 普通用户删除内容不会弹出提示,只有root管理员用户删除内容会有提示
    • 所以一般用户用不到-f选项
  • 参数1、参数2、……、参数N表示要删除的文件或文件夹路径,安照空格隔开

一个删除文件或者文件夹的命令

[huan@localhost ~]$ ls
t1  test1  test100  test1.txt  test2  test200.txt  公共  模板  视频  图片  文档  下载  音乐  桌面

我们展示一下家目录下面都有什么,然后删除这些内容

[huan@localhost ~]$ rm test1.txt
[huan@localhost ~]$ ls
t1  test1  test100  test2  test200.txt  公共  模板  视频  图片  文档  下载  音乐  桌面

这是一个最简单的文件删除命令,删除test1.txt文件。

[huan@localhost ~]$ rm t1
rm: 无法删除"t1": 是一个目录
[huan@localhost ~]$ rm -r t1
[huan@localhost ~]$ ls
test1  test100  test2  test200.txt  公共  模板  视频  图片  文档  下载  音乐  桌面

删除t1文件夹,因为这时文件夹,就要加上-r命令,否则会提示错误,和cp文件夹复制很相似

[huan@localhost ~]$ ls
t10.txt  t20.txt  t30.txt  test1  公共  模板  视频  图片  文档  下载  音乐  桌面
[huan@localhost ~]$ rm t10.txt t20.txt t30.txt
[huan@localhost ~]$ ls
test1  公共  模板  视频  图片  文档  下载  音乐  桌面

删除多个文件,如果是多个文件夹需要前面带上-r

rm删除文件、文件夹 - 通配符

rm命令支持通配符*,用来做模糊匹配

符号*表示通配符,即匹配任意内容(包含空),示例:

  • test*:表示匹配任何以test开头的内容
  • *test:表示匹配任何以test结尾的内容
  • *test*:表示匹配任何包含test的内容
[huan@localhost 桌面]$ ls
1test1.txt  1test.txt  2test2.txt  2test.txt  3test  3test3  test1.txt  test2.txt  test3

我们展示一下桌面上的内容,有文件,也有文件夹

[huan@localhost 桌面]$ rm -r test*
[huan@localhost 桌面]$ ls
1test1.txt  1test.txt  2test2.txt  2test.txt  3test  3test3

删除test开头的内容

我们来解释一下-f,强制删除。

Linux有一个超级管理员用户,也就是root用户。

怎么进入root用户呢。su -,退出exit

[huan@localhost 桌面]$ su -
密码:
上一次登录:一 11月  7 14:28:09 CST 2022:1 上
[root@localhost ~]#

在开始安装Linux的时候,也会让你设置一个root密码,这时就要用到这个密码。

进入root,很明显有一个变化,就是[huan@localhost 桌面]$ 变成了[root@localhost ~] 标识符发生了变化。

[root@localhost ~]# exit
登出
[huan@localhost 桌面]$

exit退出root用户

我们演示删除文件

[root@localhost ~]# touch test.txt
[root@localhost ~]# rm test.txt
rm:是否删除普通空文件 "test.txt"?y

在我删除文件的时候会有一行提示,rm:是否删除普通空文件 "test.txt"?要不要删除,输入y或者n。这个设置有什么用呢,因为root用户由最高权限,防止误操作。

怎么没有这个提示呢?

[root@localhost ~]# rm -f test.txt
[root@localhost ~]#

加上-f,强制删除

过多的root介绍我现在也不明白,所以我只是看一下,然后推出了。

注意!!!

rm是一个危险的命令,特别是处于root(超级管理员)用户的时候。

情谨慎使用

如下命令,请千万千万不要在root管理员用户下执行

rm -rf /

rm -rf /*

效果等同于在Windows上执行C盘格式化

虽然我没试过,但是对C盘格式化是什么概念我想大家应该明白,电脑没法用了,要重装系统,但是数据没了。

grep、wc和管道符

grep命令过滤文件

可以通过grep命令,从文件中通过关键字过滤文件行

语法:`grep [-n] 关键字 文件路径

  • 选项-n,可选,表示在结果中显示匹配的行的行号
  • 参数,关键字,必填,表示过滤的关键字,带有空格或其他特殊符号,建议使用""将关键字包围起来
  • 参数,文件路径,必填,表示要过滤的内容的文件路径,可作为内容输入端口

首先我创建了一个文件

[huan@192 桌面]$ cat test.txt
I am studying Linux.
Linux has a lot of orders to learn.
I like to use Linux

这个命令的初步理解类似CTRL+F,查找功能

[huan@192 桌面]$ grep "like" test.txt
I like to use Linux

我要找含有的行,那么输入like,就有输出,其中like标红了

[huan@192 桌面]$ grep "Linux" test.txt
I am studying Linux.
Linux has a lot of orders to learn.
I like to use Linux

这是找Linux,因为三行都有Linux,所以都输出了

[huan@192 桌面]$ grep -n "lot" test.txt
2:Linux has a lot of orders to learn.

-n,出现是包含关键字的行号,我找lot,可以看出来lot在第二行

这个命令就像是查找,

wc命令统计内容数量

可以通过wc命令统计文件的行数、单词数量等

语法:wd [-c -m -l -w] 文件路径

  • 选项,-c,统计bytes数量
  • 选项,-m,统计字符数量
  • 选项,-l,统计行数
  • 选项,-w,统计单词数量
  • 参数,文件路径,被统计的文件,可作为内容输入端口

统计文件的相关信息

[huan@192 桌面]$ wc test.txt
 3 17 77 test.txt

如果不输入参数,那么会输出全部统计的数值,文件有3行,17个单词,77个字节,以及文件名

[huan@192 桌面]$ ll
总用量 4
-rw-rw-r--. 1 huan huan 77 11月 12 11:13 test.txt

也可以以这种方式查看文件字节数,77

[huan@192 桌面]$ wc -c test.txt
77 test.txt
[huan@192 桌面]$ wc -m test.txt
77 test.txt
[huan@192 桌面]$ wc -l test.txt
3 test.txt
[huan@192 桌面]$ wc -w test.txt
17 test.txt

分别统计字节数、字符数、行数、单词数,单词以空格结尾

|管道符的概念和应用

学习了grep命令后,我们在来学习一个新的特殊符号,管道符:|

管道符的含义是:将管道符左边命令的结果,作为右边命令的输出

[huan@192 桌面]$ cat test.txt | grep -n am
1:I am studying Linux.

左边命令的结果,作为右边命令的输出,这句话在我一开始学习的时候有点绕口

这里我想到了一个例子,python中可以定义函数,比如我现在定义了两个函数a、b,那我可以把函数a返回的参数给函数b,b(a)

这里也是,把cat返回来的结果给 grep,grep是可以可作为内容输入端口。

grep -n am ,可以看出来参数被我省略了,那就是管道符内容的

[huan@192 桌面]$ cat test.txt | grep am | wc -w
4

也可以多个管道符一起用

浅浅分析一下。

[huan@192 桌面]$ cat test.txt
I am studying Linux.
Linux has a lot of orders to learn.
I like to use Linux

这时cat输出的内容,这段内容就可以通过管道符传递给grep

[huan@192 桌面]$ cat test.txt | grep am
I am studying Linux.
[huan@192 桌面]$ grep am test.txt
I am studying Linux.

可以看出grep和管道符数出来的命令一样

现在I am studying Linux.这段被输出来了,但是还有一个管道符,所以把这段话给wc,

[huan@192 桌面]$ cat test.txt | grep am | wc -w
4

cat的结果作为grep的输入,然后又grep的结果又给了wc

即I am studying Linux.一共有4个单词。

可作为内容输入端口,只要有命令内容输出,那就可以通过管道符传入

[huan@192 桌面]$ ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[huan@192 桌面]$ ls / | grep lib
lib
lib64

我先看了一下根目录又那些文件夹,然后我又找了一下含有bin关键字的文件夹

[huan@192 桌面]$ ls / | wc -w
19

根目录下一共有19个文件夹

[huan@192 桌面]$ ls -l /usr/bin/ | wc -l
1673

/usr/bin下面一共又11673个文件。ls -l按行输出,wc -l对行进行统计

查找命令(which、find)

使用which命令查找命令的程序文件

我们在前面学习的Linux命令其实他们的本体就是一个个的二进制可执行程序

和Windows系统中的.exe文件,是一个意思

我们可以通过which命令,查看所使用的一系列命令的程序文件存放在哪里

语法:which 要查找的命令

原来我们用到的命令都是一个个可执行的程序,类似Windows里的.exe文件

但是这些命令都放在哪里呢

[huan@192 桌面]$ which ls
alias ls='ls --color=auto'
        /usr/bin/ls
[huan@192 桌面]$ which cd
/usr/bin/cd
[huan@192 桌面]$ which cp
/usr/bin/cp

我们用到的命令基本上都在/usr/bin文件夹下

使用find命令查找指定文件

按文件名查找

在图形化中,我们可以方便的通过系统提供的搜索功能,搜索指定的文件。

同样,在Linux系统中,我们可以通过find命令去搜索指定的文件。

语法:`find 起始位置 -name “被查找文件名”

Linux中有些文件夹是不允许普通用户打开的,为了可以最大可能的搜索,我们使用管理员用户搜索

[root@192 ~]# find / -name test
find: ‘/run/user/1000/gvfs’: 权限不够
/root/.local/share/Trash/files/test
/usr/bin/test
/usr/lib/modules/3.10.0-1160.el7.x86_64/kernel/drivers/ntb/test
/usr/lib/alsa/init/test
/usr/lib64/python2.7/test
/usr/lib64/python2.7/unittest/test
/usr/share/espeak-data/voices/test
/home/huan/桌面/test

我们分析这条命令

[root@192 ~]# find / -name test

/是根目录,那就是全盘搜索,-name,按文件名test进行搜索

这里有个bug,find: ‘/run/user/1000/gvfs’: 权限不够\

我用的就是root用户,为什么还会权限不够。

经过百度是因为FUSE文件系统和权限不配引起的

[root@192 ~]# umount /run/user/1000/gvfs
[root@192 ~]# rm -rf /run/user/1000/gvfs

解决方法是卸载一个软件和删除一个文件夹,通过搜索得到的

[root@192 ~]# find / -name test
/root/.local/share/Trash/files/test
/usr/bin/test
/usr/lib/modules/3.10.0-1160.el7.x86_64/kernel/drivers/ntb/test
/usr/lib/alsa/init/test
/usr/lib64/python2.7/test
/usr/lib64/python2.7/unittest/test
/usr/share/espeak-data/voices/test
/home/huan/桌面/test

现在可以看到一共有8个人test文件了,也没有权限不够的提示了

find命令-通配符

在学习删除命令的时候提到了一个通配符的概念*,用来做模糊匹配,那么这个里面就可以用

[root@192 ~]# find / -name *test*

我全盘搜索含有test的文件,有以下的输出

...
/usr/share/cups/templates/es/test-page.tmpl
/usr/share/cups/templates/fr/test-page.tmpl
/usr/share/cups/templates/ja/test-page.tmpl
/usr/share/cups/templates/ru/test-page.tmpl
/usr/share/cups/www/help/man-cupstestdsc.html
/usr/share/cups/www/help/man-cupstestppd.html
/usr/include/X11/extensions/xtestconst.h
/usr/include/X11/extensions/xtestext1const.h
/usr/include/X11/extensions/xtestext1proto.h
...

文件太多了。

我突然想到了管道符,我倒要看看有多少文件

[root@192 ~]# find / -name *test* | wc -l
find: ‘/run/user/1000/gvfs’: 权限不够
439

一共有429个文件

find命令-按文件大小查找文件

语法:find 起始位置 -size +|-n[kMG]

  • +,-表示大于等于
  • n表示大小数字
  • kMG表示大小单位,k(小写字母)表示kb,M表示MB,G表示GB

查找小于10KB的文件

[root@192 ~]# find / -size -10k

-对应小于,小于10k的文件,全盘搜索

你可能会发现文件有很多结果

...
/run/media/huan/CentOS 7 x86_64/EFI
/run/media/huan/CentOS 7 x86_64/EFI/BOOT
/run/media/huan/CentOS 7 x86_64/EFI/BOOT/fonts
/run/media/huan/CentOS 7 x86_64/EFI/BOOT/fonts/TRANS.TBL
/run/media/huan/CentOS 7 x86_64/EFI/BOOT/grub.cfg
/run/media/huan/CentOS 7 x86_64/EFI/BOOT/TRANS.TBL
/run/media/huan/CentOS 7 x86_64/EFI/TRANS.TBL
/run/media/huan/CentOS 7 x86_64/EULA
/run/media/huan/CentOS 7 x86_64/images
/run/media/huan/CentOS 7 x86_64/images/pxeboot
...

文件太多了,我们可以CTRL+C结束。强制中断

验证一下是不是小于10k

[root@192 ~]# ls -lh /run/user/1000/keyring/ssh
srwxr-xr-x. 1 huan huan 0 11月 12 11:02 /run/user/1000/keyring/ssh

我们查看一下/run/user/1000/keyring/ssh这个文件到底是不是小于10k,ls -lh,这个文件大小是0

课后练习

请使用find命令找出:名称中带有centos的文件

[root@192 ~]# find / -name centos
/boot/efi/EFI/centos
/dev/centos
/run/lvm/vgs_online/centos
/etc/lvm/backup/centos

按名字搜索,-name

请使用find命令找出:/usr目录内大于100M的文件

[root@192 ~]# find /usr/ -size +100M
/usr/lib/locale/locale-archive
/usr/lib64/firefox/libxul.so

我们可以验证一下

[root@192 ~]# ls -lh /usr/lib/locale/locale-archive
-rw-r--r--. 1 root root 102M 11月  4 02:29 /usr/lib/locale/locale-archive

echo、tail和重定向

使用echo命令输出内容

可以使用echo命令在命令行输出指定内容

语法:echo 输出的内容

  • 无需选项,只有一个参数,表示要输出的内容,复杂内容可以用“”包围
[huan@192 ~]$ echo hello linux
hello linux

类似编程语言的print语句,打印内容,

[huan@192 ~]$ echo "hello linux"
hello linux

用双引号包围,这样看起来会舒服一点,不然会很容易当成参数

反引号`的使用

我们可以通过命令用反引号(通常也称之为飘号)`将其包围

被`包围的内容,会被作为命令执行,而非普通字符

[huan@192 ~]$ echo pwd
pwd

我们用echo输出pwd,那就是真的输出pwd,但我的意思是输出当前路径

那这时就需要`

[huan@192 ~]$ echo `pwd`
/home/huan

我的当前工作路径

重定向符号的使用

我们再来学习两个特殊符号,重定向符:>和>>

  • > ,将左侧命令的结果,覆盖写入到符号右侧指定的文件中
  • >> ,将左侧命令的结果,追加写入到符号右侧指定的文件中

这两个符号的意思像是往文件里面写东西,就行python的open函数一样。

我们先展示一下用来写入的文件

[huan@192 桌面]$ cat test.txt
I am studying Linux.
Linux has a lot of orders to learn.
I like to use Linux

现在往里面写入内容

[huan@192 桌面]$ echo "hello linux" >> test.txt
[huan@192 桌面]$ cat test.txt
I am studying Linux.
Linux has a lot of orders to learn.
I like to use Linux
hello linux

执行echo命令,将命令的结果写入test.txt文件

然后查看文件,在最后一行显示出来了,证明已经写入

将命令的结果写文件,那我还可以换其他的命令,

[huan@192 桌面]$ ls -l ~ >> test.txt
[huan@192 桌面]$ cat test.txt
I am studying Linux.
Linux has a lot of orders to learn.
I like to use Linux
hello linux
总用量 0
drwxrwxr-x. 4 huan huan 26 11月  9 15:00 test1
drwxr-xr-x. 2 huan huan  6 11月  4 02:41 公共
drwxr-xr-x. 2 huan huan  6 11月  4 02:41 模板
drwxr-xr-x. 2 huan huan  6 11月  4 02:41 视频
drwxr-xr-x. 2 huan huan 53 11月  9 13:32 图片
drwxr-xr-x. 2 huan huan  6 11月  4 02:41 文档
drwxr-xr-x. 2 huan huan  6 11月  4 02:41 下载
drwxr-xr-x. 2 huan huan  6 11月  4 02:41 音乐
drwxr-xr-x. 5 huan huan 60 11月 12 13:46 桌面

我把ls命令执行的结果写入了文件。

注意两个>>表示追加,写到文件后面

我们演示一下覆盖

[huan@192 桌面]$ echo "hello world" > test.txt
[huan@192 桌面]$ cat test.txt
hello world

覆盖,之前的内容全没了

tail命令跟踪文件更改

使用tail命令,可以查看文件尾部内容,跟踪文件的最新更改,语法如下

tail [-f -num] Linux路径

  • 参数,Linux路径,表示被跟踪的文件路径
  • 选项,-f,表示持续跟踪
  • 选项,-num,表示,查看尾部多少行,不填默认10行

这个命令是对文件就行操作的,所以我先创建一个文件

[huan@192 桌面]$ cat test.txt
总用量 0
drwxrwxr-x. 4 huan huan 26 11月  9 15:00 test1
drwxr-xr-x. 2 huan huan  6 11月  4 02:41 公共
drwxr-xr-x. 2 huan huan  6 11月  4 02:41 模板
drwxr-xr-x. 2 huan huan  6 11月  4 02:41 视频
drwxr-xr-x. 2 huan huan 53 11月  9 13:32 图片
drwxr-xr-x. 2 huan huan  6 11月  4 02:41 文档
drwxr-xr-x. 2 huan huan  6 11月  4 02:41 下载
drwxr-xr-x. 2 huan huan  6 11月  4 02:41 音乐
drwxr-xr-x. 5 huan huan 60 11月 12 13:46 桌面
总用量 24
lrwxrwxrwx.   1 root root    7 11月  4 02:28 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 11月  4 02:37 boot
drwxr-xr-x.  20 root root 3320 11月 12 11:02 dev
drwxr-xr-x. 139 root root 8192 11月 12 11:03 etc
drwxr-xr-x.   4 root root   28 11月  7 14:30 home
lrwxrwxrwx.   1 root root    7 11月  4 02:28 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 11月  4 02:28 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 4月  11 2018 media
drwxr-xr-x.   3 root root   18 11月  5 17:49 mnt
drwxr-xr-x.   4 root root   87 11月  5 17:44 opt
dr-xr-xr-x. 218 root root    0 11月 12 11:01 proc
dr-xr-x---.  15 root root 4096 11月 12 13:59 root
drwxr-xr-x.  42 root root 1320 11月 12 11:03 run
lrwxrwxrwx.   1 root root    8 11月  4 02:28 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 4月  11 2018 srv
dr-xr-xr-x.  13 root root    0 11月 12 11:02 sys
drwxrwxrwt.  33 root root 4096 11月 12 16:25 tmp
drwxr-xr-x.  13 root root  155 11月  4 02:28 usr
drwxr-xr-x.  20 root root  282 11月  4 02:38 var

这是我的一个文件内容

[huan@192 桌面]$ wc -l test.txt
30 test.txt

统计一个下,一共有30行!学以致用

[huan@192 桌面]$ tail test.txt
drwxr-xr-x.   4 root root   87 11月  5 17:44 opt
dr-xr-xr-x. 218 root root    0 11月 12 11:01 proc
dr-xr-x---.  15 root root 4096 11月 12 13:59 root
drwxr-xr-x.  42 root root 1320 11月 12 11:03 run
lrwxrwxrwx.   1 root root    8 11月  4 02:28 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 4月  11 2018 srv
dr-xr-xr-x.  13 root root    0 11月 12 11:02 sys
drwxrwxrwt.  33 root root 4096 11月 12 16:25 tmp
drwxr-xr-x.  13 root root  155 11月  4 02:28 usr
drwxr-xr-x.  20 root root  282 11月  4 02:38 var

在我什么选项都没写的时候,默认显示这个文件的最后五行

[huan@192 桌面]$ tail -3 test.txt
drwxrwxrwt.  33 root root 4096 11月 12 16:25 tmp
drwxr-xr-x.  13 root root  155 11月  4 02:28 usr
drwxr-xr-x.  20 root root  282 11月  4 02:38 var

加上-num的参数,注意这个参数是一个具体的数值,-3,显示最后三行数据

接下来看f这个参数

这个参数是跟踪的意思,实时跟踪这个文件。

[huan@192 桌面]$ tail -3f test.txt
drwxrwxrwt.  33 root root 4096 11月 12 16:25 tmp
drwxr-xr-x.  13 root root  155 11月  4 02:28 usr
drwxr-xr-x.  20 root root  282 11月  4 02:38 var

我让他显示后三行内容后,这个命令还在执行,这时就需要再打开一个终端,往这个文件里面写东西,同时之前打开的终端还会继续显示

我在另一个终端中执行

[huan@192 ~]$ echo "i like linux" >> 桌面/test.txt

然后再看之前打开的终端,会发现刚刚写的语句显示了出来

[huan@192 桌面]$ tail test.txt
drwxr-xr-x.   4 root root   87 11月  5 17:44 opt
dr-xr-xr-x. 218 root root    0 11月 12 11:01 proc
dr-xr-x---.  15 root root 4096 11月 12 13:59 root
drwxr-xr-x.  42 root root 1320 11月 12 11:03 run
lrwxrwxrwx.   1 root root    8 11月  4 02:28 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 4月  11 2018 srv
dr-xr-xr-x.  13 root root    0 11月 12 11:02 sys
drwxrwxrwt.  33 root root 4096 11月 12 16:25 tmp
drwxr-xr-x.  13 root root  155 11月  4 02:28 usr
drwxr-xr-x.  20 root root  282 11月  4 02:38 var
[huan@192 桌面]$ tail -3 test.txt
drwxrwxrwt.  33 root root 4096 11月 12 16:25 tmp
drwxr-xr-x.  13 root root  155 11月  4 02:28 usr
drwxr-xr-x.  20 root root  282 11月  4 02:38 var
[huan@192 桌面]$ tail -3f test.txt
drwxrwxrwt.  33 root root 4096 11月 12 16:25 tmp
drwxr-xr-x.  13 root root  155 11月  4 02:28 usr
drwxr-xr-x.  20 root root  282 11月  4 02:38 var
i like linux

如果我们要终止命令,CTRL+C

课后练习

请使用cho并配合反引号,输出内容:我当前的工作目录是:具体的工作目录路

[huan@192 ~]$ echo "我的工作目录是:`pwd`"
我的工作目录是:/home/huan

这里还是在考察飘号的使用,被飘号包围的内容可以当成命令使用,pwd也必须是命令才可以

并结合重定向符,将输出结果覆盖写入Work.txt文件

[huan@192 ~]$ echo "我的工作目录是:`pwd`" > work.txt
[huan@192 ~]$ cat work.txt
我的工作目录是:/home/huan

一个>表示覆盖

请使用echo输出任意内容并追加到work.txt文件中

[huan@192 ~]$ echo "啦啦啦" >> work.txt
[huan@192 ~]$ cat work.txt
我的工作目录是:/home/huan
啦啦啦

两个>> 追加

通过tail命令持续跟踪文件内容更改

[huan@192 ~]$ echo "i like linux" >> work.txt

追加-f,结束命令CTRL+F

vim编辑器

vi\vim编辑器介绍

vi\vim是visual interface的简称,是Linux中最经典的文本编辑器

同图形化界面中的文本编辑器一样,vi是命令行下对文本文件进行编辑的绝佳选择。

vim是vi的加强版本,兼容vi的所有指令,不仅能编辑文章,而且还具有shell程序编辑功能,可以不同颜色的字体来辨别语法的正确性,极大方便了程序的设计与编辑性

在我没有学习Linux之前就听说过vim,有大佬说有很多大厂面试的时候会让你用vim写代码

Windows有文本编辑器记事本,那么Linux的文本编辑器就是vi\vim

vim好用是真的好用,难用也是真的难用,我现在体会不到哪里好用。但是也不难用,需要记住命令。不然寸步难行。

vim是vi的加强版本,所以现在经常使用vim

vi\vim编辑器的三种工作模式

  • 命令模式(Command mode)

    命令模式下,所敲的按键编辑器都理解为命令,以命令驱动执行不同的功能

    此模式下,不能自由进行文本编辑。

  • 输入模式(Insert mode)

    也就是所谓的编辑模式、插入模式

    此模式下,可以对文件内容进行自由编辑

  • 底线命令模式(Last line mode)

    以: 开始,通常用于文件的保存,退出。

这是vi\vim的三种模式

之前不知道什么是vim的时候,我打开一个文件都是不可以编辑,我以外是我的电脑坏了,还是,但是我的电脑按键又可以用

在打开一个文件的时候,会先进入命令模式。只能浏览文件,不可以编辑文件。现在我才知道原来快捷键是在命令模式下使用的。但是我没用过。

命令模式下可以按i、a、o可以进入编辑模式,对文件进行编辑。也可以按: 进入底线命令模式,这个主要用于文件的保存和退出。

在编辑模式下,按下esc键,就退出编辑模式。这个时候可以用命令模式也可以用底线命令模式。

在底线命令模式下按下回车就是确认。

vi编辑器的快速体验

通过vi\vim命令编辑文件,就会打开一个新的窗口,此时的窗口就是:命令模式窗口

命令模式是vi编辑器的入口和出口

  • 进入vi编辑器会进入命令模式
  • 通过命令模式输入键盘指令,可以进入输入模式
  • 输入模式需要退回到命令模式,然后通过命令模式可以进入底线命令模式

学习vi的使用,第一步要明白vi的三种模式切换,命令模式、输入模式、底线命令模式

在打开文件的时候会先进入的界面就是vi的命令模式,在这个里面可以使用快捷键秀翻全场。

按下i,还有其他的什么键,就可以进入编辑模式,用来码字板砖。

按下:,进入底线命令模式,并且搭配一些命令可以对文件进行整体操作,保存、退出什么的。

注意在命令模式下按下i(还有其他三个键)进入编辑模式;按下: 进入底线命令模式

在编辑模式下只能按下esc,才能回到命令模式

  1. 使用:vim hello.txt,编辑一个新文件,执行后进入的是命令模式
  2. 在命令模式内,按键盘i,进入编辑模式
  3. 在编辑模式内输入:itheima and itcast
  4. 输入完成后,按esc回退会命令模式
  5. 在命令模式内,按键盘: 会进入底线命令模式
  6. 在底线命令模式内输入:wq,保存文件并退出vim编辑器
[huan@192 桌面]$ vim hello.txt

用vi编辑文件的命令,如果文件存在,打开文件,如果文件不存在,那么创建文件并打开

~
~
~
"hello.txt" [新文件]                                                                        0,0-1        全部

打开文件后,会出现一个类似上面的代码。这就是命令模式,在左下角也会显示这是个新文件。"hello.txt" [新文件]

这个界面是不可以编辑的,一开始我就不明白为什么不可以用

现在按下i键,会有两个变化,

第一个变化,可以输入内容了,第二个变化

~
~
~
-- 插入 --                                                                                  0,1          全部 

左下角的"hello.txt" [新文件] 变成了-- 插入 --

这个时候输入内容itheima and itcast

在输入模式下,按下一些功能按键是没有特殊功能的,比如i是进入输入模式,但我在输入模式下按下i,那就是输入i,并不会又进入输入模式。

现在退出输入模式,进入命令模式,因为在输入模式下使用命令模式或者底线命令模式都是不管用的,按下esc

itheima and itcast
~
~
~
                                                                                            1,18         全部

会发现无论是"hello.txt" [新文件] 还是-- 插入 --都不见了,现在可以执行一些命令(快捷键)、或者:。

接下来就是一些简单的快捷指令

按下两下yy+p是可以复制整行的,前提是光标要移动到需要复制的行上

两下dd,删除一行

u,撤销

现在要对文件保存退出。进入底线命令模式,怎么进入按下:

:

按下:后,底下会变成这样,接下来输入wq,w(保存)、q(退出)

:wq

可以验证一下,文件有没有存在

[huan@192 桌面]$ ls
hello.txt  test  test1  test2  test.txt
[huan@192 桌面]$ cat hello.txt
itheima and itcast
itheima and itcast
itheima and itcast

补充一点点

:wq

这个是保存并退出,也可以分开执行

:w保存,:q退出

在执行:w后

"hello.txt" 3L, 57C 已写入                                                                   3,1          全部

编辑器左下角的变化,其实vi并不是很难用,你的每一次操作都会有提示

命令模式快捷键

模式命令描述
命令模式i在当前光标位置进入输入模式
命令模式a在当前光标位置之后进入输入模式
命令模式I在当前行的开头进入输入模式
命令模式A在当前行的结尾进入输入模式
命令模式o在当前光标的下一行进入输入模式
命令模式O在当前光标的上一行进入输入模式
输入模式esc任意情况下输入esc都能回到命令模式

有六条命令可以进入到输入模式,有一条指令,可以退回到命令模式

这里要打开vim试一下

还有命令

模式命令描述
命令模式键盘上、键盘K向上移动光标
命令模式键盘下、键盘J向下移动光标
命令模式键盘左、键盘H向左移动光标
命令模式键盘右、键盘I向右移动光标
命令模式0移动光标到当前行的开头
命令模式$移动光标到当前行的结尾
命令模式pageup(PgUp)向上翻页
命令模式pagedown(PgDn)向下翻页
命令模式/进入搜索模
命令模式n向下继续搜索
命令模式N向上继续搜索
命令模式dd删除光标所在行的内容
命令模式nddn是数字,表示删除当前光标向下n行
命令模式yy复制当前行
命令模式nyyn是数字,表示复制当前行和下面的n行
命令模式p粘贴复制的内容
命令模式u撤销修改
命令模式ctrl + r反向撤销修改
命令模式gg跳到首行
命令模式G跳到行尾
命令模式dG从当前行开始,向下全部删除
命令模式dgg从当前行开始,向上全部删除
命令模式d$从当前光标开始,删除到本行的结尾
命令模式d0从当前光标开始,删除到本行的开头

底线命令模式

模式命令描述
底线命令模式:wq保存并退出
底线命令模式:q仅退出
底线命令模式:q!强制退出
底线命令模式:w仅保存
底线命令模式:set nu显示行号
底线命令模式:set paste设置粘贴模式

这里要注意强制退出是什么意思

无论用txt还是word或者是什么软件,在做完东西后,退出时会问你是否要保存文件,那么Linux也是有这个功能的

E37: 已修改但尚未保存 (可用 ! 强制执行)                                                         18,81        顶端

我还记得一开始我用vi时,有时候总会给我提示这个提示,那个提示时英文,我看不懂,我直接关机开机

现在遇到这种问题有两种方法

一,:wq保存退出;二,:q1强制退出,这个不会对文件保存。

还有个设置粘贴模式,这个模式下复制的东西在粘贴时会保留原有格式,这个我还没有遇到过,不太明白用法

:set nu,显示行号,很舒服

以上就是vi编辑器的内容,一个简单的入门。

大佬们都是vi编辑器是最好用的编辑器,但是可能因为我是新手,体会不到,当有报错发生,我还是会手忙脚乱,不知所措。

总结

以上内容就是Linux的基础命令的学习笔记,但这里我已经写了有一万五的字,这是我写的最多的一回。代码占了大部分

Linux目录、没了入门、目录的表示方法这些我感觉是对Linux的一个了解。然后剩下的就是很多命令的学习了,想要学好Linux,离不开命令,所以我们应该牢记这些

举个简单的例子,让你用Windows打开一个文件,你肯定会想到鼠标双击,但是在Linux里面你应该一下子想到用哪个命令。虽然我现在还没到这种境界。

命令很多记不住,应该借助工具,百度搜索,无论是什么命令,都会遵守这么一个格式command [-aptions] [parameter],我们只是学会他的搭配即可,

还有vim,应该多练习

好了,我的笔记到此结束。

里面肯定有许许多多的bug,欢迎大家指出!毕竟这样成长更快。

也感谢大家可以看到这样,如果帮到了你,是我的荣幸。

谢谢大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值