1.目录与路径
1.1 目录的相关操作
1.cd:变换(切换)目录
* cd ~ 或者是 cd
- 表示回到自己的家目录,也就是/root的目录
* cd ..
- 表示回到上一层的目录
2.pwd:查看当前目录
3.mkdir:创建一个空的目录
* mkdir test1
* mkdir test1/test2/test3
- 若是test3前两个目录不存在,会报错,要先创建这个目录
* mkdir -p test1/test2/test3
- 加入了-p,可以自行帮你创建多层目录
* mkdir -m 711 test2
- 加上-m来强制设定文件权限
4.rmdir:删除一个空的目录
* rmdir test1
* rmdir test1
- 此时会报错,因为此目录里有文件或目录
* rmdir -p test1/test2/test3
- 连同上层或空的目录均一起删除
* 注意:此命令仅仅只能删除空的目录哦
5.ls -ld test*:查看目录的权限
6.rm -rf:删除文件或文件目录,此命令需小心使用,若是没有注意可能会导致连系统都删除
7.特殊目录:
* .代表此层目录
* ..代表上一层目录
* -代表前一个工作目录
* ~代表[目前用户身份]所在的家目录
1.2 关于执行文件路径的变量:$PATH
1.哪些目录被定义出来:echo $PATH
2.不同身份使用者预设的PATH不同,默认能够随意执行的指令也不同
3.PATH是可以修改的
4.使用绝对路径或相对路径直接某个指令的文件名来执行,会比搜寻PATH来的正确
5.指令应该要放置到正确的目录下,执行才会比较方便
2.文件与目录管理
2.1 文件与目录的检视:ls
1.ls:文件与目录的检视
* ls -a:查看全部的文件,连同隐藏文件(开头为.的文件)一起列出来【比较常用】
* ls -A:查看全部的文件,连同隐藏文件,但不包括.与..这两个目录
* ls -d:仅仅列出目录本身,而不是列出目录内的文件数据
* ls -f:直接列出结果,而不进行排序(ls预设会以目录名排序)
* ls -F:根据文件、目录等信息,给予附加数据结构
- * 代表可执行文件
- / 代表目录
- = 代表socket文件
- I 代表FIFO文件
* ls -h:将文件以人类较易读的方式(如GB KB等等)列出来
* ls -l:长数据串行出,包含文件的属性与权限等等【常用】
* ls -r:将排序结果反向输出。例如原本是从小到大,反向则由大到小
* ls -R:连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来
* ls -S:以文件容量大小排序,而不是用原本的档名排序
* ls -t:依据时间排序,而不是用原档名
* --color=never:不要依据文件特性给予颜色显示
* --color=always:显示颜色
* --color=auto:让系统自行依据设定来判断是否给予颜色
* --full-time:完整时间模式(年月日时分)输出
* --time={atime,ctime}:输出access时间或改变权限属性时间(ctime)而非内容变更时间(modification time)
* 案例
- 1.将目录下的所有文件列出来(包含属性与隐藏文件)
& ls -al
- 2.承1,不显示颜色,但在文件名末显示出该文件名代表的类型
& ls -alF --color=never
- 3.完整的呈现文件的修改时间
& ls -al --full-time
* 需要注意的点
- 目录文件名是以深蓝色显示
- ls -al 仅列出目前短格式的时间,有时不会列出年份
2.linux系统中,这个ls指令是最常被执行的指令
2.2 复制、删除与移动:cp,rm,mv
1.cp:复制
cp 来源文件 目标文件
cp -d:若来源文件为链接文件的属性,则复制链接文件属性而非文件本身
cp -f:强制的意思,若目标文件已经存在且无法开启,则移除后在尝试一次
cp -i:若目标文件已经存在时,在覆盖时会先询问动作的进行【常用】
cp -p:连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性【备份常用】
cp -r:递归持续复制,用于目录的复制行为【常用】
2.rm:删除
rm -f:就是强制的意思,忽略不存在的文件,不会出现警告讯息
rm -i:互动模式,在删除前会询问使用者是否动作
rm -r:递归删除,最常用在目录删除,这是危险的操作,稍有不慎,系统也会进行删除
3.mv:移动
mv 来源文件 目标文件
mv -f:就是强制的意思,如果目标文件已经存在,不会询问而直接覆盖
mv -i:若目标文件已经存在是,就会询问是否覆盖
mv -u:若目标文件已经存在,且来源文件比较新,才会更新
3.文件内容查阅
3.1 直接检视文件内容
1.cat:由第一行开始显示文件内容
若是文件比较短可以使用cat查阅全文
cat -A 文件名:可列出一些特殊字符而不是空白而已
cat -b 文件名:列出行号,仅针对非空白行做行号显示,空白行不标行号
cat -E 文件名:将结尾的断行字符$显示出来
cat -n 文件名:打印出行号,连同空白行也会有行号
cat -T 文件名:将【tab】按键以^I显示出来
cat -v 文件名:列出一些看不出来的特殊字符
2.tac:从最后一行开始显示,是cat倒着写
3.nl:显示的时候,将行号一起输出
nl [-bnw] 文件
nl -b:指定行号指定方式,主要有两种
-b a:表示不论是否为空行,也同样列出行号(类似cat -n)
-b t:如果有空行,空的那一行不要列出行号(默认值)
nl -n:列出行号表示的方法,主要有三种
-n ln:行号在屏幕的最左方显示
-n rn:行号在自己字段的最右方显示,且不加0
-n rz:行号在自己字段的最右方显示,且加0
nl -w:行号字段的占用的字符数
3.2 可翻页检视
1.more:一页一页的显示文件内容
空格按键:代表向下翻一页
enter:代表向下翻一行
/字符串:代表在显示的内容中,向下搜寻字符串这个关键字
:f 立刻显示出文件名以及目前显示的行数
q:代表立刻离开more,不再显示该文件内容
b:代表往回翻页,不过这动作只对文件有用
2.less:与more类似,但是比more更好的是,这个可以往前翻页
空格按键:代表向下翻一页
【pagedown】:向下翻一页
【pageup】:向上翻一页
/字符串:代表在显示的内容中,向下搜寻字符串这个关键字
?字符串:代表在显示的内容中,向上搜寻字符串这个关键字
n:重复前一个搜寻(与/或?有关)
N:反向的重复前一个搜寻(与/或?有关)
g:前进到这个资料的第一行去
G:前进到这个数据的最后一行去
q:离开less这个程序
3.3 资料撷取
1.head:只看头几行
head -n:后面接数字,代表显示几行的意思
head -n 20 文件名
展示文件的前20行
2.tail:只看尾几行 默认情况是展示最后的十行
tail -n:后面接数字,代表显示几行的意思
tail -n 20 文件名
展示文件的后20行
tail -f:表示持续侦测后面所接的档名,要等到按下ctrl+c才会结束tail的侦测
3.4 非纯文本档:od
1.od:以二进制的方式读取文件内容
od [-t TYPE]文件
-t:后面可以接各种类型的输出
a:利用默认的字符来输出
c:使用ASCII字符来输出
d[size]:利用十进制来输出数据,每个整数占用size bytes
f[size]:利用浮点数来输出数据,每个整数占用size bytes
o[size]:利用八进制来输出数据,每个整数占用size bytes
x[size]:利用十六进制来输出数据,每个整数占用size bytes
2.利用这个指令,可以将data file或者是bunary file的内容数据给他读出来
3.5 修改文件时间或建置新档:touch
1.三个主要的变动时间,三个时间的意义是什么呢?
modification time(mtime):该文件的[内容数据变更时],就会更新这个时间。内容数据指的是文件的内容而不是文件的属性或权限
status time(ctime):当该文件的[状态]改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间
access time(atime):当[该文件的内容被取用]时,就会更新这个读取时间,距离来说,我们使用cat去读取文件,就会更新这个文件的atime
2.默认的情况下,ls显示出来的是该文件的mtime,也就是这个文件的内容上次被更改的时间
3.修改文件的时间:touch
touch [-acdmt] 文件
-a:仅修订access time
-c:仅修改文件的时间,若该文件不存在则不建立新文件
-d:后面可以接欲修订的日期而不用目前的时间,也可以使用--date=“时间或日期”
-m:仅修改mtime
-t:后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]
案例
新建一个文件并观察时间
touch testtouch
找到一个文件,假设复制完全的属性,并检查其时间
date; ll redis.conf ;ll --time=atime redis.conf; ll --time=ctime redis.conf
修改文件,将日期调整为两天前
touch -d "2 days ago" redis.conf
修改的时候ctime不会跟着改变的哦
ctime记录的是目前的时间
最常被使用的情况
建立一个空的文件
将某个文件日期修订为目前(mtime与atime)
4.文件与目录的默认权限与隐藏权限
1.修改目录属性:chown -R root:root /tmp/test
4.1 文件预设权限:umask
1.umask就是指定:目前用户在建立文件或目录时候的权限默认值
2.查阅的方式有两种:
* 一种直接输入umask,就可以看到数字形态的权限设定分数
- 四组数字,第一组是特殊权限使用的,可以不用管
* 一种则是加入-S这个选项,就会以符号类型的方式来显示出权限了
3.umask的分数指的是该默认值需要减掉的权限
* 022 表示user没有拿掉任何权限,不过group和others的权限拿掉了2(也就是w的这个权限)
4.修改umask:umask 002
4.2 观察文件类型:file
1.想要知道某个文件的基本数据:file 文件名
5.指令与文件的搜寻
5.1 脚本文件的搜寻
1.which [-a] command
-a:将所有由PATH目录中可以找到的指令均列出,而不止第一个被找到的指令名称
which ifconfig
2.这个指令是根据[path]这个环境变量所规范的路径,去搜寻[执行档]的档名
5.2 文件档名的搜寻
1.whereis 文件或目录名
只查找特定的目录,没有全系统去查询
主要是针对/bin/sbin下的执行文档
选项和参数
-l:可以列出whereis会去查询的几个目录
-b:只找binary格式的文件
-m:只找在说明文件manual路径下的文件
-s:只找source来源文件
-u:搜寻不再上述三个项目当中的其他特殊文件
2.locate [-ir] 关键字
选项和参数
-i:忽略大小写差异
-c:不输出文档名,仅计算找到的文件数量
-l:仅输出几行的意思,例如输出五行则是 -l 5
-S:输出locate所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等
-r:后面可接正规表示法的显示方式
locate -l 5passwd
3.locate寻找数据的时候特别快,因为locate寻找的数据是由[已建立的数据库/var/lib/mlocate]里面的数据所搜寻到的
不用直接去硬盘当中存取数据
4.locate的限制:
* 经由数据库来搜寻的,而数据库的建立默认是每天执行一次
* 手动更新数据库:updatedb
- 此指令会去读取/etc/updatedb.conf这个配置文件的设定,然后在去硬盘里面进行搜寻文件名的动作,最后更新整个数据库
5.find [path] [参数]
选项和参数
与时间相关的参数
-mtime n:n为数字,意义在n天之前的一天之内被更改过内容的文件
-minte +n:列出在n天之前(不含n天本身)被更改过内容的文件档名
-mtime -n:列出在n天之内(不含n天本身)被更改过内容的文件档名
-newer file:file为一个存在的文件,列出比file还要新的文件档名
与使用者或组名相关的参数
-uid n:n为数字,这个数字是用户的账户id,即uid
-gid n:这个数字是组名的id即GID
-user name:name为使用者账号名称
-group name:name为组名
-nouser:寻找文件的拥有者不存在/etc/passwd的人
-nogroup:寻找文件的拥有群组不存在与/etc/group的文件
当自行安装软件,很可能该软件的属性当中并没有文件拥有者,这个时候是可能存在的,所以就可以用-nouser和-nogroup搜寻
与文件权限及名称有关的参数
-name filename:搜寻文件名为filename的文件
-size [+ -]SIZE:搜寻比size要大(+)或小(-)的文件
c:代表byte k:代表1024bytes
find / -size +50K
-type TYPE:搜寻文件类型为TYPE的,类型主要有一般正规文件(f),装置文件(b,c),目录(d),连结档(l),socket(s)及FIFO(p)等属性
-perm mode:搜寻文件权限刚好等于mode的文件,这个mode类似chmod的属性值
-perm -mode:搜寻文件权限必须要全部囊括mode的权限
-perm /mode:搜寻文件权限包含任一mode的权限
案例
与时间相关
1.将过去系统上面24小时内有更改过的内容(mtime)的文件列出
find / -mtime 0
2.寻找/etc底下的文件,如果文件日期比/etc/passwd新就列出
find /etc -newer /etc/passwd
与使用者或组名相关的
1.搜寻/home下属于root的文件
find /home -user root
2.搜寻系统中不属于任何人的文件
find / -nouser
与文件权限及名称有关的参数
1.找出文档名为passwd这个文件
find / -name passwd
2.找出文件名包含了passwd这个关键字的文件
find / -name "*passwd*"
3.找出/run目录下,文件类型为socket的档名有哪些
find /run -type s
4.搜寻文件中含有SGID SUID SBIT的属性
find / -perm /7000
5.找出系统中,大于1MB的文件
find / -size +1M