Linux下的文件类型
- 普通文件 d 目录文件 b 块设备 c 字符设备 l 符号链接文件 p 管道文件pipe s 套接字文件socket
列出当前目录内容:ls
**ls -a** 包含隐藏文件
**ls -l** 显示额外的信息
**ls -R **目录递归通过
**ls -ld** 目录和符号链接信息
**ls -1** 文件分行显示
**ls –S** 按从大到小排序
**ls –t ** 按mtime排序
**ls –u ** 配合-t选项,显示并按atime从新到旧排序
**ls –U** 按目录存放顺序显示
**ls –X ** 按文件后缀排序
touch : 创建空文件和刷新时间
cp :复制⽂件和⽬录
【例】把/etc/httpd/conf/httpd.conf⽂件和/etc/my.cnf⽂件拷贝到当前⽬录
[..@。。。]# cp /etc/httpd/conf/httpd.conf /etc/my.cnf ./
【例】把/etc/nginx⽬录及其下⾯所有⽂件和⼦⽬录拷贝到当前⽬录
[..@。。。]# cp -R /etc/nginx/ ./
【例】复制httpd.conf⽂件并重命名为httpd.conf.bak
[..@。。。]# cp httpd.conf httpd.conf.bak
【例】复制/etc⽬录下所有⽂件及其⼦⽬录到当前⽬录,并重命名为etc_bak
[..@。。。]# cp -R /etc ./etc_bak
mv : 移动和重命名文件
【例】把当前⽬录下nginx命令重命名为nginx_bak
[..@。。。]# mv nginx/ nginx_bak
【例】把httpd.conf⽂件移动到/tmp⽬录下
[..@。。。]# mv httpd.conf /tmp
#rm : 删除文件或目录 :rm - rf /*
tree 显示目录树
-d: 只显示目录
-L level:指定显示的层级数目
mkdir :创建文件目录
-v : 显示详细信息
rmdir 删除空目录
-p: 递归删除父空目录
tree:显⽰⽬录树
【例】显⽰a⽬录的⽬录树
[..@。。。]# tree a
【例】查看/usr/local⽬录树,但仅查看2级的⽬录深度
[..@。。。]# tree -L 2 /usr/local
ln:创建链接⽂件
【例】把 /usr/sbin/apachectl⽂件在当前⽬录下创建软连接⽂件为apachectl
[..@。。。]# ln -s /usr/sbin/apachectl apachectl
I/O重定向和管道使⽤
: 表⽰标准输出覆盖重定向;
【例】 把/etc/fstab⽂件内容重定向到/tmp⽬录下⽂件名为fstab.out
[..@。。。]# cat /etc/fstab > /tmp/fstab.out: 表⽰标准输出追加重定向;
【例】把hello world追加到/tmp/fstab.out⽂件尾部
[..@。。。]# echo "hello world" >>/tmp/fstab.out
2> : 表⽰错误输出覆盖重定向;
【例】把标准错误重定向:
[..@。。。]# whch cat 2> /tmp/which.out
[..@。。。]# cat /tmp/which.out
bash: whch: command not found...
2>> : 表⽰错误输出追加重定向;
&> : 表⽰合并标准输出和错误输出覆盖重定向;
【例】合并标准输出和标准错误覆盖重定向到out.txt⽂件⾥
[..@。。。]# which cat &> out.txt
[..@。。。]# cat out.txt
/usr/bin/cat
[..@。。。]# hich cat &>> out.txt
[..@。。。]# cat out.txt
/usr/bin/cat
bash: hich: command not found...
&>> : 表⽰合并标准输出和错误输出追加重定向;
2>&1 :表⽰意义同&>即合并标准输出和错误输出覆盖重定向;
【例】 &>等价于2&>1,功能同上例
[..@。。。]# which cat > out.txt 2>&1
[..@。。。]# cat out.txt
/usr/bin/cat
[..@。。。]# wich cat >> out.txt 2>&1
[..@。。。]# cat out.txt
/usr/bin/cat
bash: wich: command not found...
<: 输⼊重定向;
从⽂件导⼊标准输⼊
【例】把out.txt⽂件⾥的内容,写到file.txt⽂件⾥
[root@Magedu ~]# cat >file.txt <out.txt
[root@Magedu ~]# cat file.txt
/usr/bin/cat
bash: wich: command not found...
<<: 多⾏输⼊;
【例】屏幕随便输⼊⼏⾏内容,遇到END字样结尾后,屏幕内容⾃动保存在f1.txt⾥
[..@。。。]# cat > f1.txt <<END
first
scond
third
END
[..@。。。]# cat f1.txt
first
scond
third
set -C命令:禁⽌覆盖重定向;
|: 强制覆盖重定向(与set -C相反);
【例】禁⽌覆盖重定向和强制重定向
[..@。。。]# set -C
[..@。。。]# echo "hello magedu" >/tmp/fstab.out
-bash: /tmp/fstab.out: cannot overwrite existing file
设置禁⽌覆盖重定向后,可强制覆盖重定向
[..@。。。]# echo "hello " >| /tmp/fstab.out
[..@。。。]# cat /tmp/fstab.out
hello
set +C命令:解除禁⽌覆盖重定向的设置;
【例】解除禁⽌覆盖重定向设置
[..@。。。]# set +C
[..@。。。]# echo "hello" > /tmp/fstab.out
[..@。。。]# cat /tmp/fstab.out
hello
管道符(|)作⽤是把前⼀个命令的执⾏结果当做后⼀个命令的输⼊
重难点
【例】**把标准错误和标准输出分别重覆盖定向到不同的⽂件⾥,即标准错误重定向到falt.txt⽂件,标准输出 重定向到correct.txt
[..@。。。]# which cat 2> falt.txt > correct.txt
[..@。。。]# cat correct.txt
/usr/bin/cat
[..@。。。]# cat falt.txt
[..@。。。]# wih cat 2> falt.txt > correct.txt
[..@。。。]# cat falt.txt
bash: wih: command not found...
[..@。。。]# cat correct.txt
tr :把字符集1转换为字符集2
-c –C --complement:取字符集的补集
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
[:alnum:]:字母和数字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符 [:digit:]:数字 [:graph:]:图形字符 [:lower:]:小写字母 [:print:]:可打印字符 [:punct:]:标点符号 [:space:]:空白字符 [:upper:]:大写字母 [:xdigit:]:十六进制字符
【例】⽤输⼊重定向的⽅式,把所有⼩写字⺟转换为⼤写
[..@。。。]# cat /etc/issue
\S
Kernel \r on an \m
[..@。。。]# tr a-z A-Z </etc/issue
\S
KERNEL \R ON AN \M
tr –d abc < /etc/fstab 删除fstab文件中的所有abc中任意字符
tr ‘a-z’ ‘A-Z’< /etc/issue 该命令会把/etc/issue中的小写字符都转换成大写字符
管道符:|
【例】把echo输出的内容,传递给tr命令,实现⼩写字⺟转换为⼤写字⺟
[..@。。。]# echo "this is test line" | tr a-z A-Z
THIS IS TEST LINE
用户组
useradd:在系统中添加⽤户
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID 指明用户所属基本组,可为组名,也可以GID
-c "COMMENT“ 用户的注释信息
-d HOME_DIR 以指定的路径(不存在)为家目录
-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r 创建系统用户 CentOS 6: ID<500,CentOS 7: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
【例】在系统上添加⼀个⽤户名称为apache的⽤户,默认shell为/sbin/nolgoin且不创建家⽬录
[..@。。。]# useradd -s /sbin/nologin -M apache
groupadd:创建组
chown:修改⽂件所属关系
userdel : 删除用户
passwd : 设置密码,修改用户原密码
-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-f:强制操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
--stdin:从标准输入接收用户密码
示例:echo "PASSWORD" | passwd --stdin USERNAME
组属性修改:groupmod
groupmod [OPTION]... group
-n group_name: 新名字
-g GID: 新的GID
组删除:groupdel ,groupdel GROUP
gpasswd : 更改组密码
gpasswd [OPTION] GROUP
-a user 将user添加至指定组中
-d user 从指定组中移除用户user
-A user1,user2,... 设置有管理权限的用户列
newgrp命令:临时切换主组
如果用户本不属于此组,则需要组密码
修改文件的属主:chown
修改文件的属组:chgrp
文件权限
a , all 所有用户
owner 属主, u
group 属组, g
other 其他, o
三种权限 :
r Readable 读 4 :可使用文件查看类工具获取其内容
w Writable 写 2 :可修改其内容
x eXcutable 执行 1 : 可以把此文件提请内核启动为一个进程
chmod : 改变文件权限
【例】修改权限为属主添加写和执⾏权限、属组没有读权限其它⼈有读和执⾏权限
[。。@。。。~]# ll 1.sh
-rw-r--r-- 1 root root 0 Jun 3 22:16 1.sh
[。。@。。。~]# chmod u+wx,g-r,o=rx 1.sh
[。。@。。。~]# ll 1.sh
-rwx---r-x 1 root root 0 Jun 3 22:16 1.sh
【例】递归设置testdir⽬录权限为:属组添加可读、可写、可执⾏权限,但其⼦⽂件不添加执⾏权限
[。。@。。。 ~]# chmod -R g=rwX testdir/
chattr : 改变文件属性
【例7】设置⽂件1.sh权限为只有属主有读写权限
[root@Magedu ~]# ll 1.sh
-rw-r--r-- 1 root root 0 Jun 4 00:28 1.sh
[root@Magedu ~]# chmod 600 1.sh
[root@Magedu ~]# ll 1.sh
-rw------- 1 root root 0 Jun 4 00:28 1.sh
SGID : 权限设置
【例】设置⼆进制可执⾏程序⽂件chmod拥有suid权限
【例】取消⼆进制可执⾏程序⽂件chmod拥有的suid权限
【例】设置⼆进制可执⾏程序⽂件chmod拥有sgid权限
【例】取消⼆进制可执⾏程序⽂件chmod拥有的sgid权限
【例】对testdir⽬录设置sgid权限,作为协作⽬录
【例】取消testdir⽬录sgid权限
Sticky权限设置
【例】对testdir⽬录设置sticky权限,实现只有⽂件的所有者或root才能删除该⽬录下的⽂件
【例】取消testdir⽬录的sticky权限
acl特殊权限
【例】在/testdir/dir⾥创建的新⽂件⾃动属于g1组,组g2的成员如:alice能对这些新⽂件有读写权限,组 g3的成员如:tom只能对新⽂件有读权限,其它⽤户(不属于g1,g2,g3)不能访问这个⽂件夹。
【例】备份/testdir/dir⾥所有⽂件的ACL权限到/root/acl.txt中,清除/testdir/dir中所有ACL权限,最后 还原ACL权限
getfacl对⽬录操作时,不能使⽤绝对路径;
文本处理
cat命令:查看⽂件全部内容
less命令:分页显⽰⽂件内容
【例】分页查看/var/log/messages⽂件,⽂件最后不退出
[。。@。。。~]# less /var/log/messages
head命令:查看⽂件⾸部的内
-c # 指定获取前#字节
-n # 指定获取前#行
-# 指定行数
【例】查看1.sh⽂件的前3⾏内容
tail命令:查看⽂件尾部的内容
-c # 指定获取后#字节
-n # 指定获取后#行
-# 同上
-f 跟踪显示文件fd新追加的内容,常用日志监控 , 相当于 --follow=descriptor
-F 跟踪文件名,相当于--follow=name --retry
监视查看1.sh⽂件尾部是否有内容增加
[。。@。。。~]# tail -f 1.sh
diff命令:⽐较两⽂件
【例】⽐较1.sh和2.sh两⽂件的不同
cut命令:按列抽取⽂本内容
-d DELIMITER: 指明分隔符,默认tab -f FILEDS:
#: 第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续的多个字段, 例如1-6
混合使用:1-3,7
-c 按字符切割 --output-delimiter=STRING指定输出分隔符
【例】截取/etc/passwd⽂件第⼀⾏,以冒号为分隔符,抽取第7个字段
sort命令:⽂本排序
-r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数字大小整理
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique)删除输出中的重复行
-t c 选项使用c做为字段界定符
-k X 选项按照使用c字符分隔的X列来整理能够使用多次
【例】以1.sh⽂件⼀⾏内容的空格分隔,按第3段从⼤到⼩排序
wc命令:⽂本数据统计
【例】统计/etc/pass⽂件有多少⾏
[。。@。。。~]# cat /etc/passwd | wc -l
50
uniq命令:⽂本去重
【例】统计2.sh⽂件中相同内容的⾏出现的次数
grep命令和正则表达式应⽤
Linux文本处理三剑客
grep :文本过滤工具
sed :文本编辑工具
awk : 文本报告生成器
--color=auto: 对匹配到的文本着色显示
-m # 匹配#次后停止
-v 显示不被pattern匹配到的行
-I 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行 -B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系 grep –e ‘cat ’ -e ‘dog’ file
-w 匹配整个单词
-E 使用ERE
-F 相当于fgrep,不支持正则表达式
-f file 根据模式文件处理
基本正则表达式元字符
字符匹配:
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z] [a-zA-Z]
[^] 匹配指定范围外的任意单个字符
匹配次数
*匹配前面的字符任意次,包括0次
贪婪模式:尽可能长的匹配
*.* 任意长度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次
位置锚定:定位出现的位置
【例】查找/etc/passwd⽂件⾥包含root字符串的⾏
【例】查找2.sh⽂件⾥显⽰不包含111字符串的⾏
【例】显⽰/etc/passwd⽂件中以bash结尾的⾏
【例】找出“ldd /usr/bin/cat”命令的结果中的⽂件路径
【例】找出ifconfig命令结果中所有IPv4地址
【例】将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前⾯
egrep命令:同grep命令,但⽀持扩展的正则表达式
【例】使⽤egrep取出/etc/rc.d/init.d/functions路径的⽬录名
转载于:https://blog.51cto.com/14234291/2364833