写在前面
本笔记仅是在学习《鸟哥的Linux私房菜-基础篇》的一些整理和归纳。
目录与路径
目录相关操作
一些特殊的目录:
. 代表当前目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表[当前用户]的home目录
~account 代表account这个用户的home目录
常用处理目录的指令:
cd 变换目录
pwd 显示当前目录
mkdir 建立一个新目录
rmdir 删除一个空的目录
文件与目录管理
文件与目录管理一般涉及的包括:显示属性、拷贝、删除文件、移动文件及目录
常用指令:
-
ls:文件与目录的检视
-
cp:复制文件或目录,常用参数如下:
- -a:复制所有信息
- -d:若来源文件是链接文件,则只复制链接文件属性
- -f:强制覆盖
- -i:交互模式
- -p:连同文件属性一同复制(权限、用户、时间)
- -r:递归复制,用于目录
- -s:复制为链接文件,即快捷方式
-
rm:移除文件或目录,常用参数如下:
- -f:强制删除
- -i:互动模式,删除前询问
- -r:递归删除,删除目录下所有文件
-
mv:移动文件或目录,或更名
- -u:若目标文件已存在,且比源文件新时,才会更新
-
basename:取得最后文档名
-
dirname:取得路径名
文件内容查阅
- cat:从第一行开始显示文件内容,常用参数:
- -n:打印行号
- tac:从最后一行开始显示文件内容
- nl:显示时,输出行号
- more:逐页显示文件内容,常用操作:
- Space:空格键,向下翻页
- Enter:向下翻一行
- /字符串:向下搜索[字符串]关键字
- :f :like显示文件名以及当前行数
- q:退出
- b或[ctrl]+b:往回翻页
- less:与more类似,可向前翻页,常用操作:
- Space:空格键,向下翻动一页
- [pagedown]:向下翻动一页
- [pageup]:向上翻动一页
- /字符串:向下搜索
- ?字符串:向上搜索
- g:立即到达第一行
- G:立即到达最后一行
- q:退出
- head:只看前几行
- tail:只看尾几行
- od:以二进制的方式读取文件内容
文件目录与目录的默认权限、隐藏权限
文件预设权限:umask
-
文件基本权限:读®、写(w)、执行(x)
-
文件基本类型:目录(d)、文件(-)、连接档(l)
-
修改属性方法:改变所属群组(chgrp)、改变拥有者(chown)、改变权限(chmod)
在Linux系统中创建和改变任何一个文件或目录的属性都有一个默认的权限分配,默认分配与umask有关
[dk@bogon ~]$ umask
0002 <=后三位表示对u、g、o的权限相应位做减法的十进制数
[dk@bogon ~]$ umask -S
u=rwx,g=rwx,o=rx <=表示当前的默认权限分配情况
文件隐藏属性:chattr、lsattr
除了基本属性外,在Ext2/Ext3/Ext4的Linux传统文件系统中,能够设置一部分隐藏属性,使用chattr可以设置隐藏属性,使用lsattr可以查看隐藏属性。
格式 : chattr [参数] 文件或目录
常用参数:
-A : 不纪录atime的改变,减少部分磁盘I/O处理
-a : 只能在添加模式下打开用于写入,只有root能够设置和清除该属性
-c : 文件在磁盘上由内核自动进行压缩处理,读取时未压缩,写入时进行压缩。
-d : 不能进行备份
-i : 不能进行修改,只有root能够设置和清除该属性
-s : 清除数据块,并写回磁盘,无法恢复文件
-S : 同步修改
-u : 保护文件内容,可恢复文件
格式 : lsattr [参数] 文件或目录
常用参数:
-a : 将隐藏文件的属性也显示
-d : 如果是目录,仅列出目录本身的属性
-R : 递归显示
特殊文件权限:SUID、SGID、SBIT
Set UID
- SUID权限仅对于二进制程序有效
- 执行者对于该程序需要具有可执行权限
- 本权限仅在执行该程序的过程中有效
- 执行者将具有该程序拥有者的权限
Set GID
-
SGID对二进制程序有效,同时也对目录有效
-
执行者对于该程序需要具有可执行的权限
-
执行者在执行的过程中将获得该程序群组的权限
Sticky Bit
-
SBIT权限仅对目录有效
-
执行者需对该目录具有写入和执行的权限
-
用户在目录下建立文件和目录时,仅有执行者与root有权删除
将当前目录加上SBIT权限后,当前具有wx权限的用户,仅能对自己建立的文件进行删除/更名/移动,无法删除他人文件。
SUID/SGID/SBIT权限设定
数字代表:
-
4:SUID
-
2:SGID
-
1:SBIT
chmod 4755 filename <=加入SUID权限
观察文件类型:file
查看文件基本数据和类型
[dk@bogon ~]$ file ~
/home/dk: directory
[dk@bogon ~]$ file ~/.bashrc
/home/dk/.bashrc: ASCII text
[dk@bogon ~]$ file /usr/bin/passwd
/usr/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=1e5735bf7b317e60bcb907f1989951f6abd50e8d, stripped
指令与文件的搜寻
脚本文件名的搜寻
- which : 在PATH目录下,寻找执行文件的文件名
格式 : which [-a] command
[dk@bogon ~]$ which ifconfig
/usr/sbin/ifconfig
文件档名的搜寻
- whereis : 在一些特定目录中寻找文件文件名
格式 : whereis [参数] 文件或目录名
选项与参数:
-l : 列出whereis会查询的几个主要目录
-b : 只查询二进制文件
-m : 只查找在manual路径下的文件
-s : 只查找source来源文件
-u : 查找不在上述三个项当中的其他特殊文件
[dk@bogon ~]$ whereis ifconfig
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
- locate : 在数据库汇中,根据关键字检索文件,更新数据库指令为updatedb
格式 : locate [参数] keyword
选项与参数:
-i : 忽略大小写
-c : 不输出文件名,仅计算文件数
-l : 控制输出行数
-S : 输出locate所使用的的数据库文件相关信息
-r : 使用正则表达式
[dk@bogon ~]$ locate -l 3 ifconfig
/usr/libexec/hypervkvpd/hv_set_ifconfig
/usr/sbin/ifconfig
/usr/sbin/pifconfig
- find : 功能强大的查询,直接搜索硬盘,可以用于查找某个时间段的文件。
![image_20200212205927](/media/divingkitten/Works/Linux/鸟哥私房菜学习笔记/img/image_20200212205927.png)格式: find [PATH] [参数] [参数/文件名/表达式]
选项与参数:
1.与-mtime有关的参数:
-mtime n : n为数字,表示在n天之前的某天,当日内所有被修改过的文件
-mtime +n : n为数字,表示修改时间于当前时间大于n天,所有被修改过的文件
-mtime -n : n为数字,表示修改时间于当前时间小于或等于n天内,所有被修改过的文件
-newer file : file为文件名,查找比file更新的文件
[dk@bogon ~]$ find / mtime 0
[dk@bogon ~]$ find / mtime -newer test.txt
2. 与使用者或组名有关的参数:
-uid n : n为数字,UID号
-gid n : n位数字,GID号
-user name : 使用者账号名
-group name : 组名
-nouser : 文件拥有者不存在/etc/passwd的用户(当删除用户后,遗留的文件)
-nogroup : 文件拥有组不存在于/etc/group的文件(自行安装软件时,易出现)
3.与文件权限及名称相关的参数:
-name filename : 文件名
-size [+-]SIZE : 搜索比SIZE大或小的文件,c表示byte
-type TYPE : 文件(f),装置文件(b,c),目录(d),连结当(l)等
-perm -mode : 所有包含当前mode权限的文件
-perm /mode : 包含任意mode权限的文件
[dk@bogon ~]$ find / -perm -0700
[dk@bogon ~]$ find / -type l
4.额外的操作:
-exec command : command为其他指令,用于处理搜索结果
[dk@bogon ~]$ find /home/dk -type f -exec ls -l {} \;
对于与时间有关参数(mtime等)后接的数字n,根据以下图片能够形象的理解。
对于带有额外操作的时候,指令可以理解为讲find指令放入到{}进行了,然后对查找到的结果作为而外指令的参数,; 则是表示结束符号。