目标:
1.学习各种指令,按照我们的指令进行操作,不需要去背
2.穿插很多Linux的相关概念(系统层面),需要去理解和记忆
注意:我们在敲各种指令的时候,其实和我们进行的日常操作,我们敲击的各种指令,起着同样的作用(使用Linux)。
目录
1.ls指令
1.1? -l选项
1.2? -h选项
1.3? -a选项
2.pwd和whoami指令
3.cd和touch指令
4.mkdir指令
5.rmdir&rm指令
6.man指令
7.cp指令
8.mv指令
9.cat&more&less指令
9.1cat指令
9.2more指令
9.3 less指令
10.head和tail指令
11.时间相关的指令
12.cal指令
?13.find&which指令
14.grep&bc指令
15.uname -r指令
1.ls指令
ls可以显示当前路径下的文件,注意ls显示的文件不包含隐藏文件。
[zwx@VM-20-3-centos lesson]$ ls
cmd.txt lesson1
[zwx@VM-20-3-centos lesson]$ cd lesson1
[zwx@VM-20-3-centos lesson1]$ ls
file.txt
[zwx@VM-20-3-centos lesson1]$ cd ~
[zwx@VM-20-3-centos ~]$ ls
code lesson
[zwx@VM-20-3-centos ~]$ cd lesson
[zwx@VM-20-3-centos lesson]$ ls
cmd.txt lesson1
[zwx@VM-20-3-centos lesson]$ cd lesson1
[zwx@VM-20-3-centos lesson1]$ ls
file.txt
Linux下有很多指令是可以带选项的,ls也有很多的选项,不同的选项可以达到不同的效果,这里为了不增加大家的负担,就找了几个我经常使用的选项来和大家聊一聊。
1.1? -l选项
ls加上 -l 选项可以显示文件的更多属性,这里使用示例来加深一下理解。
[zwx@VM-20-3-centos ~]$ ls
code lesson
[zwx@VM-20-3-centos ~]$ ls -l
total 8
drwxrwxr-x 4 zwx zwx 4096 Jul 12 21:09 code
drwxrwxr-x 3 zwx zwx 4096 Jul 13 18:02 lesson
这些属性中开头的d表示当前文件是一个目录,rwx对应的分别是文件的读、写和执行权限,这里主要介绍linux中的基础指令,关于权限的内容会在下一篇文章中更新出来,4096表示的是文件的大小,单位是kb,文件大小的后面跟的是文件创建或者更新的最近时间。
这里就有人会问了,4096能不能人性化的显示一下呢?答案是可以的,我们接着往下看。
1.2? -h选项
drwxrwxr-x 4 zwx zwx 4096 Jul 12 21:09 code
drwxrwxr-x 3 zwx zwx 4096 Jul 13 18:02 lesson
[zwx@VM-20-3-centos ~]$ ls -l -h
total 8.0K
drwxrwxr-x 4 zwx zwx 4.0K Jul 12 21:09 code
drwxrwxr-x 3 zwx zwx 4.0K Jul 13 18:02 lesson
加上-h选项之后呢,4096kb就变成了4.0k,有利于我们去查看了,-h这个命令比较好记,h可以理解为human,所以上面我们说使用-h选项更加人性化的显示。
1.3? -a选项
-a选项一般都是搭配着-l指令一起来使用的,这里我们先来看一些指令:
[zwx@VM-20-3-centos ~]$ ls -l
total 8
drwxrwxr-x 4 zwx zwx 4096 Jul 12 21:09 code
drwxrwxr-x 3 zwx zwx 4096 Jul 13 18:02 lesson
[zwx@VM-20-3-centos ~]$ ls -l -a
total 52
drwx------ 6 zwx zwx 4096 Jul 13 19:21 .
drwxr-xr-x. 7 root root 4096 Jul 11 20:36 ..
-rw------- 1 zwx zwx 7829 Jul 14 09:54 .bash_history
-rw-r--r-- 1 zwx zwx 18 Apr 1 2020 .bash_logout
-rw-r--r-- 1 zwx zwx 193 Apr 1 2020 .bash_profile
-rw-r--r-- 1 zwx zwx 231 Apr 1 2020 .bashrc
drwxrwxr-x 3 zwx zwx 4096 Jul 11 20:15 .cache
drwxrwxr-x 4 zwx zwx 4096 Jul 12 21:09 code
drwxrwxr-x 3 zwx zwx 4096 Jul 11 20:15 .config
drwxrwxr-x 3 zwx zwx 4096 Jul 13 18:02 lesson
-rw------- 1 zwx zwx 3321 Jul 12 23:00 .viminfo
-rw-rw-r-- 1 zwx zwx 427 Jul 12 18:09 .vimrc
很多人不理解显示的文件中. 和 ..是什么,这里解释一下,Linux下是有隐藏文件的,隐藏文件很容易理解,因为在windows下也是有隐藏文件的,windows下想要查看隐藏文件很简单,只需要把查看中隐藏的项目打开即可。
?Linux下的隐藏文件都是以 . 开头的,. 表示当先路径,..表示上一级路径,当然了隐藏文件有其自己用途,它可以隐藏系统的一些配置文件,避免误删除等操作。
2.pwd和whoami指令
这两个指令很简单,也不需要加那些复杂的选项:
pwd用来显示当前的工作目录,whoami用来查看当前用户。
[zwx@VM-20-3-centos ~]$ whoami
zwx
[zwx@VM-20-3-centos ~]$ pwd
/home/zwx
这里登录的是我的账号,登录的账号不同显示的内容和工作目录也就有所不同。
3.cd和touch指令
touch指令就是在当前路径下创建一个普通文件,注意只能是普通文件,而不是文件夹或者隐藏文件。
[zwx@VM-20-3-centos csdn]$ touch cmd
[zwx@VM-20-3-centos csdn]$ ls -l
total 0
-rw-rw-r-- 1 zwx zwx 0 Jul 14 10:09 cmd
需要注意的是,在创建文件的时候一定要注意当前工作路径,否则容易找不到文件;?
cd指令的全名为change directory,顾名思义就是更改目录,切换工作路径,这里在我的home目录和我创建的csdn目录下进行来回的切换,可以使用cd ..返回上一级目录哦:
code csdn lesson
[zwx@VM-20-3-centos ~]$ cd cdsn
-bash: cd: cdsn: No such file or directory
[zwx@VM-20-3-centos ~]$ la
-bash: la: command not found
[zwx@VM-20-3-centos ~]$ ls
code csdn lesson
[zwx@VM-20-3-centos ~]$ cd csdn
[zwx@VM-20-3-centos csdn]$ ls
cmd
[zwx@VM-20-3-centos csdn]$ cd ..
[zwx@VM-20-3-centos ~]$ ls
code csdn lesson
既然能够创建文件,那么就能创建目录,接下来来聊一聊mkdir指令。
4.mkdir指令
mkdir+目录名可以创建一个目录:
[zwx@VM-20-3-centos ~]$ cd lesson
[zwx@VM-20-3-centos lesson]$ ls
cmd.txt lesson1
[zwx@VM-20-3-centos lesson]$ mkdir lesson2
[zwx@VM-20-3-centos lesson]$ ls
cmd.txt lesson1 lesson2
这里我们可以看到的是在mkdir指令使用之前,当前路径下并没有lesson2,lesson2正是我们使用mkdir创建的。
mkdir有一个选项需要特别注意,如果我们想在当前目录下创建a/b/c/d/e/f,那么直接使用mkdir a/b/c/d/e/f是不行的,这时候就需要加上一个-p选项,就能完成创建。
[zwx@VM-20-3-centos lesson2]$ mkdir a/b/c/d/e/f
mkdir: cannot create directory ‘a/b/c/d/e/f’: No such file or directory
[zwx@VM-20-3-centos lesson2]$ mkdir -p a/b/c/d/e/f
[zwx@VM-20-3-centos lesson2]$ tree
.
`-- a
`-- b
`-- c
`-- d
`-- e
`-- f
6 directories, 0 files
tree指令在这里和大家提一下,Linux下的文件结构其实是一个多叉树,也就是说一个文件夹中可以有很多文件,类似于多叉树,可以有很多分支,所以这里我们使用了一个tree指令,可以更直观的看一下文件的目录结构。
当然tree指令是不能直接使用的,是需要我们自己来配置的,至于怎么配置,大家可以自己查一查文档哦,这里还是介绍基础的指令为主,网上有很多详细的文档都可以用来查看。
既然我们能够创建目录和文件,那么一定就能够删除目录和文件。
5.rmdir&rm指令
rmdir指令的作用比较单一,只能用来删除空目录,使用-p选项的意思就是当删除子目录后父目录也为空的话,就把父目录也删除掉,这里直接给大家演示:
[zwx@VM-20-3-centos lesson2]$ mkdir test
[zwx@VM-20-3-centos lesson2]$ rmdir test
[zwx@VM-20-3-centos lesson2]$ mkdir test
[zwx@VM-20-3-centos lesson2]$ ls
test
[zwx@VM-20-3-centos lesson2]$ rmdir test
[zwx@VM-20-3-centos lesson2]$ ls
[zwx@VM-20-3-centos lesson2]$ mkdir -p a/b/c/d/e/f
[zwx@VM-20-3-centos lesson2]$ rmdir -p a/b/c/d/e/f
rm不加选项的时候可以删除普通文件,加上-r选项可以删除目录。
[zwx@VM-20-3-centos lesson2]$ touch test
[zwx@VM-20-3-centos lesson2]$ ls
test
[zwx@VM-20-3-centos lesson2]$ rm test
[zwx@VM-20-3-centos lesson2]$ ls
[zwx@VM-20-3-centos lesson2]$
rm指令还有两个常用的指令,-f可以进行强制删除,即使文件是只读的也会直接删除;
-i选项在删除的时候会先提示一下是否删除,删除的话输入yes,不删除输入no。
[zwx@VM-20-3-centos lesson2]$ mkdir mydir
[zwx@VM-20-3-centos lesson2]$ ls
mydir
[zwx@VM-20-3-centos lesson2]$ rm -rif mydir
[zwx@VM-20-3-centos lesson2]$ ls
[zwx@VM-20-3-centos lesson2]$ mkdir mydir
[zwx@VM-20-3-centos lesson2]$ rm -ri mydir
rm: remove directory ‘mydir’? y
注意:当-f和-i选项一起使用的时候,是不会提示是否删除的,而是直接删除。?
我们心中可能或多或少都存在这样一个疑问,Linux文件的指令功能可以在网上查到吗,网上当然可以查到,但是需要注意的是Linux中自带查询指令man,使用man+指令,可以查询这条指令的功能作用,man后面也可以直接跟上man查询man 指令的作用。
6.man指令
使用man man指令之后,会弹出这样的内容:
?使用空格键可以接着往下翻阅,不想看的时候直接使用q键退出就可以了,这个指令在使用的时候是非常方便的。
man指令后面不仅可以跟一些指令,还能跟函数等内容:
- 普通命令
- 系统调用,像open、write之类的
- 库函数,如printf、fread等
我们现在了解这三个内容就可以了,还有很多内容感兴趣的家人们可以自行查阅。
7.cp指令
cp就是copy,用来复制目录或者文件
cp 源文件目录或者文件? 目标目录或者文件
无论是创建、删除,还是拷贝重命名等命令,都需要注意文件的路径,因为文件的路径分为两种:绝对路径和相对路径。
绝对路径:从根目录开始,一步一步定位到工作目录,如cd? /home/zwx/code/c 。
相对路径:以当前目录为参考,逐步定位到工作目录,如果我们在/home/zwx下想要进入cd? /home/zwx/code/c可以直接cd ./code/c。
[zwx@VM-20-3-centos c]$ cp test.c ../
[zwx@VM-20-3-centos c]$ cd ..
[zwx@VM-20-3-centos code]$ pwd
/home/zwx/code
[zwx@VM-20-3-centos code]$ ls
c cpp test.c
这样就复制了一个普通文件到上一级目录,如果我们想要复制一个目录,就需要加上-r选项了。
[zwx@VM-20-3-centos code]$ cp c ../
cp: omitting directory ‘c’
[zwx@VM-20-3-centos code]$ cp -r c ../
[zwx@VM-20-3-centos code]$ cd ..
[zwx@VM-20-3-centos ~]$ ls
c code csdn lesson
cp中同样存在-f选项,也是强制复制的意思,不管目标路径是否存在目标文件,cp中还存在一个-i选项,这个选项的作用时如果目标文件在拷贝的路径下有同名的文件,会提示一下是否进行覆盖。
[zwx@VM-20-3-centos code]$ cp -ir c ../
cp: overwrite ‘../c/test.c’? y
在Linux中我们知道了怎么复制文件,那么我们怎么才能移动文件或者堆文件进行重命名呢?
加下来看一下mv指令。
8.mv指令
mv指令就是移动文件或者对文件进行重命名的。
mv 源文件 + 路径是进行文件的移动, mv 源文件名 + 目标文件名是进行文件的重命名。
这里我们在/home/zwx/csdn/这个目录下创建了test1,并且在test1中创建了一个文件test.c,那么如何把test.c文件移动到上一级目录test2中呢,又如何对这个文件进行重命名呢?
[zwx@VM-20-3-centos test1]$ mv test.c ../test2
[zwx@VM-20-3-centos test1]$ ls
[zwx@VM-20-3-centos test1]$ cd ..
[zwx@VM-20-3-centos csdn]$ ls test2/
test.c
[zwx@VM-20-3-centos csdn]$ mv test.c mvtest.c
[zwx@VM-20-3-centos csdn]$ ls
cmd mvtest.c test1 test2
mv指令同样存在-i和-f选项,这两个选项和rm中的选项意义是相同的,一个是覆盖提示,一个是强制移动。
9.cat&more&less指令
这三个指令都可以用来查看文件,但是查看的时候有着一些区别。
9.1cat指令
这里我们提前创建好了一个有一万行的文件,并且每一行都有行号。
cat 文件名可以直接查看;
?如果使用cat指令进行查看,我们来看一下效果:
从这里我们就可以看出,cat指令查看文件的时候,直接显示到行末。
9.2more指令
more 文件名
?这里我们可以看出啊,使用more命令只显示一屏,并且是从前面开始显示的,如果想要继续往下显示,可以使用enter一行一行下翻,也可以使用空格键一屏一屏的下翻。
9.3 less指令
less 文件名
less指令其实就是为了弥补more指令的缺点,因为more指令查看文件时只能往下翻,不能往上翻,使用less命令的时候就可以使用上下键来进行翻阅查看。
注意:more和less命令查看文件的时候想退出的时候可以直接使用q键来退出。
10.head和tail指令
head + 文件名可以默认查看文件的前十行,tail + 文件名默认查看文件的末尾十行。
现在来看一下之前我们已经创建好的文件:
[zwx@VM-20-3-centos lesson1]$ head file.txt
hello bit 0
hello bit 1
hello bit 2
hello bit 3
hello bit 4
hello bit 5
hello bit 6
hello bit 7
hello bit 8
hello bit 9
[zwx@VM-20-3-centos lesson1]$ tail file.txt
hello bit 9991
hello bit 9992
hello bit 9993
hello bit 9994
hello bit 9995
hello bit 9996
hello bit 9997
hello bit 9998
hello bit 9999
hello bit 10000
当然使用这两个指令不仅可以查看十行,也可以直接加上想要查看的行数:
[zwx@VM-20-3-centos lesson1]$ head -3 file.txt
hello bit 0
hello bit 1
hello bit 2
[zwx@VM-20-3-centos lesson1]$ tail -3 file.txt
hello bit 9998
hello bit 9999
hello bit 10000
head和tail指令可以配合管道 | 使用,想要了解管道的使用,就必须先要了解输出是如何使用的。
输出重定向:
1.如果目标文件不存在,创建之,否则直接进行访问?
2.访问? a.输出重定向(从文件开始,覆盖式的写入) b.追加重定向(从文件的结尾,追加式的写入)
echo + 字符串可以直接在终端中输出该字符串?
[zwx@VM-20-3-centos lesson1]$ echo "hello Linux"
hello Linux
[zwx@VM-20-3-centos lesson1]$ touch hello
[zwx@VM-20-3-centos lesson1]$ ls
file.txt hello
[zwx@VM-20-3-centos lesson1]$ echo "hello" > hello
[zwx@VM-20-3-centos lesson1]$ cat hello
hello
[zwx@VM-20-3-centos lesson1]$ echo "Linux" >> hello
[zwx@VM-20-3-centos lesson1]$ cat hello
hello
Linux
其实管道就是对文件进行了批量化,流水化的处理,如使用head指令查看前100行,加上管道查看这100行中的后十行,就可以:
[zwx@VM-20-3-centos lesson1]$ head -100 file.txt | tail -10
hello bit 90
hello bit 91
hello bit 92
hello bit 93
hello bit 94
hello bit 95
hello bit 96
hello bit 97
hello bit 98
hello bit 99
11.时间相关的指令
我们看下直接输入date会显示什么:
[zwx@VM-20-3-centos ~]$ date
Fri Jul 15 09:55:52 CST 2022
这里我们可以看出直接输入date终端会直接显示对应的年月日和时间,那如果我们只想看年份和月份,或者只想看年月日是否有其他可以添加选项来实现,答案是可以的。
[zwx@VM-20-3-centos ~]$ date +%Y-%m-%d-%H:%M:%S
2022-07-15-10:05:00
以上的格式分别对应时间的年月日和时分秒。
时间转化为时间戳(从1970年1月1日午夜开始,,到现在的秒数),date加上%s可以直接查看。
[zwx@VM-20-3-centos ~]$ date +%s
1657850896
既然时间可以转化为时间戳,那么时间戳可不可以转化为具体的时间呢?当然也是可以的。
这里我们复制一下之前的时间戳,来看一下对应的具体时间:
[zwx@VM-20-3-centos ~]$ date -d @1657850896
Fri Jul 15 10:08:16 CST 2022
12.cal指令
cal指令可以用来显示公历(阳历)日历,公历是现在国际通用的历法,又称为格列历,通称为阳历。
如果我们直接使用cal + 当前年份,就会显示一年的日历:
?其中cal还有两个选项就是-1和-3,这两个选项对应的是什么内容,大家可以自行了解一下,这里就不过多解释了哈。
?13.find&which指令
试想一下有这样一个情景,当我们知道文件名但是不知道文件所在位置,那么我们应该怎么去找到他 ,这种情况下我们就可以直接使用find? 目录 -name 文件名,在目录下查找所有这个文件名的文件:
[zwx@VM-20-3-centos ~]$ find ~ -name test.c
/home/zwx/code/c/test.c
当然我的目录也是刚创建不久,里面的文件也不是很多,所以搜出来的文件只有一个。find指令还有很多选项,而且里面的选项是很复杂的,在这里我们就介绍一个常用的name选项就可以使用了,其他选项大姐可以自行了解。
which 指令可以找到指令的文件,为什么我们所说的指令反而又成了文件,因为Linux下一切皆文件。一个指令其实就是一个文件,这和我们之前理解的指针是一样的,在指针开来一切皆地址。
[zwx@VM-20-3-centos ~]$ which ls
alias ls='ls --color=auto'
/usr/bin/ls
[zwx@VM-20-3-centos ~]$ which man
/usr/bin/man
这里有很多人可能又会有一个疑问了,我什么which ls在输入的时候下面有一天alias的指令,而which man指令输入后没有这个指令出现,alias指令是干什么用的?
其实alias指令就相当于在日常生活中我们给其他人起的外号,比如说一个人叫张三,我们叫他“三”,和alias指令其实是一样的,下面我们来使用这个指令:
[zwx@VM-20-3-centos ~]$ alias zhangsan="ls"
[zwx@VM-20-3-centos ~]$ zhangsan
code csdn lesson
这里我们可以看到啊,当我们使用alias指令之后,所对应的zhangsan的效果和ls的效果就是一样的了。
14.grep&bc指令
grep可以用来查找你想在文件中找的内容,不加任何选项的时候,可以直接这样使用(查找我们之前创建的10000行的文件):
[zwx@VM-20-3-centos lesson1]$ grep "888" file.txt
hello bit 888
hello bit 1888
hello bit 2888
hello bit 3888
hello bit 4888
hello bit 5888
hello bit 6888
hello bit 7888
hello bit 8880
hello bit 8881
hello bit 8882
hello bit 8883
hello bit 8884
hello bit 8885
hello bit 8886
hello bit 8887
hello bit 8888
hello bit 8889
hello bit 9888
这里有一个点需要注意啊,我们不加选项的时候只能查看文件的内容,那么我们能不能显示行号呢?答案当然也是可以的。
[zwx@VM-20-3-centos lesson1]$ grep -n "888" file.txt
889:hello bit 888
1889:hello bit 1888
2889:hello bit 2888
3889:hello bit 3888
4889:hello bit 4888
5889:hello bit 5888
6889:hello bit 6888
7889:hello bit 7888
8881:hello bit 8880
8882:hello bit 8881
8883:hello bit 8882
8884:hello bit 8883
8885:hello bit 8884
8886:hello bit 8885
8887:hello bit 8886
8888:hello bit 8887
8889:hello bit 8888
8890:hello bit 8889
9889:hello bit 9888
在原有的指令上加上-n选项就好了,还有一个选项-v,这个指令是反向选择的意思,比如说我们所查找的内容在第一行,一共有十行内容,那么查找时加上-n输出的内容就是2-10行,就是这个意思。
这个指令其实在我们日常的开发中不经常使用,接下来使用下一个选项来了解一下-i选项:
[zwx@VM-20-3-centos lesson1]$ cat test.c
#include <stdio.h>
int main()
{
printf("hello Linux");
pRINtf("hello Linux");
PRINTF("hello Linux");
return 0;
}
[zwx@VM-20-3-centos lesson1]$ grep "printf" test.c
printf("hello Linux");
[zwx@VM-20-3-centos lesson1]$ grep -i "printf" test.c
printf("hello Linux");
pRINtf("hello Linux");
PRINTF("hello Linux");
-i选项可以 忽略大小写,查找内容。
bc指令:进行浮点运算。
[zwx@VM-20-3-centos lesson1]$ echo "1.0+2.0"
1.0+2.0
[zwx@VM-20-3-centos lesson1]$ echo "1.0+2.0" | bc
3.0
15.uname -r指令
面试问题:请问如何在Linux下查找Linux的体系结构,以及内核版本?
[zwx@VM-20-3-centos lesson1]$ uname -r
3.10.0-1160.45.1.el7.x86_64
[zwx@VM-20-3-centos lesson1]$ uname -a
Linux VM-20-3-centos 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
这两个指令都可以查找Linux的体系结构和内核版本,至于体系结构的概念,大家可以去百度百科看一下。
Linux的基础指令到这里就结束了,Linux中还有很多指令,并且有很多选项等着我们去了解,我们要继续加油,才能够走得更远,注意一定不要三天打鱼,两天晒网,要一天有一天的价值所在。
接下来继续加油吧,喜欢的铁字们可以来个一键三连,感谢支持。
|