1.目录相关操作
特殊目录
. 代表此层目录
.. 代表上一层目录
– 前一个工作目录
~ 代表“当前用户”所在的主目录
~account 代表“account”这个用户的主目录
下面我们来谈谈几个常见的处理目录的命令:
cd 切换目录
pwd [-p] 显示当前目录
参数:-p 显示当前的路径,而非使用连接(link)的路径(显示连接源的路径)
mkdir [-mp] 新建一个新的目录
参数:-m 设置权限
-p 递归创建路径,没有的路径也会一并创建
rmdir [-p] 删除一个空目录
参数:-p 连同上一层“空”目录也一起删除
2.环境变量$PATH
查看环境变量 echo $PATH
PATH(一定是大写)这个变量内容是由一堆目录所组成,每个目录中间用冒号(:)来隔开,每个目录是有“顺序”之分的。
疑问:如果我有两个ls命令在不同的目录中,例如/usr/local/bin/ls 和 /bin/ls ,那么当我执行ls的时候,是哪个ls被执行?
答:echo $PATH,看哪个目录在前面,则哪个目录下的命令先被执行。因为Linux是按环境变量的配置顺序,查找命令的。
为了安全起见,建议 不要将“.”当前目录加入到PATH
3.文件相关操作
ls 参数很多,只需记住几个常用
参数:
-a 全部的文件(包括隐藏文件)
-A 全部的文件(不包括隐藏文件)
-d 只列出目录
-f 直接列出结果,而不进行排序(默认会以文件名排序)
-F 根据文件、目录等信息 给予附加数据结构,如:*可执行文件 / 目录 = socket文件 | FIFO文件
-h 将文件容量以较易读的方式(如:GB、KB等)列出来
-i 列出inode号码
-l 列出长数据串,包含文件的属性和权限等数据(常用)
-n 列出UID和GID,而非用户与用户组的名称
-r 将排序结果反向输出
-R 连同子目录内容一起列出
-S 以文件容量大小排序(大->小排序)
-t 以时间mtime排序(新->旧排序)
–full-time 显示完整时间
–time=(atime, ctime) 输出atime或ctime (atime被读取的时间,ctime文件权限和属性被修改的时间)
cp 源文件 目标文件
参数
-a 将所有的属性全部复制,相当于 -pdr 的意思
-d 若源文件为link file,则只复制link file的属性而非文件本身
-f 强制复制
-i 覆盖时,会提示
-l 硬连接的文件文件创建,而非复制文件本身
-p 连同文件属性一起复制
-r 递归复制
-s 复制成为软链接,创建”软链接”
-u 若目标文件 比 源文件 旧,才会复制
最后需要注意的,如果源文件有两个以上,则最后一个目的文件一定是“目录”
rm 文件
参数
-f 强制
-i 删除时提示
-r 递归
mv
参数
-f 强制
-i 相同文件已经存在时,提示
-u 若目标文件已经,且目标文件较新,才会移动文件
其他:
basename 路径 取得路径的文件名
dirname 路径 取得目录名
查看文件内容
cat 由第一行开始显示文件内容
tac 从最后一行开始显示
nl 显示的时候,顺便输出行号
more 一页页的显示,只可往下翻页
less 一页页的显示,可以上下翻页
head 只看头几行
tail 只看后几行
od 以二进制的方式读取文件
touch 修改文件时间或创建文件
linux下面都会记录许多的时间参数,其中有3个主要的变动时间
mtime “内容数据”更新的时间
ctime “状态”更新的时间,权限和属性被更改了,都会更新这个时间
atime 当“该文件的内容被读取”时,就会更新这个时间
参数:
-a 仅修改访问时间
-c 仅修改文件的时间(包括atime、ctime、mtime),若该文件不存在则不创建新文件
-d 后面可以接欲修改的日期而不是当前的日期,也可以使用”–data=时间/日期”
-m 仅修改mtime
-t 后面可以接欲修改的时间而不是当前的时间,格式为 [YYYYMMDDhhmm]
注:
touch -m 文件 会改变mtime、ctime
touch -c 文件 会改变mtime、ctime、atime
umask 文件默认权限
umask 数字形态的权限分数,分数指的是“该默认值需要减掉的权限”
umask -S 符号类型的方式显示权限
文件隐藏属性chattr,lsattr
chattr [+-=] [ASacdistu] 文件或目录
参数就解析2个重要的,a和i
a 当设置a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设置这个属性。案例:log文件,只能追加内容,不能删除内容,就可以使用+a属性
i 它可以让一个文件“不能删除、不能改名、不能设置连接、不能修改数据”,即无法改动这个文件,对于系统安全性有相当大的作用,只有root才能设置这个属性
lsattr 显示文件的隐藏属性
参数
-a 将隐藏文件也显示出来
-d 如果接的是目录,仅列出目录本身的属性
-R 连同子目录的数据也一并列出来
对于文件的特殊权限SUID、SGID、SBIT,还不理解,暂时未做分析
file 查看文件类型
如果你想知道某个文件的基本数据,例如是属性ASCCII 或是 data文件,或者是binary,且其中有没有使用到动态函数库等等的信息,就可以利用file这个命令来查看。
5.查找文件
which [-a] 命令名
查询脚本文件名 -a 将所有在PATH环境变量中可以找到的命令都列出来
疑问:为什么cd这个命令无法被找到呢?
答:因为cd是bash内置的命令
whereis [-bmsu] 文件
参数
-b 只找二进制格式的文件
-m 只找在说明文件manual 路径下的文件
-s 只找source 源文件
-u 查找不在上述三个选项当中的其他特殊文件
locate [-ir] keyword
查找包含keyword 的文件
参数
-i 忽略大小写的差异
-r 后面可接正则表达式的显示方式
通常find不是很常用,因为速度慢。通常我们都是先使用whereis 或 locate 来检查,如果真的找不到了,才用find来查找。
因为whereis 和 locate 是利用数据库来查找数据,所以相当快速,而且并没有实际查询硬盘,比较节省时间。
这个数据库保存系统内的所有文件信息,默认是每天创建一次,如需更新这个数据库,可以使用命令 updatedb
find [path] [option] 很强大的命令,这里只简单的介绍常用的
参数
-user name 查找name用户的文件
-group name 查找属于name组的文件
-name filename
6.权限与命令间的关系(极重要)
1.让用户进入某个目录,基本权限x
2.用户在某个目录可以读取文件,基本权限xr
3.用户可以修改一个文件,基本权限:文件rw,文件所在目录x
4.用户可以创建一个文件,基本权限:目录wx
5.用户进入某个目录并执该目录下的某个命令,基本权限:文件x,目录x