【注】文章中的所有截图均为centos下实验结果,亲测命令正确= ̄ω ̄=
【参考资料】《Linux从入门到精通(第2版)》刘忆智 等编著
*************************************************和团队共享文件***************************************************
1、和团队共享文件:创建工作目录,并创建一个用户组管理该目录。
$ sudo groupadd workgroup ##新建用户组命名为workgroup
$ sudo useradd -G workgroup lucy ##新建用户lucy并归入workgroup组
$ sudo passwd lucy ##为lucy设置密码
$ cd /home ##切换目录
$ sudo mkdir work ##新建目录work
$ sudo chgrp workgroup work/ ##将work所有权交给workgroup组
$ sudo chmod g+rwx work/ ##赋予读、写、执行权限
$ sudo chmod o-rwx work/ ##撤销其他用户的读、写、执行权限
$ sudo chown lewis work/ ##目录的组长(所有者)
$ su lewis ##切换用户
$ cd /home/work/ ##切换目录
$ touch test ##新建空文件
$ su peter ##切换用户
$ cd /home/work/ ##切换目录
$ rm test ##删除文件
【转载请注明文章出处:http://blog.csdn.net/iamthezbl/article/details/51274266】
*************************************************建立文件和目录***************************************************
2、建立文件和目录
$ mkdir document picture ##新建两个目录
$ mkdir ~/picture/temp ##指定路径创建目录
$ mkdir -p ~/tempx/job ##-p选项用于创建完整的目录结构,tempx不存在时也可执行
$ touch hello ##建立空文件,另一个用途是更新文件的建立时间,在自动备份时很有用
*******************************************移动、复制和删除***********************************************
3、移动、复制和删除
$ mv hello bin/ ##将hello移动到bin目录下(出现同名文件有覆盖危险)
$ echo "Hello" > hello ##重定向新建一个文件,将字符串Hello输入文件
$ cat hello ##显示hello文件内容
$ mv -i hello test/ ##同名时询问是否覆盖
$ mv -b hello test/ ##在目标文件的同名文件后加~避免覆盖
$ mv hello~ hello_bak ##重命名
$ cp hello bin/ ##将hello复制到bin目录下(出现同名文件有覆盖危险)
$ cp -i hello test/ ##同名时询问是否覆盖
$ cp -b hello test/ ##在目标文件的同名文件后加~避免覆盖
$ cp test/ bin/ ##cp会忽略文件夹
$ cp -r test/ bin/ ##使用-r命令可以连同子目录及其中的文件一起复制
$ rmdir remove ##删除文件夹,但只有文件夹空时可用,一般用得较少
$ rm test/*.php ##删除文件
$ rm -i test/hello ##删除文件时给出提示,只读文件不写-i也会提示
$ rm -f hello ##对出现的提示默认回答y,慎用。
$ rm -r test/ ##递归地删除目录下的内容,最后删除目录,慎用。
【转载请注明文章出处: http://blog.csdn.net/iamthezbl/article/details/51274266
】
******************************************文件和目录的权限************************************************
4、文件和目录的权限
Linux为三种用户准备了权限,分别为文件所有者(属主)、文件属组用户和其他人,另外还有拥有完整最高权限的root用户。文件的创建者自动成为文件的所有者,所有权的转让需要root权限。可以把文件交给一个组管理(属组)。属组也可以是不包含文件所有者的组,执行文件时,系统只关心属主权限,组权限对属主没有影响。
需要设置读取、写入、执行三种权限,即 r、w、x,可执行文件分为两类,一是直接可以由CPU执行的二进制代码,另一类是Shell脚本程序。对目录而言,三种权限分别对应能否进入目录(执行),能否列出目录内容(读取),能否在目录中创建、删除和重命名文件(写入)。
$ ls -l /bin/login ##文件属性
第一个字段一个字符:- 代表文件类型,这是一个普通文件;
九个字符 rwx、r-x、r-x,分别代表属主、属组、其他人的读取、写入、执行权限,被禁用的权限用 - 表示;
接着的3组权限位数字表示链接数目,此处1表示只有一个硬链接;
三、四个字段分别表示文件的属主和属组,分别是root用户和root组;
33064表示文件大小(字节);
文件最后修改的日期、时间、完整路径。
$ ls -ld /etc/ ##目录的属性
$ ls -l ##当前目录下所有文件(不包括隐藏文件)的属性
$ sudo chown lewis:root days ##分别改变days文件的属主和属组,属组前必须有冒号,且前边和属主之间没空格
$ sudo chown lewis days ##改变属主
$ sudo chown :root days ##改变属组
$ sudo chown -R lewis iso/ ##改变目录所有权
$ sudo chgrp nogroup days ##专门用来改变属组的语句,也有-R选项
可以设置权限的用户组有:u 文件属主、g 文件属组、o 其他人、a 所有人。注意在用相等符号设置权限时,用户原本的权限不会被保留,只会更新语句中提到的权限,因此不能用相等语句修改部分权限,必须涉及对rwx的全部考量后再选择语句内容。
$ sudo chmod u+x days ##为属主增加执行权限
$ sudo chmod a-x days ##撤销所有人的执行权限
$ sudo chmod ug=rw,o=r days ##赋予属主和属组读写权限,其他人写权限
$ sudo chmod o=u days ##其他人的权限与属主相同
用chmod助记符形式比较直观,但繁琐,9个位置上每个位置只有两种选择,可以用二进制表示,则3位2进制可以用1位8进制,3个8进制数就可以完成对三组权限的表示。其中1代表x,2代表w,4代表r(与实际顺序相反),只要将数字相加就可以代表多种权限。
$ sudo chmod 774 days ##赋予属主、属组读写执行权限,赋予其他人读权限
【转载请注明文章出处: http://blog.csdn.net/iamthezbl/article/details/51274266
】
************************************************文件类型****************************************************
5、文件类型
Linux共有七种文件类型,ls -l 命令输出的第一项代表了文件类型:
- 普通文件
d 目录
c 字符设备文件
b 块设备文件
s 本地域套接口
p 有名管道
l 符号链接
Linux有两类设备文件:字符设备文件和块设备文件。字符设备指的是能够从它那里读取成字符序列的设备,如磁带和串行线路;块设备指的是用来存储数据并对其各部分提供同等访问权的设备,如磁盘。字符设备有时被称为顺序访问设备,块设备有时被称为随机访问设备。使用块设备,可以从磁盘的任何随机位置获取数据;而使用字符设备,必须按照数据发送的顺序从串行线路上获取。
符号链接(也称软链接)有点像Windows里的快捷方式,用户可以用别名去访问一个文件。
软链接需要使用带-s参数的ln命令来创建
$ ln -s hello_bak hello ##软链接:带 -s 的 ln 命令,取一个别名hello,删除别名不会影响原文件,但删除原文件后别名不再有意义
$ ln -s ../tempx tem ##也可用于目录的别名
$ ln hello_bak2 hello_bak ##硬链接:生成一个新文件互相关联,一个文件的改动同时会改动另一个,很少应用到
【转载请注明文章出处: http://blog.csdn.net/iamthezbl/article/details/51274266
】
*******************************************输入输出重定向和管道******************************************
6、输入输出重定向和管道
重定向和管道是Shell的高级特性,允许用户人为改变程序获取输入和产生输出的位置。
程序默认输出结果的地方为标准输出,一般为显示器,输出重定向把程序的输出转移到另一个地方去。
$ ls > hello_bak ##将输出存入文件hello_bak,若文件不存在会自动创建,若存在会删除内容重新写入
$ ls >> hello_bak ##想要保留原始内容,需要用 >> 重定向
程序默认接收输入的地方为标准输入,通常指键盘。
$ cat ##输入cat后回车,系统会等待输入
$ HELLO ##每输入一行系统会将输入打印在屏幕上
<Ctrl + D> ##直到点击 Ctrl+D 结束
$ cat < days ##重定向符号支持从文件中读入
$ cat days ##文件名作为参数就可以实现这个功能,因此上一条语句很少用到
$ cat << EOF ##立即文件(here document):从键盘读入,遇到设置的终止符(此处为EOF)停止,然后一次性打印
> HELLO ##输入HELLO
> EOF ##输入终止符,停止读入,打印前边读取的内容
$ cat << END >> hello ##输入输出重定向结合使用,以 END 为终止符从键盘读入,将内容追加到 hello 文件后
【转载请注明文章出处:http://blog.csdn.net/iamthezbl/article/details/51274266】
管道将重定向更进一步,通过“ | ”,将一条命令输出连接到另一条命令输出,如下:
$ ls | grep ay ##首先用 ls 给出文件名列表, 管道接收输出并发送给 grep 命令,从这些输出中找出包含“ay” 的文件名并打印,也可以用多个管道连接出复杂的命令
*******************************************************END**************************************************