第三章 常用命令二
1. 文件操作
1. mkdir
用法
Usage: mkdir [OPTION]... DIRECTORY…
-
-p:创建多层目录
-
-v:显示创建的过程如:-pv
## 1. 文件操作 ### 1. mkdir #### 用法 `Usage: mkdir [OPTION]... DIRECTORY…` #### 参数(2) 1. -p:创建多层目录 2. -v:显示创建的过程如:-pv
mkdir s21
mkdir s21-{3..10}
mkdir -p a/b/c/d
mkdir -pv {s13,s14}/{ss11,ss12}/{sss11,sss12}
-p 递归创建
-v 显示创建过程
# 只能删除空目录 rmdir test1 # 递归删除空目录 mkdir -p s1/s2/s3 rmdir -p s1/s2/s3
2. tree
-
-L:指定查看目录层级
-
-d:只显示目录
yum install -y tree
tree name
-L 控制显示的层数
-b 只显示目录
文件类型
-
- 表示文件
-
d表示目录
-
-
b 块设备
-
c 字符设备
-
s 表示socket套接字
1. 软链接
-
相当于快捷方式
-
文件大小为:链接文件路径的字符数
-
删除源文件:软链接不能用
-
可以对目录做软链接
-
可以跨越分区
ln -s 源文件 目标文件 # 生成软链接 ln -s b c
2. 硬链接
-
指向同一磁盘位置
-
将文件的引用次数+1
-
-
不能对目录做硬链接
-
不能跨越分区
ln 源文件 目标文件 # 生成硬链接
file 文件名
2. 输入输出
1. 输入、输出
-
标准输入:接收键盘的输入
-
标准输出:默认输出到终端 stdout 1
-
错误输出:默认输出到终端 stderr 2
2. I/O重定向
-
把输出和错误信息重定向到文件或其他位置
-
>
覆盖,把stdout重定向到文件中 -
2> 覆盖,把stderr重定向到文件中
-
&> 覆盖,把stdout /stderr重定向到文件中
-
>>
追加 -
2>>
-
&>>
# hhhhh不存在,默认显示到文件, ls /hhhhh 2> err.log # 把所有输出重定向到data.log文件 (ls ; ls /hhhhh) &> data.log # 把所有输出重定向到data.log文件 ls / /hhhhh &> data.log # 分开输出执行信息和错误信息 ls / /hhhhh >info.log 2> error.log ls / /hhhhh >info.log 2> &1 # 无限接收,输出信息不显示 ls / /hhhhh &> /dev/null # 无限输出 if = /dev/zero echo 哈哈哈哈 > a.log echo 嘻嘻嘻嘻 > a.log echo 嘻嘻嘻嘻 >> a.log # a.log文件不存在会新建,存在会清空 >a.log
- 多行输入
# EOF结束,多行输入,结束时生成(保存)该文件 cat > f1 <<EOF(自定义) # ctrl + c/d 结束,只要回车立即生成(保存)文件 cat > f4 # EOF:约定俗成的,end of file
ls b bbbbb > info.log 2> error.log
- &>
- &>>
- command > info.log 2>&1
- command > info.log 2>>&1
- /dev/null 无线接收的无底洞
- ()多个合并
3. tr
-
替换、压缩和删除字符
-
-t:截断替换
-
-d:删除
-
-s:压缩,去重
-
-c:取反
tr 'a-z' 'A-Z' </etc/issue [root@localhost jiangyi]#tr ab 12 ab 12 [root@localhost jiangyi]#tr abc 12 如果后面的位数不足的话,则用最后一位补齐 abc 122 ab 12
tr -d abc < issue > issue2 从定向不能为原来的文件,如果说为原来的文件,则文件情况
-t 用来截断 [root@localhost jiangyi]#tr -t abcd 12 abcd 12cd cd cd
-s 压缩 去重 [root@localhost jiangyi]#tr -s abc abc abc aaabbbccccccccccccccccccccccccccccc abc
-c 取反 [root@localhost jiangyi]#tr -sc abc aaaaaaaaaaaaaabbbbbbbbbbbbbbbcccccccccccccc aaaaaaaaaaaaaabbbbbbbbbbbbbbbcccccccccccccc aaaaaaaaaaaaaaaaaabbbbbbbbbbbbbcccccccccccccccccdddddddddddddeeeeeeeeeeeeffffffffffffff aaaaaaaaaaaaaaaaaabbbbbbbbbbbbbcccccccccccccccccdef aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccc1111111111111111222222222222333333333333 aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccc123
[root@localhost jiangyi]#tr -dc abc aaaaaaaaaaaaabbbbbbbbbbbbccccccccccccccccccdddddddddddddddwqweqweqwqeqwqwqwq wqqqqqqqqqqqqqqqqqqqqqqqqq ctrl+d结束
[root@localhost jiangyi]#tr -dc "abc\n" adsada aaa sadasdcxzczx aacc asdadwq aa
[root@localhost jiangyi]#seq 1 10 >f1 [root@localhost jiangyi]#tr -d "\n" <f1 [root@localhost jiangyi]tr "\n" " "<f1 [root@localhost jiangyi] tr " " "\n" <f2
# 文件小写转为大写
tr 'a-z' 'A-Z' < /etc/issue
set -C 禁止覆盖
set +C 允许覆盖
[root@localhost jiangyi]#cat >f1 <<EOF > 1 > 2 > 3 > 4 > 5 > 6 > 7 > > 8 > 9 > EOF [root@localhost jiangyi]# cat > f4 asdas sad asd ctrl+d结束 ctrl+c也可以 两者区别 第一种方式输出结束,文件才会产生 第二方式,回车一次就会写入文件 EOF 约定俗成
6. 管道 |
-
使用 |连接多个命令
-
-
将命令1的stanout发送给命令2的stdin ...
-
stderr默认不能通过管道传递
-
ls | tr 'a-z' 'A-Z'
[root@localhost jyi]#ls /dadadasda|tr -s "a-z" "A-Z"
ls: cannot access /dadadasda: No such file or directory
[root@localhost jyi]#ls|tr "a-z" "A-Z"
7.
whoami 获取登录的用户 [jiangyi@localhost ~]$who am i jiangyi(用户) pts/4(登录的终端) 2019-07-31 08:27(登录的时间) (192.168.182.1(登录ip地址)) w 可以查看当前登录的所有用户执行的命令
3. 文件权限
lrwxrwxrwx. # 链接文件l -.... # 文件 d.... # 目录文件 s.... # socket 套接字 b.... # 块文件 c.... # 字符文件
-rw-r--r--. 1 root root 14 Jul 30 16:24 1.cfg
权限 引用次数 属主 属组 大小 mtime时间 文件名
2. 更改属主、组
-
chown:change ower
Usage: chown [OPTION]... [OWNER][:[GROUP]] FILE… or: chown [OPTION]... --reference=RFILE FILE…
2. 参数
-
-R:递归更改属主
-
--reference=源文件
:指定组或主和源文件一样
chown 属主 filename chown 属主:属组 filename # :和. 都可以 chown 属主.属组 filename chown :属组 filename # 只改变属组 chown -R henry test # 递归更改属主,不使用-R子文件属主不变
# 修改组 chgrp henry fielname # 指定filename1的组别和filename一样 chgrp --reference=filename1 filename
3. 权限操作
-
第一位:代表文件类型
-
三位为一组:属主(u)、属组(g)、其他的权限(o)
-
rwx:读、写、执行
-
root用户不受权限控制
# 设置不覆盖原文件 set -C > a.txt # 允许覆盖原文件 set +C > a.txt
# 查看当前登录的用户 [root@localhost ~]# whoami root [root@localhost ~]# who am i root pts/3 2019-07-31 11:01 (172.16.44.1) # 查看当前所有用户正在执行的命令 [root@localhost ~]# w
2. 更改权限
-
-
r / 4:可以查看
-
w / 2:可以写
-
x / 1:可以执行
-
-
目录的权限:一般是r和x一起存在
-
r / 4:可以使用ls查看
-
w / 2:可以创建或删除文件
-
x / 1:可以 cd 进文件夹,如果没有x权限w权限不生效,r生效只能查看哪些文件权限看不到
-
# 更改文件权限 chmod o-r filename # 给其他去掉r权限 chmod +x filename # 给所有加上x权限 chmod ug-x filename # 给u和g去掉x权限 # 更改目录权限 chmod o-x dirname chmod o+w dirname chmod o=w dirname # 其他权限只有 # 使用数字更改权限 chmod 644 文件名 chmod 755 目录 - 建议:不要给777权限
# 执行a.py文件 echo '#!/usr/bin/python' > a.py echo '#coding:utf-8' >> a.py echo 'print(123)' >> a.py chmod +x a.py ./a.py # 或者 chmod -x a.py python a.py
-
-
可以用[u|g|o]+ - = r w x
-
可以什么都不写,表示全部 +-
-
-
还可以用数字表示
---
rwxr-xr-x
-w- 010 2
--x 001 1
r:4
w:2
x:1
r-xr-x---
-
建议:
-
不要给文件或者文件夹设置成777权限
-
不要给文件或者文件夹设置成777权限
-
-
3. 特殊权限chattr
参数
-
i:不能修改、删除、改名
-
a:只能追加内容
chattr +i 不能删除、改名、不能修改内容
chattr +a 只能追加,不能删除,不能改名
lsattr 查看属性
4. 文本操作
参数:
-
-E:在每行结束处显示"$"
-
-n: 对输出的所有行编号
-
-b:对非空输出行编号
-
-s:折叠空行为一行
cat -E /etc/passwd cat -n /etc/passwd cat -b /etc/passwd cat -sn /etc/passwd
2. tac
tac /etc/passwd
3. less
-
-
/搜索, n:先后搜索 N:向前搜索
-
q:退出
less /etc/passwd # 搜索 /root 回车
4. more
-
-
-d:显示翻页和退出信息
-
输出完自动退出,也可使用q提前退出
more -d /etc/passwdt
-
显示前多少行,默认显示10行
-
-n:指定显示前 n 行
### 5. head - 显示前多少行,默认显示10行 - -n:指定显示前 n 行
-
显示后多少行,默认后10行
-
-n:指定显示后 n 行
-
-f:追踪显示文件新加入的内容,一般用于查看日志
-
tailf:相当于 tail -f
# 文件更改时访问 tail /etc/passwd # 显示后 3 行 tail -3 /etc/passwd
# 实时访问文件 tailf /etc/passwd
7. cut
-
抽取文件
参数(3)
-
-d:指定切割符,必须与-f一起连用
-
-f:指定显示指定列的数据(3中方法可以混用)
-
-d 用来指定切割符号 -f 执行显示哪一个数据 # 显示指定的数据 #,#,#,# 离散数据 #-# 连续数据 cut -d: -f3 passwd cut -d: -f1,3-7 passwd cut -d: -f3,4,5,6 passwd cut -d: -f3-6 passwd -c 按照字符切割 cut -c2-5 passwd
-
-
指定多个字符时,只选择第一个字符作为连接符
-
-
# 合并 b 和 d paste -d: b d # 默认是tab paste b d
5. 分析文本
1. wc (word count)
-
空格和换行都认为是单词结束
参数(5)
-
-l:行数
-
-w:单词个数
-
-
-m:字符数
-
-L:文件中最长行长度
[root@localhost ~]# wc /etc/passwd 43 86 2238 /etc/passwd 行数 字数 字节数 文件 wc -l /etc/passwds
-
把文本显示在stdout中,不该变原文件
参数(7)
-
默认按照字母排序
-
-n:按照数字排序
-
-r:倒叙
-
-R:随机排
-
-f:忽略大小写
-
-t:指定分割符
-
-k:指定排序依据
#b是文件 sort b sort -n b sort -r b sort -R b # 先切割,根据第 3 列排序 sort -t: -k3 /etc/passwd
-
从输入中删除前后相接的重复行
参数
-
-c:显示重复次数
-
-d:只显示重复行
-
-u:只显示不重复行
echo '1' >> b echo '1' >> b echo '2' >> b echo '1' >> b echo '1' >> b uniq b uniq -c b uniq -d b uniq -u b
# 应用 sort -n b | uniq -c w|sort|cut -d\ -f1|uniq -c ss -tnp| cut -d: -f2|tr -s ' '| cut -d' ' -f2|sort|uniq -c
4. diff
-
对比两个文件
diff a.txt b.txt