相对路径与绝对路径
绝对路径:一定由根目录/ 写起,例如:/usr/share/doc 这个目录
相对路径:写法『不是由/ 写起』,相对于目前工作目录的路径,若当前在/root目录下,而/root下有个git目录,git目录又有个test目录,现在想到这个test目录,使用 cd ./git/test(或cd git/test)
特殊目录:
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表当前用户的家目录
~account 代表 account 这个用户的家目录(account是个账号名称)
目录相关指令:
cd 变更目录
pwd 显示当前绝度路径(-P若当前目录是软链接,则显示实际目录的绝对路径,而不是软链接的绝对路径)
mkdir 创建目录(默认只能创建单层目录,-p创建多级目录,-m指定创建目录的权限)
rmdir 删除空目录
环境变量:
echo $var_name #显示该变量存储的实际值
PATH #该变量中存储的是主机中所有可执行文件所在路径(执行指令时可不用绝对路径)
更改环境变量PATH:
假如要将/opt/k8s/bin目录加入到变量PATH中
PATH="/opt/k8s/bin:${PATH}" #但这样只在当前会话中临时生效,可写入配置文件永久生效
echo ' PATH="/opt/k8s/bin:${PATH}" ' >> /etc/profile #针对整个系统均有效
souce /etc/profile #将上述配置导入环境中
echo ' PATH="/opt/k8s/bin:${PATH}" ' ~/ .bash_profile #仅针对当前用户生效
source ~/ .bash_profile
echo ' PATH="/opt/k8s/bin:${PATH}" ' ~/ .bashrc #仅针对当前用户生效
source ~/ .bashrc
复制、删除、移动文件:
cp复制文件:
cp [OPTION] [-T] SOURCE DEST #复制普通文件(-T将DEST当做普通文件)
cp [OPTION] SOURCE... DIRECTORY #将多个文件复制到后面的目录中
cp [OPTION] -t DIRECTORY SOURCE... #同上,但使用-t将目录放在前面
-a 等同于-dr --preserve=all 3个选项
-d 等同于--no-dereference --preserve=links 3个选项(复制并保留链接文件及属性本身,而不是链接文件指向的实际文件)
-r 递归复制
-l 创建硬链接
-s 创建软链接
-u|--update DEST比SRC旧时才复制(即更新)
-p | --preserve 复制文件时保留哪些属性(默认:mode,ownership,timestamps,all保留全部属性,xattr、selinux等)
注意:预设cp的源文件与目的文件权限是不同的,目的文件拥有者通常会是指令操作者(即复制后的文件所有者被更改为使用cp指令的用户,如果想保留文件的所有者,需要使用-p或-a选项)
常用组合: cp -ar 或 cp -l 或cp -s
rm删除文件:
-r 递归删除(删除目录(目录下又有子目录及各种文件)时使用)
-f 强制删除,即删除时不询问
mv移动文件:
mv [OPTION] [-T] SOURCE DEST #将文件或目录重命名
mv [OPTION] SOURCE... DIRECTORY #将前面的文件或目录移动到DIRECTORY(必须是目录)中
mv [OPTION] -t DIRECTORY SOURCE #同上
-f 强制移动,如果目标文件已经存在,不询问直接覆盖
touch指令:
创建空白文件或更改文件的时间
-a 更改文件的atime为当前时间或-d指定的时间
-m 更改文件的mtime为当前时间或-d指定的时间
-d 使用指定的时间字符串(若不使用-d选项,默认是当前时间)
-t STAMP 使用 [[CC]YY]MMDDhhmm[.ss]格式的时间,而不是当前时间
-r FILE 使用FILE文件的时间
仅接文件名而不接任何选项为创建空白文件
basename获取文件的基础名:
[root@node01 ~]# basename /etc/zabbix/zabbix_server.conf
zabbix_server.conf
dirname获取文件的路径名:
[root@node01 ~]# dirname /etc/zabbix/zabbix_server.conf
/etc/zabbix
查阅文件文件内容的指令:
cat [OPTION] [FILE]... #按顺序读取多个文件到stdout(若将stdout重定向到一个文件中,即为合并文件)
-A 等同于-vET
-v 显示除tab和LFD外的所有不可打印字符
-E 显示行尾标记$
-T 显示tab键为^I
-n 显示行号
-s 不输出空白行
tac反向显示,cat的逆向写法:
文但的最后一行显示为第一行,倒数第二行显示为第二行
[root@node01 ~]# cat /etc/issue
\S
Kernel \r on an \m
[root@node01 ~]# tac /etc/issue
Kernel \r on an \m
\S
nl输出文件内容同时输出行号:
-bt 空白行不输出行号(默认,等同于cat -n)
-ba 空白行行号也会输出(等同于cat -n)
more读取文档:(让用户手动翻页)
快捷键
Enter 代表向下翻一行
f 向后翻一页(等同于空格键)
b 向前翻一页
/String 在文档中搜索字符串
q 退出more
less读取文档:(让用户手动翻页) 功能more强大
快捷键
Enter 代表向下翻一行
f 向后翻一页(等同于空格键,等同于PageDown)
b 向前翻一页(等同于PageUp)
/String 在文档中向下搜索字符串(n继续向下搜索下一个,N继续向上搜索下一个)
?String 在文档中向下搜索字符串(n继续向上搜索下一个,N继续向下搜索下一个)
g 到文档开头
G 到文档结尾
q 退出
head读取文件的前几行(默认前10行)
-n N 若N为正读取前N行(可简写为-N),若N为负读取除后N行前的所有行
taif读取文件的后几行(默认后10行)
-n N 若N为负(或不加正负号)读取后N行(可简写为-N),若N前加正号+表示读取除前N行后的所有行
-f 等同于tailf,可实时监控文件(监控日志文件使用)
od读取二进制文件:
od [-t TYPE] 文件
-t 后面可以接各种『类型 (TYPE)』的输出,例如:
a :利用默认的字符来输出
c :使用 ASCII 字符来输出
d[size] :利用十进制(decimal)来输出数据,每个整数占用 size bytes
f[size] :利用浮点数(floating)来输出数据,每个数占用 size bytes
o[size] :利用八进制(octal)来输出数据,每个整数占用 size bytes
x[size] :利用十六进制(hexadecimal)来输出数据,每个整数占用 size bytes
文档的atime/ctime/mtime
modification time (mtime):文件的内容变更时,会更新这个时间
status time (ctime):文件的状态(权限/属性/所有者等)改变时,会更新这个时间
access time (atime):文件的内容被访问时,会更新这个时间(access)
文件预设权限:umask
显示:
umask
umask -S
设定:
umask 022
Redhat系列默认umask为0022,因此:
文件默认权限为644 (普通文件一般不需要x权限,因此默认认为文件全满权限为6,若可执行在指定x)
目录默认权限为755
文件的隐藏属性:即文件系统底层的权限
chattr [+-=][ASacdistu]文件或目录名称 #设定文件的隐藏权限
+ 增加某一个特殊参数,其他原本存在参数则不动。
- 移除某一个特殊参数,其他原本存在参数则不动。
= 设定一定,且仅有后面接的参数
最常用的属性
a #一旦设定只能向文件中增加内容
i #一旦设定不能对文件做任何修改(删除也不能,即使是root)
lsattr [-adR] 文件或目录 #显示chattr设定的隐藏属性
-a 将隐藏文件的属性也秀出来;
-d 如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R 连同子目录的数据也一并列出来
文件特殊权限:SUID, SGID, SBIT
Set UID(仅针对二进制文件)
权限仅对二进制程序有效
执行者对于该程序需要有x可执行权限(并不是其所有者的x)
该权限仅在执行该程序的过程中有效
临时获得该程序所有者的权限去执行该程序
典型示例:
[root@node01 ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
Set GID(针对二进制文件和目录均有效)
针对文件:
仅对二进制文件生效
执行者对于该程序来说,需x权限;
执行者在执行过程中会临时获得该二进制文件所属组的所有权限去执行该程序
典型示例:
[root@node01 ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-rwx--s--x 1 root slocate 40520 Apr 11 2018 /usr/bin/locate
-rw-r----- 1 root slocate 3648229 Mar 15 03:23 /var/lib/mlocate/mlocate.db
针对目录:
用户若拥有该目录的r与x权限时,则能够进入此目录;
用户在此目录下的有效群组(effective group)将会变成该目录的所属群组,因此若用户在此目录下有w权限,其建立的新文件的所属群组均与此目录的所属群组相同。
StickyBit(仅针对目录)
当用户拥有此目录的w, x权限(即具有写入权限)
当用户在该目录下建立的文件或目录,仅有自己与root才有权限删除(除root外其他任何人不能删除我在该目录下创建的文件)
典型示例:
[root@node01 ~]# ll -d /tmp
drwxrwxrwt. 10 root root 4096 Mar 15 10:29 /tmp
SUID/SGID/SBIT 权限设定:
4 为SUID #设置在文件所有者的x上,设置后变为s,若所有者x位为空,设置后变为S
2 为SGID #设置在文件或目录所属组的x上,设置后变为s,若所属组x位为空,设置后变为S
1 为SBIT #设置目录的其他的x上,设置后变为t(不要求其他的x位为x权限)
chmod 4755 filename
chmod u=rwxs,go=x filename
chmod g+s,o+t filename
file观察文件类型
file 文件全路径
[root@node01 ~]# file shipyard-deploy.sh
shipyard-deploy.sh: Bourne-Again shell script, ASCII text executable
which 输出可执行文件的全路径(仅用于非bash内置指令)
[root@node01 ~]# which echo
/usr/bin/echo
[root@node01 ~]# which history #内置指令
/usr/bin/which: no history in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
whereis同时列出可执行文件及其man手册的全路径
[root@node01 ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
locate / updatedb快速按关键词查找文件(包括目录)绝对路径/更新其数据库
-i 不区分大小写
-b 仅匹配文件的基础名(排除目录,若目录和基础名都含有关键词,这种目录也会显示出来)
-r 支持正则匹配文件名
-S 输出数据库信息
注意:locate只能查找磁盘上的文件 ,如果是内核虚拟出来的文件系统时查询不到(如查询不到/proc/下的文件)
find在磁盘上查找文件的绝对路径(即使是内核虚拟出来的文件系统也可查找)
find 目录 条件 选项
find . -print
find . -print0
.指明在当前目录中查找
-print 打印匹配文件的文件名,使用‘\n’作为分隔文件的定位符
-print0 打印匹配文件的文件名,使用null即’\0’作为分隔文件的定位符
1) 根据文件名或整个表达式匹配搜索
find /home/slynux -name “*.txt” -print
find /home/slynux -iname “*.txt” -print
-name选项后接文件名,可使用通配符
-iname选项后接文件名,可使用通配符,并忽略大小写
如果相匹配多个条件中的一个,可采用or 条件操作(默认是and,即-a):
find . \( -name “*.txt” -o -name “*.pdf” \) -print
注意:\( 内容 \) 内容与括号之间必须有空格,否则会提示有错误
选项-path可使用通配符匹配文件的路径或文件名,-name总是匹配文件名,而-path则将文件路径(包括文件名)作为一个整体进行匹配
find /home/users -path “*slynux*” -print
输出结果:
/home/users/list/slynux.txt
/home/users/slynux/eg.css
-regex选项,类似于-path选项,基于正则表达式匹配文件路径
-iregex选项,忽略正则表达式的大小写
正则表达式是通配符的高级形式,可以指定文本模式。
2)find可使用!否定参数,进行反向匹配
find . ! -name “*.txt” -print
注意:感叹号!和选项-name之间必须保留一个空格
3)基于目录深度进行搜索
-maxdepth 告诉find最大向下查找几级
-mindepth 告诉find应该从此处开始先下查找
打印距离当前目录至少两个子目录的所有文件
find . -mindepth 2 -type f -print
注意:-maxdepth和-mindepth应作为find的第三个参数(作为第一个查找条件),以提高效率
4)根据文件类型搜索
find . -type d -print
5)根据文件时间进行搜索
-atime、-mtime、-ctime,以天作为计量
配合: -7或7或+7
类似选项-amin、-mmin、-cmin以分钟作为计量
6)基于文件大小进行查找
find . -type f -size +2k #查找大于2k的文件
find . -type f -size -2k #查找小于2k的文件
find . -type f -size 2k #查找等于2k的文件
除了k之外还可使用b(块,512字节)、c(字节)、w(字,2字节)、M、G等单位
7)删除匹配的文件(会实际从硬盘上将文件删除)
-delete 可用来实际删除find找到的匹配文件
find . -type f -name “*.swap” -delete
8)基于文件的权限匹配
find . -type f -perm 644 -print 文件的权限大于或等于644都能匹配
find . -type f /perm 644 -print 文件的权限小于或等于644都等匹配
find . -type f perm 644 -print 文件的权限必须等于644才能匹配
9)基于文件的硬链接数查找 -links
find . -links N 当前目录中查找硬链接数为N的文件
find . -links +N 当前目录中查找硬链接数大于N的文件
find . -links -N 当前目录中查找硬链接数小于N的文件
10)根据用户或群组进行匹配
find . -user username -print
find . -group groupname -print
find . -uid uid -print
find . -gid gid -print
find . -nouser -print
11) find 结合其它命令执行
find . -type f -user root -exec chown slynux {} \;
红色部分是要执行的命令,{}代表find匹配的每个文件
{}和\之间必须有一个空格
最后必须以分号;作为结束符
另外最好使用单引号将花括号引起来,这样可以防止因文件名中含有空格,而导致执行过程出现错误
find . -type f -name "*.c" -exec cat {} \;>output.txt
-exec结合多个命令:
无法在-exec参数后直接使用多个命令,其只能接受单个指令,不过可将多个命令写到shell脚本中,在-exec中使用这个脚本即可。
-exec ./commands.sh {} \;
红色部分是脚本的路径
12)修剪——将某些文件或目录从搜索过程中排除的技术
find . \( -name “.git” -prune\) -o \( -type f -print\ )
\( -name “.git” -prune\ )的作用是用于排除,指明了“.git”目录应该被排除掉
目录权限说明:
r 用户能够列出目录中文件名称,但其内文件的权限、属性等看不到(若要看到这些还需要x权限)
w 用户能够在目录内创建、删除、移动文件,及更改文件名称
x 用户能够进入该目录(及观看文件的权限时间等属性)
注意:若要在目录中创建一个文件要有w权限,同时也要有x权限(必须能够进入该目录才能执行创建)
文件权限说明:
r 读取文件的内容(可使用cat,也可使用vim,使用vim以只读方式打开文件)
w 可编辑文件的内容
x 可执行该文件(一般是二进制或脚本)
注意:
1)如果要打开文件去编辑要有w权限,同时也要有r权限(因为打开写的同时肯定会读),若不打开写仅w即可(如echo 重定向内容到文件,仅需文件的w权限即可)
2)如果要执行文件要有x权限,同时也要有r权限(因为执行的同时必要读取会源码)