面试被问到了linux的命令, 只了解一些很常用的, 所以打算全面学习下,
绝对路径: 已根名目录开头, /user/xx
相对路径: cd../xx
1. ls -al 列出所有文件的详细权限与属性
默认按字典序排列
-a 全部文件, 包括隐藏文件(开头为.的文件)
-l 详细信息, 包含文件的属性和权限
-t 将文件依建立时间之先后次序列出
-r-x------ 1 root root 301 Aug 6 02:10 env.txt
第一位 - 表示是文件, d 表示目录, l 表示连接文件
接下来的就不多说了
1 的代表连接数
301 是文件大小
2. chgrp chown chmod
① chgrp [-R] 修改文件的所属的用户组, -R递归修改,目录文件都修改
注意: 修改的属组必须在 /etc/group 中存在
chgrp user xx.cfg 把xx.cfg的属主改为users
②chown 【-R] 修改文件目录的属主属组 -R递归修改 它比chgrp强大
注意: 修改的用户的属主必须存在在/etc/passwd
chown bin xx.cfg 修改文件的属主为bin
chown root:root xx.cfg 修改文件的属主和属组
chown :root 仅修改文件的属组
③chmod 修改文件和路径的权限
1) r:4 w:2 x:1
chmod 777 xx
2) u-> user, g->group , o-> other, a -> all
+ 加入权限, -去掉权限, = 设置权限
chmod u=rwx, go=rx xxx
chmod a+w xxx
chmod a-w xxx
关于文件和路径的权限:
文件:r : 可读取文件的内容 w: 可以编辑,新增或修改文件, 但是不能删除文件 x: 可执行权限
目录:r: 可以查看路径 w: 新建文件与目录, 编辑文件,进行改名,移动目录内文件 x: 能否进入工作目录(就是如果目录没有x权限,光有r的话, 只能看到路径有什么文件,最多看看文件名, 不能看文件的内容, 不能cd进去)
所以要读取文件的内容, 就必须拥有对目录的可执行权限
3. . .. - ~
. 当前目录
.. 上一级目录
- 上一个工作目录
~ 目前登陆用户的家目录
4. pwd 显示当前目录
-P 真正路径
cd /var/mail mail是一个链接文件
pwd -P 真正路径,而非链接路径
5. mkdir, rmdir
①mkdir 创建文件夹
-m 设置权限
-P递归创建
mkdir test 新建个目录(文件夹)
mkdir test/test 会报错
mkdir -P test/test 递归创建
mkdir -m 711 test
②rmdir 删除空路径(文件夹)
-P 递归删除
6. cp, rm, mv
①cp 复制
-i 若目标文件存在,覆盖时会先询问
-P 复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间)
-r 递归复制
-d 如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接
-a:相当于 -d、-p、-r 选项的集合
cp -a /etc/ /tmp
②rm 删除
-f 忽略不存在的文件,
-i 删除之前先询问
-r 递归删除
\rm -r xxx 不加\ 递归删除会每次都询问
rm /xx/xxx 会报错
rm -r /xx/xxx 可以
③ mv 移动文件,目录, 或重命名
-f 强制, 文件若存在, 不会询问, 直接覆盖
-i 若文件已经存在,会有提示
-u 已经存在, 且文件较新, 才会更新
mv xx xxx
mv b1 b2 b3 将b1 b2移到b3
7 cat tac nl more less查看文件内容
①cat
-n 打印行号,空白也打印
-b 打印行号, 空白不打印
-A 显示全部, 各种各样的符号, 换行符啥的
cat -n /etc/xx
②tac 与cat 类似, 不过是从后往前打印, 就是cat的逆序
③nl 添加行号打印
-b a 空行有行号
-b t 空白没行号(默认)
-n ln 行号在屏幕最左方显示
-n rn 在偏右方显示,不用0填充
-n rz 在偏右方显示, 默认六位,不足0填充, 如 000023
-w 数字, 指定行号占用符, 就是修改上面的默认六位为指定值
nl -b a /etc/xx 指定行号,空行也有行号
nl -b a -n rz -w 3 指定行号,空行也有行号, 行号3位, 不足0补充
④more 一页一页翻动
more /etc/xx
空格 翻下一页
Enter 下一行
/字符串 查找字符串
q 离开
:f 立刻显示文件名以及目前的行数
b 返回上一次的操作,如空格 ,到了下一页, b返回上一页;
⑤ less 更强大
moer不能向前翻页, 但是less可以。
空格 向下翻一页
pagedown 向下翻页
pageup 向上翻页
Enter 下一行
g 返回到首行
G 跳到最后一行
/字符串 向下查找
?字符串 向上查找
n 重复前一个搜索(与 / 或 ? 有关)
N 反向重复前一个搜索(与 / 或 ? 有关)
q 离开
8 数据截取 head, tail
① head -n 数字 返回前几行
head /xx/xx 默认返回前十行
head -n 20 /xx/xx 返回前20行
head -n -100 /xx/xx 不打印后面的100条数据,(如有130条数据,-100 只打印前30条数据)
② tail -n 数字 返回后几行
-f 持续刷新后面的所接收的文件中的内容
tail -n 20 /xx/xx
tail -n +100 /xx/xx 打印100条以后的数据, 即打印101条到最后
③ 显示 /etc/xx.conf 第11行到20行
head -n 20 /etc/xx.conf | tail -n 10
9 查看二进制文件 od
-t a 利用默认的字符串来输出
-t c 使用ASCII字符串输出
-t d 十进制输出
-t o 八进制输出
-t x 十六进制输出
-t f 浮点输出
od -t c /xx/xx
10 三个时间
① 修改时间, 内容修改时更新(mtime)
② 状态时间, 状态改变, 权限与属性修改时(ctime)
③ 读取时间 , 内容被读取时修改(atime)
data; ls -l /etc/xx ; ls -l --time=atime /etc/xx ; ls -l --time=ctime /etc/xx
打印: 当前时间
建立时间
读取时间
更新时间
11 touch 新建空的文件, 修改读取,修改, 新建时间
-a 定义读取时间
-c 修改文件时间, 若文件不存在, 不建立新文件
-d 可以加自定义日期
-m 可以修改mtime,
-t 可以加自定义时间[YYYYMMDDhhnm]
touch -t 201911111111 xxx
12 默认权限 umask
输入 umask ——> 0022 减掉权限,第一位时特殊权限,属组和其他用户减去w权限
输入 umask ——> u=rwx,g=rx,o=rx
对于 新建文件的权限为:
-rw-rw-rw 减掉umask -rw-r--r--
对于 目录的权限为:
drwxrwxrwx 减掉 umask drwx-r-x-r-x
对于特殊权限:
属主属组用s替代x的位置, s权限包括x的权限, 若s在属主则是SUID, SUID=4; 在属组则是SGID=2
其他用户是用t代替的位置,SBIT=1
如-rwsr-x-r-x 则权限表示为4755, 正常是755, 因为s在属主, 所以前面加了个4
-rwsr-sr-x 则表示7755
-rwxr-x-r-t 1755
-rwSrwSrwT 表示7666 如果大写则表示,没有x权限, 所以是6
13 执行文件(命令的文件位置)的查找which
-a 找到的命令均列出, 不止第一个被找到的命令
which -a ifconfig
14 文件的查找 whereis, locate, find
whereis 和 locate 比find快
①whereis 只在几个特定文件下找, 所以快
-l 列出whereis 查找的文件
-b 只找二进制文件
-m 只找说明文件manual路径下找
-s 只找source 文件
-u 不在b m s 中找
②locate 在已经建立的数据库中查找, /user/lib/mlocate里面的数据,不直接在硬盘找。数据库每天自动更新一次,但是如果在自动更新前, 新建的文件,locate是没法找到的, 要手动更新。 执行updatedb,可能会报错(yum install mlocate) 就可以了。
-i 忽略大小写
-c 不输出文件名, 仅计算文件数量
-l 输出几行
-S 数据库信息
-r 加正则
locate -l 5 passwd
③find find强大但是慢,它扫描全部用盘,找到文件。
1)可以选择mtime,atime, ctime。以mtime为例
-mtime n
-mtime +n 他们的区别如下
-mtime -n
-newer 文件名 比文件新的就列出
<---+4 --| 4 |--------- -4 -------------->
_|_____|_____|_____|_____|_____|_____|____
5 4 3 2 1 现在
find / -mtime 0 找到24小时内的修改
find /etc -newer /etc/passwd 列出比etc 下比/etc/passwd新的文件
2)-uid n
-gid n
-user name
-group name
-nouser 拥有者不在 /etc/passwd
-nogroup 属组不在 /etc/group
find /home -user xx
find / -nouser
3) -name
-size +大于, -小于, c 1B k 1K -size +50k 大于50k的文件
-type TYPE + 正规文件 设备文件 b,c 目录d, l链接文件1, s :socket, p: FIFO
-perm mode 权限刚好等于4755, 什么之类的
-perm -mode 必须包含(大于)指定权限
-perm /mode 包含任一mode权限
find /-name passwd
find -perm /7000
4)额外操作
-exec command
find /user/bin /user/sbin -perm /7000 -exec ls -l {} \;
{} 代表找到的内容