6.1 目录与路径
cd 切换目录 change directory
pwd 显示当前目录 -P 真实目录非连接目录 print working directory
mkdir 建立一个新目录
rmdir 删除空目录
记不得具体目录名可以tab查
建立目录一层一层建立(没有上一层会报错)或者
mkdir -p ./test1/test2/test3/test4 逐层建立目录
mkdir -m 711 指定目录权限 否则umask
删除目录rmdir
rmdir [-p] 目录名称,-p逐级删除,但是只能删除空目录
$PATH是查找命令的地方,每个用户能用的命令不一样,执行以排在前面的路径里那个为准
echo $PATH 显示查找路径
PATH="${PATH}:/root" 增加路径
本目录不要放到PATH里,印其安全问题
6.2 文件与目录管理
查看
ls [-aAdfFhilnrRSt] [color设置time设置] 文件名 默认本目录
-a 全部文件
-d 目录本身
-l 详细信息
-- full-time 详细时间输出
-- time={atime,ctime} 显示时间是改变属性时间还是access时间
复制
cp [-adfilprsu] 源文件 目标文件
-a 相当于 -dr --preserve=all
-d 若源文件为链接文件,复制链接文件的属性而非源文件
-i 目标文件已经存在会问是不是要覆盖
-p 带属性复制(备份常用默认属性不用这个)
-r 递归复制
-l 硬连接
-s 符号链接 快捷方式
符号链接:file->sourse
硬链接 -l 属性符号与连接前属性权限一样 link数(ls -l 查)变多与inode有关
复制时必须要有读权限
删除
rm [-fir] 文件或目录
-f 强制执行
-I 询问是否操作
-r 递归删除
通配符 | 含义 | 实例 |
---|---|---|
* | 匹配 0 或多个字符 | a*b a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。 |
? | 匹配任意一个字符 | a?b a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。 |
[list] | 匹配 list 中的任意单一字符 | a[xyz]b a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。 |
[!list]或[^list] | 匹配 除list 中的任意单一字符 | a[!0-9]b a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。 |
[c1-c2] | 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] | a[0-9]b 0与9之间必须也只能有一个字符 如a0b, a1b... a9b。 |
[!c1-c2]或[^c1-c2] | 匹配不在c1-c2的任意字符 | a[!0-9]b 如acb adb |
{string1,string2,...} | 匹配 sring1 或 string2 (或更多)其一字符串 | a{abc,xyz,123}b 列出aabcb,axyzb,a123b |
带-的文件名避免被当作参数 用./
移动 / 重命名
mv [-fiu] source destination 同cp
重命名rename还可以使用正则表达式
rename [options] expression replacement file...
Given the files foo1, ..., foo9, foo10, ..., foo278, the commands
rename foo foo0 foo?
rename foo foo0 foo??
will turn them into foo001, ..., foo009, foo010, ..., foo278. And
rename .htm .html *.htm
will fix the extension of your html files.
获取路径名 / 文件名
basename 路径
dirname 路径
6.3 文件内容查看
内容查看
cat [-AbEnTv]
-n 打印行号
还有些打印特殊字符的
tac 反向打印
做显示设计,行号数量
nl -b a -n rz -w 3 \m #空行也列出行号 行号在最右方显示补0 共3位数
翻页查看
more 文件名
less 文件名
more
空格:翻页
回车:下一行
/字符串 查找
:f:显示行数
q:离开
less
pageup/pagedown
/向下搜索
?向上搜索
n重复搜索
N反向重复
数据截取
head -n 20 file.txt
tail -n 20 file.txt
tail -f 20 varfile.txt #不断有数据写入的
使用管道,上一个命令出来的数据作为输入被下一个命令执行
cat -n file.txt | head -n 20 | tail -n 10
非纯文本
od [-t type] 文件
a 默认字符
c ascii字符
dfox 十进制、浮点数、八、十六进制
echo password | od -t oCc
修改文件与创建新文件
同一行执行多个命令,中间用 ;
隔开
touch命令
touch filename.txt #新建文件,时间设为当前
touch -d "2 days ago" file.txt #修改时间为2天前(atime/mtime)
--time= | 含义 |
---|---|
atime | 读取时间 |
ctime | 状态改变时间:权限、属性 |
mtime | 修改时间 |
6.4 文件与目录的默认权限与隐藏权限
- linux传统文件系统为ext2, ext3, ext4 可用chattr lsattr来设置和查看隐藏属性
- xfs (centos7) 只支持部分属性
文件或目录默认权限:umask
查看
umask 以数字形式显示
umask -S 以文字形式显示
- 每位含义:0002 四位数,第一位特殊权限,第二位 - 第四位对应 owner group other 拿掉的权限
- 文件与目录不同:文件默认最大666,拿掉执行权限(不需要);目录默认最大777,需要执行
e.g. 0002 文件 -rw-rw-r-- 目录 drwxrwxr-x
文件隐藏属性
chattr #修改隐藏属性
e.g.
chattr +i #添加i属性
chattr -i #去掉i属性
lsattr #查看隐藏属性
常用
i 不能删除改名设置连接新增内容,仅限root
a 只能增加数据不能删除或修改,常用于log,仅限root
隐藏属性的设置通常与系统安全性有关
文件特殊权限:SUID、SGID、SBIT
如若文件拥有者不具备设置SUID、SGID、SBIT位置的原有属性,则设置后对应位置会变成大写的ST,没有任何作用
set UID
特征:文件拥有者的x属性变为s属性
- 仅对二进制程序有效
- 执行者有x权限
- 该权限在执行的过程中有效
- 执行者具有拥有者的权限
e.g. root有/etc/shadow的权限,这个里面存储密码,普通用户不能使用cat命令读取,因为cat没有s权限,你还是以普通用户去操作/etc/shadow。但是普通用户可以改自己的密码,因为执行/usr/bin/passwd会暂时获得root权限
Set GID
特征:可以针对文件或目录设置,用户组的x权限变为s
文件:
- 仅限二进制程序
- 执行者有x权限
- 执行者会暂时获得用户组支持
目录:
- 用户建立的新文件的用户组与此目录的用户组相同
Sticky Bit
特征:只针对目录有效,用户有wx权限,所有人的x变为t
e.g. /tmp
下用户只能对自己建立的文件或目录进行删除、更名、移动等操作,但无法删除他人文件。root可以操作全部文件
设置
chmod 4755 filename
chmod u=rwxs,go=x filename
SUID - 4
SGID - 2
SBIT - 1
观察文件类型
用途:文件类型(ASCII/二进制),动态链接库信息,压缩方式,兼容硬件平台
6.5 命令与文件查找
用途:改某个软件配置,不同发行版配置放在哪不一定,但是配置文件名一定,可以通过配置文件名找找配置文件放在哪
脚本文件的查找
which 命令
-a 列出所有而不仅仅是第一个
type 命令
- case 1: 列出命令地址
- case 2: 列出命令别名和地址
- case 3: 遇到bash内嵌指令找不到,因为它本质上是从path路径中查找
文件的查找
whereis(特定目录)和locate(数据库)快且常用,找不到再用find,慢但检查文件系统,全
whereis [-bmsu] 文件名或目录
可以指定找可执行文件或说明文件
locate [-iclSr] keyword
查的多,centos默认每天更新,root可updatedb更新
find [PATH] [option] [action]
find ~/Desktop -mtime +4
option:
与时间有关的 -atime -mtime -ctime -newer
与用户名有关的 -uid -gid -usr -group -nouser -nogroup
与文件权限/名称有关的 -name (正则表达式/可精确查找)+/-size -type(-type fbcdlsp)
-perm mode / -mode / /mode 精确,全部包含,有即可
-nouser -nogroup的解释:用户被删除,编译程序
额外操作
find /usr/bin /usr/sbin -perm 7000 -exec ls -l {} \;
#{}是-exec前部分找到的内容";"序号被"\"转义