目录
[1. 目录内容的显示](#1. 目录内容的显示)
[ls -l(列出文件的详细信息)](#ls -l(列出文件的详细信息))
[ls -a(显示隐藏文件)](#ls -a(显示隐藏文件))
[2. 目录的跳转操作](#2. 目录的跳转操作)
[cd ..(回到上级路径)](#cd ..(回到上级路径))
[cd 绝对路径名(进入这个路径)](#cd 绝对路径名(进入这个路径))
[cd 绝对相对名(进入这个路径)](#cd 绝对相对名(进入这个路径))
[cd ~(跳转到当前用户的家目录)](#cd ~(跳转到当前用户的家目录))
[cd -(跳转至上一次所处的路径)](#cd -(跳转至上一次所处的路径))
[cd /(跳到根目录)](#cd /(跳到根目录))
[3. 基本创建操作](#3. 基本创建操作)
[touch 新文件名(创建新文件)](#touch 新文件名(创建新文件))
[mkdir 新目录名(创建新目录)](#mkdir 新目录名(创建新目录))
[4. 基本删除操作](#4. 基本删除操作)
[rmdir 非空目录名(删除非空目录)](#rmdir 非空目录名(删除非空目录))
[rm 文件名(删除文件)](#rm 文件名(删除文件))
[rm -r 目录名/文件名(删除目录/文件)](#rm -r 目录名/文件名(删除目录/文件))
[rm -rf 文件名/目录名(强制删除文件/目录)](#rm -rf 文件名/目录名(强制删除文件/目录))
[5. man手册](#5. man手册)
[6. 笔试选择题](#6. 笔试选择题)
这里默认前一篇的Linux环境都安装好了,这里是在Xshell进行演示。
在此时前面的学习我们可以先用root用户,在学习权限的时候在换到普通用户,
可以和我一样一直输入cd ..回车,退到最外层目录, (到最外层目录输入ls可以显示你的目录,有一个目录是家目录,家目录名字可能是home也可能是root,为了方便我们没有的home的,mkdir home 建立一个home目录,(有了就不用建立的了)
然后cd home 进入home 目录,再mkdir linux_2 建立一个linux_2目录,
(home里面应该是放用户名文件夹的,但现在先这样用了)
1. 目录内容的显示
语法 : ls [ 选项 ][ 目录或文件 ]
功能 :
对于目录,该命令列出该目录下的所有子目录与文件。
对于文件,将列出文件名以及其他信息。
常用选项:
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-d 将目录象文件一样显示,而不是显示其下的文件。 如: ls --d 指定目录
-i 输出文件的 i 节点的索引信息。 如 ls --ai 指定文件
-k 以 k 字节的形式表示文件的大小。 ls --alk 指定文件
-l 列出文件的详细信息。
-n 用数字的 UID,GID 代替名称。 (介绍 UID , GID )
-F 在每个文件名后附上一个字符以说明该文件的类型, "*" 表示可执行的普通文件; "/" 表示目录; "@" 表示符号链接;"|" 表示 FIFOs ; "=" 表示套接字 (sockets) 。(目录类型识别)
-r 对目录反向排序。
-t 以时间排序。
-s 在 l 文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
-R 列出所有子目录下的文件。 ( 递归 )
-1 一行只输出一个文件。
ls(显示非隐藏文件)
直接输入ls是默认列出当前路径下的非隐藏文件,输入个ls 看看:
什么都没有,因为当前目录确实什么文件都没有,如果我们想看 ls 的效果,我们用 touch (touch 命令我们后面再说)先创建一个文件:输入touch mytest.c,**注意事项:**在输入指令的时候一定要把空格带好,之后再输入 ls,就可以显示刚才创建的 mytest.c 文件了:
当然,我们也可以用 ls 直接查看到一些目录文件。我们现在还没有目录,我们先用 mkdir 创建出一个目录出来:(这个目录就相当于 Windows 下的一个文件夹,我们先可以这么理解。mkdir 下面再说,这里先测 ls )输入mkdir code,再输入ls:
显示当前目录下,我们当前目录是谁呢?如何知道?输入 pwd 显示当前路径:
pwd( 显示用户当前所在的目录**)**
(讲 ls 补充了这么多指令,就是为了做一个 ls 的演示,相当于是一个 "起手式" 。只是为了能快速操作起来,后面还要对刚才提前用到的指令详细介绍一下。)
下面再介绍几个ls的选项,然后最上面列出来的一个个试用就行了。
ls -l(列出文件的详细信息)
下面我们要来认识一下 "命令的选项"
指令是可以带很多选项的,比如默认情况下输入 ls 是只显示文件的,
但是输入 ls 带上 -l ,就可以显示出更多的文件属性。
ls -l可以简写成ll
分别输入ls -l和ll:
文件的详细信息对应什么后面会讲。
ls -a(显示隐藏文件)
**思考:**如果我们在 Windows 下创建了一个空文件(0kb)在磁盘中占据空间吗?
要占用,文件 = 文件内容 + 文件属性,文件有属性数据,属性数据是数据吗?当然是!
我们曾经或者将来的所有文件操作,无非两类:
① 对文件的内容操作 ② 对文件的属性操作
所以 ls -l 显示文件的更多属性,这里面的这些属性都代表了文件的某一种属性。
ls -a : 显示 Linux 系统中的隐藏文件
列出目录下的所有文件,包括以**.** 开头的隐藏文件。以点开头的文件我们称之为隐藏文件。
Windows下其实也有隐藏文件,感兴趣可以自己搜搜看。
既然有隐藏文件,那我们是不是也可以创建出隐藏文件呢?当然可以,
在前面用touch创建文件的方法中,在文件名最前面加一个点就是创建隐藏文件,
输入touch .mytest2.c,再输入ls看看:
现在是看不到隐藏文件的,输入ls -a
我们还可以复合使用,输入ls -a,回车后输入ls -a -l
发现多了一个点和两个点的两个文件?
其实,任意目录下都会存在两个隐藏文件:
. (当前路径)
.. (上级路径)
.. (上级路径)认为还是有点用吧,. (当前路径)有什么用?这是用其它操作让它找到你的路径的,后面用了就懂了。
ls 的其他常用选项,这里就不再逐个演示了。
我们对于 ls 用的最多的选项就是 ls -a -l ,其他的选项目前为止只需要有个印象即可。
**对于指令:**必须记住,但不是现在。忘掉很正常,不需要专门下来背指令。我们也不用特意去记,多用,不懂就查就行,用多了自然就熟了。
2. 目录的跳转操作
语法 :cd 目录名
功能 :改变工作目录。将当前工作目录改变到指定的目录下。
举例 :
cd .. : 返回上级目录
cd /home/litao/linux/ : 绝对路径
cd ../day02/ : 相对路径
cd ~ :进入用户家目
cd - :返回最近访问目录
如果我们想回到上级路径,该如何操作?
这里我们要使用一个叫 cd 的指令
前面我们的内容有点多了,输入clear清下屏幕:
你前面的操作还是在的,鼠标滑轮上划看看:
cd ..(回到上级路径)
我们输入pwd显示当前路径然后输入cd ..再输入pwd
思考:/home/linux_2是什么呢?
这是 Linux 路径,和 Windows 下的路径一样,
在桌面Xshell 7的图标右键然后进入属性就能看到Xshell 7在你电脑的路径了,
Windows的图形画界面就和这种路径有关。
而这个**\** 就是传说中的路径分隔符!Windows 的路径分隔符是 \ ,而 Linux 的路径分隔符是**/**
当我们在前面基础在输入cd ..回到 / 时,就不能再进行回退了(再次输入cd ..也没用):
这和 Window 下一样,一直返回返回到头,图标变灰:
不能回退时剩下的这个 / 我们不称之为路径分隔符,我们称之为根目录。
而回到路径的方式,我们可以直接 cd + 路径:
cd 绝对路径名(进入这个路径)
在前面基础输入cd /home/linux_2,在输入pwd显示当前路径:
前面提到了根目录,什么是根目录?
**思考:**Linux 入口目录时 / 根目录,请问根目录可以再放一个目录吗?
Linux 目录结构的本质:
Linux 的目录结构本质是一个多叉树。所以我们把 / 称为根目录,是路径的起始。
在数据结构的角度去理解:
① 既然是一颗多叉树,每一个子节点既可以是一个目录(再放目录或普通文件,递归式的定义),也可以是一个普通文件。
② 这颗多叉树的叶子节点一定是一个普通文件或者是空目录。
我们一般 "定位" ,是通过路径定位的方式找到文件的。
为什么我们都是通过路径方式定位文件的呢?
如果我们想找到我们曾经写的 test.c 文件,我们可以从 / 到 home 到 linux_2再到 test.c。
任何一结点,可以有多个子节点。但是任何一个子节点,都只有一个父节点。
所以 test.c 只有一个父节点,即 linux_2...... linux_2也只有一个父节点,即 home......
所以当我们定位路径时,反向回推时,这条路径时具有惟一性的。
因为常规的路径定位是具有惟一性的。
cd 绝对相对名(进入这个路径)
绝对路径与相对路径:
/home/linux_2/test.c : Linux 下的 "绝对路径" (惟一性且永远有效)。
相对路径:相对于我当前所处的路径。
相对路径往往相对于当前位置,容易失效。而绝对路径是永远有效的!
如果是日常使用,我们推荐相对路径 ------ 因为简单。
如果是进行添加配置文件之类的,推荐绝对路径 ------ 因为不会出错。
cd 命令后面可以跟上任何以绝对路径或相对路径构建的路径。
所以在前面在根目录下进入linux_2也可以这样进入:(后9行)pwd只是为了显示,可以不显示
cd ~(跳转到当前用户的家目录)
~: 表示home
默认一个用户在登录时,都是处于该用户的家目录中的。
一个普通用户的家目录一般都是在 home 路径下有一个以你名字命名的文件夹。
如果是 root 用户,它会在根目录下的 root 目录下。
(关于 root 和普通用户的差别,我们在后面的权限章节会详细讲解)
cd -(跳转至上一次所处的路径)
cd /(跳到根目录)
一起演示:
3. 基本创建操作
touch 指令
语法 :touch [ 选项 ]... 文件 ...
功能 : touch 命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
常用选项 :
-a 或 --time=atime 或 --time=access 或 --time=use 只更改存取时间。
-c 或 --no-create 不建立任何文档。
-d 使用指定的日期时间,而非现在的时间。
-f 此参数将忽略不予处理,仅负责解决 BSD 版本 touch 指令的兼容性问题。
-m 或 --time=mtime 或 --time=modify 只更改变动时间。
-r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
-t 使用指定的日期时间,而非现在的时间
touch 新文件名(创建新文件)
touch:创建文件
touch 命令参数可更改文档或目录的日期时间,
包括存取时间和更改时间,或者新建一个不存在的文件。
本章我们只讲 touch 普通用法,我们不去讲它的常用选项。
本章只需掌握 touch 的最普通的用法,即用 touch 来创建普通文件。
(对于 touch 修改文件时间等用法我们放到讲开发工具 makefile 的时候再讲)
前面讲目录结构的本质时把一开始建的mytest.c讲成test.c了,现在再来建立一个test.c:
mkdir 新目录 名(创建新 目录 )
mkdir 指令:
语法 : mkdir [ 选项 ] dirname...
功能 :在当前目录下创建一个名为 "dirname" 的目录
常用选项 :
-p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在 , 加上此选项后 , 系统将自动建立好那些尚不存在的目录, 即一次可以建立多个目录 ;
举例 :
mkdir --p test/test1 : 递归建立多个目录(test1在test里面)
演示建立一个目录和递归建立多个目录:
4. 基本删除操作
rmdir 指令 && rm 指令:
rmdir 是一个与 mkdir 相对应的命令。 mkdir 是建立目录,而 rmdir 是删除命令。
语法 : rmdir [-p][dirName]
适用对象 :具有当前目录操作权限的所有使用者
功能 :删除空目录
常用选项 :
-p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。
rm 命令可以同时删除文件或目录
语法 : rm [-f-i-r-v][dirName/dir]
适用对象 :所有使用者
功能 :删除文件或目录
常用选项 :
-f 即使文件属性为只读 ( 即写保护 ) ,亦直接删除
-i 删除前逐一询问确认
-r 删除目录及其下所有文件
rmdir 非空目录名( 删除非空目录)
注意,rmdir 只能删除空目录:
在前面的基础上进入到code2目录
rm 文件名(删除文件)
因为文件里面不可能还有一个文件,所以不存在删除空文件的说法。
rm删除普通文件:发现他还询问我们是否确定删除,输入y代表确定,n代表不确定:
rm -r 目录名/文件名(删除目录/文件)
rm -r 虽然可以删除文件,但是删除文件用rm就可以了,rm -r 一般用来删除非空文件
像删除一个目录我们可以通过 " -r 递归式删除 "
不同于rmdir只能删除空目录,rm -r除了可以删除空目录,还可以删除非空目录:
(如果删除的是空目录它就不会问你是否要进入这个目录了)
如果我们想删除一个非空目录:(基于上面code2里面还是有code3的)
这里把code2和code3一起删掉,然后新创建空目录code2,再把code2删掉:
rm -rf 文件名/目录名(强制删除文件/目录)
rm 还有一个选项, -r 表示递归,还可以带一个 f (force,即强迫) :
有时候我想删一个文件,系统会提示你 "你确认吗?"
我们带一个 -f, 意思就是说 ------ "我非常确认!你不要给我提示了!"
在上面的基础上,我们新创建一个test2.c文件和code2目录,
在code2目录里建立一个code3空目录,然后把这三强制删除:
(前面不用强制删除是以后为了在公司等重要场所一个机会,两次都错就说不了自己误删了吧)
**注意事项:**不要在 root 下输入:rm -rf /
否则你的系统有可能会挂掉,即便没有挂,它它会从根目录开始递归把能删的都删了。
(如果你想试,且你现在也没啥文件,可以试试,就算挂掉了,去云服务器后台重启就行)
5. man手册
在写 C/C++ 的时候记不得某个函数,我们可以去查cpulspuls文档。
Linux 的命令有很多参数,我们不可能全记住,但是我们可以通过查看联机手册获取帮助。
对于没有 man 手册的问题:root 下输入 yum install -y man-pages
访问Linux联机手册 的命令是
man 语法 : man [ 选项 ] 命令
常用选项
-k 根据关键字搜索联机帮助 num 只在第 num 章节找
-a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,查到就停止,用a 选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。
解释一下,man 手册分为 8 章(最常用的是前3章)
1 是普通的命令
2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
3 是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件
5 是指文件的格式, 比如 passwd, 就会说明这个文件中各个字段的含义
6 是给游戏留的, 由各个游戏自己定义
7 是附件还有一些变量, 比如向 environ 这种全局变量在这里就有说明
8 是系统管理用的命令, 这些命令只能由 root 使用, 如 ifconfifig
举个简单的例子,我们想搜一下 printf ,但是又不想脱离 Linux 去搜,
这时我们可以去问系统的那个男人 ------ man,用man查一下man:(按q退出)
用man查一下rm:
用man查一下printf:
我们发现,printf 在这里竟然是一个命令?!是的,你没有看错。(其实也是个命令,后期讲)
man 不仅可以用来查命令,还可以用来查C语言函数。
因为 Linux 这款操作系统本身是由C语言写的,所以它的 man 手册默认是带C语言的标准手册的。
所以如果想查C语言的直接 man 就可以了,想查其他语言你也可以选择安装对应的语言手册。
但是我们一般不用在上面安装,直接百度搜对应语言的在线手册看会更好,看的也舒服。
用man查一下C语言的scanf函数:
实际上,man 手册更多的是用来查指令和系统调用接口的。
所以,如果我们想查某个不懂的命令我们只需要 man 一下,问问那个男人就可以了。
前面说到:man 常用选项
-k 根据关键字搜索联机帮助 num 只在第 num 章节找
-a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,查到就停止,用a 选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。
解释一下,man 手册分为 8 章(最常用的是前3章)
1 是普通的命令
2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
3 是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件
5 是指文件的格式, 比如 passwd, 就会说明这个文件中各个字段的含义
6 是给游戏留的, 由各个游戏自己定义
7 是附件还有一些变量, 比如向 environ 这种全局变量在这里就有说明
8 是系统管理用的命令, 这些命令只能由 root 使用, 如 ifconfifig
现在再给大家看一个查询的案例:
前面直接man printf,printf是C语言的函数,也是linux的命令,所以默认从1开始查,查到1就停止了,scanf不是命令,查到3停止,然后显示出来,现在man 3 printf:
6. 笔试选择题
这里先放一些笔试题,有点超纲,旨在让自己去找一些学习技巧和拓展学习。
1. 以下哪个命令输出Linux内核的版本信息( )
A.uname -r
B.vmstat
C.sar
D.stat
2. linux 2.6.* 内核默认支持的文件系统有哪些( )[多选]
A.ext3
B.ext2
C.ext4
D.xfs
E.ufs
3. linux查看cpu占用的命令是什么( )
A.top
B.netstat
C.free
D.df
4. 在Linux系统中, 为找到文件try_grep含有以a字母为行开头的内容, 可以使用命令( )
A.grep -E #$ try_grep
B.grep -E #a try_grep
C.grep -E ^$ try_grep
D.grep -E ^a try_grep
5. 在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是( )
A.-m
B.-d
C.-f
D.-p
6. 批量删除当前目录下后缀名为.c的文件。如a.c、b.c。( )[不定项选择题]
A.rm *.c
B.find . -name "*.c" -maxdepth 1 | xargs rm
C.find . -name "*.c" | xargs rm
D.以上都不正确
7. Linux 有三个查看文件的命令,若希望在查看文件内容过程中可以用光标上下移动来查看文件内容,应使用命令( )
A.cat
B.more
C.less
D.menu
答案及解析
- A
uname -r 查看linux内核版本信息
vmstat 报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息
sar 主要帮助我们掌握系统资源的使用情况,特别是内存和CPU的使用情况
stat 用于显示文件的状态信息
2. ABCDA 全称Linux extended file system, extfs,即Linux扩展文件系统,ext2为第二代
D XFS一种高性能的日志文件系统,2000年5月,Silicon Graphics以GNU通用公共许可证发布这套系统的源代码,之后被移植到Linux 内核上。XFS 特别擅长处理大文件,同时提供平滑的数据传输
E UFS是UNIX文件系统的简称,它来源于4.3Tahoe发行版中提供的BSD Fat Fast File System(FFS)系统,属于FFS的演化版本
3. AA top 查看cpu资源使用状态
B netstat 查看网络连接状态
C free 查看内存资源状态
D df 查看磁盘分区资源状态
4. Dgrep选项中,-E选项可以用来扩展选项为正则表达式;
表示匹配文件末尾,字符需要在之前表示以字符结尾 a$表示以a结尾
^表示匹配文件起始,字符需要在^之后表示以字符起始 ^a表示以a起始
5. DA -m 在创建目录的同时设置权限
B -d 没有这个选项
C -f 没有这个选项
D -p 在创建多层级目录的时候若上级目录不存在则创建
6. ABA rm *.c *通配符,表示匹配任意字符任意次
B find . -name "*.c" -maxdepth 1 | xargs rm
find . -name "*.c" -maxdepth 1 找到当前目录下.*结尾的文件,目录深度为1
xargs是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,用于很多不支持|管道来传递参数的命令
相当于将前边命令的执行结果,也就是查找到的文件名,传递给后边的rm指令进行删除
C find . -name "*.c" | xargs rm 没有进行深度控制,删除的不仅是当前目录下的文件,会将子目录下的文件也删除
7. CA cat 打印文件内容到终端显示
B more 分页显示文件内容,但是通常向上翻页不好使
C less 分页显示文件内容,可以灵活上下移动光标和翻页
D menu 没有这个指令(至少centos7上默认没有这个命令)
本篇完。
下一篇:零基础Linux_3(基本指令_下)目录/文件的复制移动查看打包+其它指令。