提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
在很多资料中,学习linux的重要任务之一就是学会对文件和目录进行管理。
我认为我们要在脑海里树立“Linux下一切皆为文件”的思想,毕竟这也是一个事实。所以对文件和目录进行管理是必须的。
下面是在FHS标准下的linux文件的部分
FHS定义了两层规范,
第一层是, / 下面的各个目录应该要放什么文件数据.
第二层是,针对/usr及/var这两个目录的子目录来定义。
当使用root用户登录后,我们开始能编辑指令的地方,前面会出现以下内容。
这个内容是Linux的系统提示符,可以通过提示符了解到一些信息。
系统提示符
1.[]和@是分隔符,没有什么含义
2.root代表我当前所登录的是root用户
3.VM-0-2-centos代表当前系统的简写主机名,不难看出我所使用的版本是centos
4.’~‘的位置,代表当前所在的目录,~的含义是家目录。
5.方括号后面的’#‘的位置,标识了此时登录的用户是普通用户还是
root用户,’#‘代表此时是root用户,’$‘代表此时是普通用户
上面有提到家目录,家目录又可以称为主目录。
这个目录在哪里?是哪一个呢?
XXX是用户名。当我们登录后所在的位置就是家目录。
pwd可以显示当前所在的位置,YDY是我linux下的一个普通用户。
了解了系统提示符后,再去看界面,就不会显得一头雾水了。现在来看看指令的基本格式,指令的基本格式大致是这样的:
当然,你也可以选择不写选项或者参数,那么将只会执行一些基本的功能。
功能:对目录,列出该目录下的目录及文件。对文件,列出文件名或其他信息。
【选项】
-a:列出文件下的所有文件,包含.
和..
文件。
一个点的含义:当前目录
两个点的含义:上一级目录
-d:只显示当前目录,而不是显示下一级目录及文件。
-R:列出当前目录下的所有目录及文件
其他选项自行测试
【-i】 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件
【-k】以 k 字节的形式表示文件的大小。ls –alk 指定文件
【-l】列出文件的详细信息。
【-n】 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
【-F】在每个文件名后附上一个字符以说明该文件的类型
-“*”表示可执行的普通文件;
“/”表示目录;
“@”表示符号链接;
“|”表示FIFOs;
“=”表示套接字(sockets)。(目录类型识别)
【-r 】对目录反向排序。
【-t 】以时间排序。
【-1】 一行只输出一个文件。
pwd的功能:显示当前用户、当前所在的路径。
这个指令没什么选项。
它以绝对路径的方式显示,绝对路径我在这里没有解释,因为文章排版的问题,我放在了 cd指令
。
不知道“linux下一切皆为文件”是否已经在你的脑海里根深蒂固·。
实际上,指令也是linux下的文件,是可执行的文件。
而which指令,可以查看特定指令的系统路径
当使用which指令查看ls和ll指令的系统路径时,会发现一个惊讶的事情
alias的中文意思是:别名。
上面的信息意味着ls
是ls --color=auto
的别名,ll
是ls -l --color=auto
的别名。
这说明了ll
指令其实是在ls基础功能下,封装了-l
选项。
ll指令功能:以列表形式列出目录下的目录以及文件。
在了解cd指令前,要提到两个术语:绝对路径、相对路径
这两个术语解答了两个问题:
你或许对这两个问题感到鄙夷,但是对文件和目录进行管理,首先就要解决它们,通过这两个问题可以进行定位文件。
绝对路径:通过根目录到所需目录或文件的路径
相对路径:通过其他目录或文件到所需目录或文件的路径
绝对路径,具有唯一性,也就是只有一条路径。而相对路径不具备唯一性,它具有相对性,指相对于用户当前所在目录来说。
cd指令的功能,切换当前用户所在目录。
使用相对路径和绝对路径进行切换目录
注意:仅仅只能切换到目录,不能切换到文件,否则会提示不是一个目录。
可是我切换的时候,怎么知道这是一个目录还是文件呢?
来看这一种情况:cd已经切换到根目录时,再cd ..
又会擦出怎样的火花呢?
经过测试,发现回退到根目录时,再回退,发现还是处在根目录。
不清楚你是否认真地看了我的这篇文章,在前面我解释了一些代表某某目录的符号。
如果你已经看了,那么就当温习吧
~ :家目录、或称主目录
. :用户当前所在目录
.. :用户当前所在目录的上一级目录
- :最近一次访问的目录
不过我在前面好像没有解释"-"
作为补偿,我帮你测试了,嘿嘿
这两个指令我选择一起介绍。
stat指令功能:查看文件或者目录的各种属性。
在文件或者目录的后面可以发现有Access、Modify、Change.这代表什么含义?
写上面这个的时候,还没有测试stat可以显示目录的各种属性,所以只写了文件的。如果显示目录的属性,这三个代表的含义是一样的。
【touch指令】
touch指令的功能:
-a
:修改Access、Change时间,和它等效的选项有:–time=access、–time=use、–time=atime-c
:不创建任何文件-m
:修改Modify、Change时间,和它等效的选项有:–time=modify、–time=mtime-f
:这个参数会忽略不处理-t
:使用指定的时间-d
:使用指定的时间-d
选项,可以使用字符串指定当日的某个时间,这个时间将作为Access和Modify时间。使用格式为:touch -d "时间字符串 文件或目录"
touch --date="时间字符串" 文件或目录
格式:
基本功能:在当前的目录下新建一个空目录。
【常用选项】
mkdir
指令可以新建一个目录,而rmdir则可以删除一个目录。
格式:
功能:删除一个空目录。
【常用选项】
-p
:如果子目录删除后,它的父目录也变成了空目录,那么就会把父目录一起删掉。rmdir只可以删除空目录,而rm即可以删除目录,也可以删除文件。
格式:
功能:删除文件或者目录。
【常用选项】
-r
:删除目录及该目录下的所有目录及文件-f
: 即使文件属性为只读(即写保护),亦直接删除,不需要系统提示-i
:删除文件或者目录之前,逐一进行询问有些指令、函数等我们是不可能完全记住的,反正我是不能的。所以linux提供了手册,如果你忘记了或者不了解,可以通过查询手册。
查询手册的指令为:man
格式:
例如:
[YDY@VM-0-2-centos test_commands]$ man touch
则会进入这个页面
这些东西这么多,如果存放在一个手册里不是非常地好,所以手册又被分成了几个部分。
1号手册:可执行程序或 shell 命令
2号手册:系统调用(内核提供的函数)
3号手册:库调用(程序库中的函数)
4号手册:特殊文件(通常在 /dev 中找到)
5号手册:文件格式和约定,例如 /etc/passwd
6号手册:游戏
7号手册:杂项(包括宏包和约定),例如 man(7)、groff(7)
8号手册:系统管理命令(通常仅适用于 root 用户)
9号手册:内核例程 [非标准]
【常用选项】
-k
:根据关键字搜索联机帮助-a
将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕n
:这个n就是手册号,指明在哪一个手册查找。查询的时候最好指明在哪个手册查询,否则会默认在1号手册查询。
就比如:
[YDY@VM-0-2-centos ~]$ man printf //用户命令
[YDY@VM-0-2-centos ~]$ man 3 printf //库函数
如果你通过man没有查出来,有可能是在linux上没有这个,还有可能是没有安装man-pages,需要获得root的权限,这里选择切换到root用户进行安装
安装指令:yum install -y man-pages
在这之前有必要引入两个术语:内部命令、外部命令
内部命令:又可称为内建命令。它是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统加载运行时shell就被加载并驻留在系统内存中。
外部命令:linux系统中的实用程序部分,在系统加载时不随系统一起被加载到内存中,而是在需要时才将其调用内存。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell程序控制的。
使用type
指令即可查询某个指令为内建命令还是外部命令。
type
help指令,根据是查询内部命令还是外部命令,分出两种格式。
格式一用于查询内建命令;格式二用于查询外部命令。
如果你已经能够使用help查询内容,那么关于help的选项请自行找出来吧。
cp
指令用于拷贝文件或目录到另一个文件或目录
-f
:强行复制文件或目录, 不论目的文件或目录是否已经存在。等效选项:–force-i
:覆盖文件之前先询问用户。等效选项:或 --force-r
递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理-R
:递归处理,将指定目录下的文件及子目录一并处理。等效选项:–force目标文件/目录存在时,为移动文件。
目标文件/目录不存在时,为重命名。
-f
:force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖-i
:若目标文件 (destination) 已经存在时,就会询问是否覆盖这两个指令,默认输出到标准输出流上,也就是显示器上。
【cat的常用选项】
-b
:对非空输出行编号-n
:对输出的所有行编号-s
: 不输出多行空行【拓展】
cat默认是输出到标准输出流,也就是显示器上。
那可不可以将一个文件输出到另一个文件里。当然是可以的!
可以使用重定向
重定向有三类:
当遇到一个文件内容很多时,一输出就很可能占满整个屏幕,非常的不方便,more和less就替我们处理了这一大烦心事。
more
用于查看文件内容,只输出能够在屏幕上显示的(所谓的分页显示),但是缺点,就是它只能够看接下来的文件内容(往下翻页)。
按空格键继续,
q
或者ctrl
+c
退出。
按 ‘h’ 获取说明。
【常用选项】
-d
:在底部显示帮助-s
:将多个连续的空格压缩为一个显示+n
:从第n行开始显示less
用于分页显示,和more是一样的功能,但是less还支持向上翻页显示,所以相较于more而言,翻页查看更推荐less.
【常用选项】
-i
忽略搜索时的大小写-N
显示每行的行号/
字符串:向下搜索“字符串”的功能?
字符串:向上搜索“字符串”的功能n
:重复前一个搜索(与 / 或 ? 有关)N
:反向重复前一个搜索(与 / 或 ? 有关)按空格键继续,
q
或者ctrl
+c
退出。
按 ‘h’ 获取说明。
head
功能:head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
【常用选项】
-n
:从文件开头打印n行tail和head差不多
可以通过head打印开头的n行,也可以打印末尾的行,但是我偏偏想打印中间的,行不行呢?
当然可以啊!
思路是:取开头的n行放入一个临时文件,在使用tail取末尾的m行,这样就可以取到m-n行的文件内容了。
我要引入一个东西:管道|
。
生活当中,管道是做什么的呢?它是用来运输资源的。
而C++里的管道同样也是用来运输资源的。
这样就不用创建一个临时文件来保存,直接就可以输出在标准输出流,还可以输出到其他文件里。
date 指定格式显示时间: date +%Y:%m:%d
%Y的解释在下面列表。
date 用法:date [OPTION]… [+FORMAT]
1.在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下
%H : 小时(00…23)
%M : 分钟(00…59)
%S : 秒(00…61)
%X : 相当于 %H:%M:%S
%d : 日 (01…31)
%m : 月份 (01…12)
%Y : 完整年份 (0000…9999)
%F : 相当于 %Y-%m-%d
2.在设定时间方面
date -s //设置当前时间,只有root权限才能设置,其他只能查看。
date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s “01:01:01 2008-05-23″ //这样可以设置全部时间
date -s “01:01:01 20080523″ //这样可以设置全部时间
date -s “2008-05-23 01:01:01″ //这样可以设置全部时间
date -s “20080523 01:01:01″ //这样可以设置全部时间
3.时间戳
时间->时间戳:date +%s
时间戳->时间:date -d@1508749502
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒
格式:cal 选项
功能:查看日历(公历)
如果没有指定选项,则默认查看当月的日历,并且以周六为每周的第一天
【常用选项】
-1
:查看当月的日历。-3
:查看前一个月、当月、后一个月的日历-s
:以星期六作为每周的第一天-m
:以星期天作为每周的第一天-j
:按是每年的第几天显示-y
:显示一年的时间未完待更新……