我们学Linux指令,其实就是和学windows一样,学习Linux的操作
一、Linux****下基本指令
ls****指令
语法 : ls [ 选项 ] [ 目录或文件 ]
功能 :对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
常用选项:(并不全,只是常用的)
- -a 列出目录下的所有文件,包括以 . 开头的隐含文件。
- -d 将目录象文件一样显示,而不是显示其下的文件。 如:ls --d 指定目录
- -i 输出文件的 i 节点的索引信息。 如 ls --ai 指定文件
- -k 以 k 字节的形式表示文件的大小。ls --alk 指定文件
- -l 列出文件的详细信息。
- -t 以时间排序。
- -R 列出所有子目录下的文件。(递归)
上面的我可能不会全部讲完,大家可以自己尝试一下。
但是在说这个之前我们先来讲一个小指令,pwd。
pwd
pwd会展示当前路径。
我们来试一试:
我们输入pwd加【回车】我们可以我们现在我们处于root路径。
这时我们输入ls【空格】-a【回车】,来看看root路径下有什么文件(ls和选项这将一般为一个空格但也可以是多个)

我们发现有蓝色的和白色的,还有"."".."这两个也是蓝色的,这个是什么,我们向不说,但是根据我们的学习windows类比,我们可以猜测这个可能是目录或者文件夹。
再来测试ls -l

-l 列出文件的详细信息。
那么我们思考一下能不能ls -l -a来显示所有问价你的详细信息呢?
答案是可以的

而且我们发现ls -a -l的结果也一样

也可以这样写


所以我们可以得出这个结论:
ls指令的选项可以依次传递多个,可以拼接在一起,顺序可以随意。
隐藏文件
关于-a:
再Linux中,以.开头的文件,我们称之为隐藏文件。
现在我们来举个例子:
首先我们要知道一个指令:mkdir
mkdir****指令(重要)
语法:mkdir [选项] dirname...
功能:在当前目录下创建一个名为 "dirname"的目录
常用选项:
-p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录;
例:
mkdir --p test/test1 : 递归建立多个目录
现在我们来验证隐藏文件:
我们输入以下指令:
然后我们输入
然后输出的结果是:
我们发现没有.seeme目录,这时我们输入
我们在这里我们可以看见
.seeme 目录
当然,我们输入ls -a也可以看到
这里证明了
在Linux中,以.开头的文件,叫做隐藏文件。
这样我们也能够知道问什么我们开始输入 ls -l 什么都没有,因为开始里面都只有隐藏文件,因此". "和".."我们一开始也看不到。
当然对于隐藏文件,我们可以来类比一下Windows
这是我们的文件夹
我们一般是看不到隐藏的文件的。
在Windows中,如果我们要看到隐藏的文件,我可以这样子:
选上隐藏的项目,这样我们就能看到当前路径下的隐藏文件了。
这里的.git就是Windows环境下的隐藏文件。
touch****指令
上面我们讲了这些,那么我们该怎么新疆一个普通文件呢?这里我们得提到了touch指令
语法 :touch [ 选项 ]... 文件 ...
功能 : touch 命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
常用选项 :
-a 或--time=atime或--time=access或--time=use只更改存取时间。
-d 使用指定的日期时间,而非现在的时间。
-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-m 或--time=mtime或--time=modify 只更改变动时间。
-r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
-t 使用指定的日期时间,而非现在的时间。
例:
可见我们创建了一个新的普通文件。
我们来类比Windows下新建文件,
这里我们就新建一个文本文件。
那么现在问题来了,这里显示大小是0KB,那么我们新建的这个文件是否在磁盘上占用空间呢?
当然是占用的。
因为我们新建一个文件的时候我们不只要新建文件的名称,还要有文件的修改时间,文件的类型。
文件名+文件修改时间+文件类型=文件属性
同时我们还要知道:
文件=文件内容+文件属性
在Linux下我们也有描述文件属性的地方
上图里我们要区分蓝色和白色的文件的差别,我们说过蓝色的是目录,白色的是普通文件夹。
而开头的drwxr-xr-x的我们称之为目录类型。
我们用touch创建过普通文件,那么我们能拿来创建隐藏文件吗?
答案是可以的
pwd****命令
语法 : pwd
功能 :显示用户当前所在的目录
在Windows中我们的当前的目录是这个:
在Windows中'\'是路径分隔符
在Linux中'/'是路径分隔符
用文件夹(目录)和路径分隔符====一条路径----->找到文件
那么问题来了,我们可以把路径和ls指令结合吗?
答案是肯定的
在Linux中我们一般把第一个'/'叫做根目录
cd命令
Linux 系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。
语法 :cd 目录名
功能 :改变工作目录。将当前工作目录改变到指定的目录下。
例 :
cd .. : 返回上级目录
cd /home/litao/linux/ : 绝对路径
cd ../day02/ : 相对路径
cd ~ :进入用户家目
cd - :返回最近访问目录
例:
既然讲到这里,我来讲讲前面的
所以我们cd ..会返回上一级:
此时我们就处于根目录
如果我们这时候像看dir1目录呢?
有人可能会这么写:
我们会发现我们打印的是dir1目录下的内容,如果我们只是想打印dir1这个目录呢?
我们可以使用 -d
而且我们可以这样打印更详细的信息:
因此我们也可以查看根目录:
这时候问题来了根目录下能放普通文件吗?可以放目录吗?
当然是可以的,这里我就不写了。
Linux的目录结构
我们知道根目录里面的目录也可放普通文件和目录,所以我们可以推断出:
Linux的目录结构---> 整体是一颗多叉树的形状。
那么我们该如何证明呢?
这里我们补充一条命令
tree [空格] [目录]
但是有些人运行了,结果却是这样的:
主要因为大家的Linux里没有安装
我们可以输入:
yum install -y tree
然后运行:
这样你的系统里就安装好了!
我们可以尝试一下:
我这里文件比较少不大明显,大家甚至可以试试
tree /
由此我们就可以得知是多叉树的形状
通过观察我们可以得到如下结论:
- 这个多叉树的叶子节点,一定是空目录或者普通文件
- 任何一个父节点,可能存在多个子节点
- 任何一个子节点,一定只有一个父节点
绝对路径与相对路径
所以我们前面可以通过/root/dir1找到这个目录,因为路径具有唯一性。
而上面这种从根目录到指定文件的路径我们称为:绝对路径。
我们可以通过绝对路径创建文件

我们也可以通过绝对路径找到文件
我们知道root目录下有以下文件:
如果我们现在在dir1路径内:
我们可以通过访问上级路径去寻找me文件
而这个路径,我们称之为 相对路径。
那么这个路径是相对与什么的呢?
它相对的是我们当前路径,按照上面写的,整体应该是:
因为我们当前处于/root/dir1的文件夹下
绝对路径与相对路径的比较:
- 一般命令行操作时,比较喜欢用相对路径
- 绝对路径,在任何路径下,都能找到指定的文件 ------ 配置文件中使用
我们可以把路径和上面的指令结合
回到cd命令,我们观察这些目录下,我们能得出什么?




通过观察我们可以得到如下结论:
Linux下,任何一个目录,都存在..和.,新建的空目录也一样。
我们接着来

cd -跳转到最近的上一次路径

cd ~ 跳转到的都是root目录,这个是root用户的家目录
类比的话

这个就是Windows下的用户的家目录。
Linux用户登录,默认所处的路径,就是自己的家目录
上面我们说了root用户的根目录就是/root
如果我们是普通用户呢?(这里我就不做演示了)
那么普通用户的家目录也可以用 cd ~
来看,一般就是/home/xxx(xxx为用户名)
这个叫做普通用户的家目录
下面是一些知识点:
- Linux用户登录,默认所处的路径,就是自己的家目录
通过上面的路径知识和指令我们可以通过mkdir -p创建一整段路径:
例:


mkdir -p 可以创建一串路径,而且支持对已有路径创建新的路径

rmdir指令&& rm****指令(重要):
rmdir 是一个与 mkdir 相对应的命令。 mkdir 是建立目录,而 rmdir 是删除命令。
语法 : rmdir [-p] [dirName]
适用对象 :具有当前目录操作权限的所有使用者
功能 :删除空目录
常用选项:-p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。
rm 命令可以同时删除文件或目录
语法 : rm [-f-i-r-v] [dirName/dir]
适用对象 :所有使用者
功能 :删除文件或目录
常用选项 :
- -f 即使文件属性为只读(即写保护),亦直接删除
- -i 删除前逐一询问确认
- -r 删除目录及其下所有文件
我们可以通过rmdir删除空目录
例子:

此处由于我是root用户所以会有再次确定。我们可以通过rm删除文件或目录


我们还可以通过rm -r 来递归式删除非空目录
例:
那么这个递归式有点麻烦了,我们可以改吗?
我们可以通过rm -rf 来强制递归删除(不会问你,直接删除)
man指令(重要)
Linux 的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问 Linux 手册页的命令是 man
语法 : man [ 选项 ] 命令
常用选项
-k 根据关键字搜索联机帮助
num 只在第 num 章节找
-a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用 a 选项,当按下
q 退出,他会继续往后面搜索,直到所有章节都搜索完毕。
解释一下 , 面手册分为 8 章
1 是普通的命令
2 是系统调用 , 如 open,write 之类的 ( 通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件 )
3 是库函数 , 如 printf,fread4 是特殊文件 , 也就是 /dev 下的各种设备文件
5 是指文件的格式 , 比如 passwd, 就会说明这个文件中各个字段的含义
6 是给游戏留的 , 由各个游戏自己定义
7 是附件还有一些变量 , 比如向 environ 这种全局变量在这里就有说明
8 是系统管理用的命令 , 这些命令只能由 root 使用 , 如 ifconfig
例:


可以通过方向键翻页,按"Q"退出
man的手册,可以通过man man查看

我们也可以用man 查C语言之类的但是我们要安装一些东西
我们输入:
yum install -y man-pages
安装好后,我们就可以用这个查C语言函数


cp****指令(重要):
语法 : cp [ 选项 ] 源文件或目录 目标文件或目录
功能 : 复制文件或目录
说明 : cp 指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则
它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的
目录,则会出现错误信息
常用选项 :
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,
则一律视为普通文件处理
-R 或 --recursive 递归处理,将指定目录下的文件及子目录一并处理
在Linux我们可以用nano函数类似写记事本(注意这个也要安装)
yum install -y nano
例:


然后ctrl+x回车保存
我们也可以运行
gcc test.c -o xxxx
把代码编译成可执行程序,然后运行

这里我们再来讲cp指令


我们就把mytest拷贝如dir目录里了
cp指令整体类似rm我们可以通过cp -r把目录递归式拷贝入另一个目录。
但是cp -rf在root用户下也仍需要确认,大家可以自己试一试。
二、Linux的一些热键(方便大家尝试今天所学)
1.Tab键(快速按两次)
1.会自动展示当前字符开头的指令,自动补齐
2.展示当前目录下的路径,自动补齐
2.ctrl+c
失控的状态,直接ctrl+c终止