**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路径的⽬录名