4 建立文件和目录
4.1 建立目录:mkdir
linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录。
命令格式:
mkdir [-参数] 目录
命令功能:
通过 mkdir 命令可以实现在指定位置创建以 DirName(指定的文件名)命名的文件夹或目录。要创建文件夹或目录的用户必须对所创建的文件夹的父文件夹具有写权限。并且,同一目录下所创建的文件夹(目录)不能相同(区分大小写)。
参数:
-m:--mode=模式,设定权限<模式> (类似 chmod),数字类型;rwx 421
-p:--parents 可以是个路径名, 系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录;
实例:
[user4@localhost ~]$ mkdir d1
[user4@localhost ~]$ ll | grep d1
drwxrwxr-x. 2 user4 user4 6 5月 31 00:37 d1 <--- 默认目录权限是 771
[user4@localhost ~]$ mkdir -m 700 d2
[user4@localhost ~]$ ll | grep d2
drwx------. 2 user4 user4 6 5月 31 00:38 d2
[user4@localhost ~]$ mkdir -p a/b/c
[user4@localhost ~]$ ll a
总用量 0
drwxrwxr-x. 3 user4 user4 15 5月 31 00:38 b
[user4@localhost ~]$ ll a/b
总用量 0
drwxrwxr-x. 2 user4 user4 6 5月 31 00:38 c
4.2 建立一个空文件:touch
命令格式:
touch 文件
命令功能:
创建一个 空文件。
示例:
[user4@localhost ~]$ touch file5
[user4@localhost ~]$ ll | grep file5
-rw-rw-r--. 1 user4 user4 0 5月 31 00:40 file5
5 移动、复制和删除目录/文件
5.1 移动和重命名:mv
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来移动文件或者目录。
命令格式:
mv [-参数] 源目录或文件 目标文件或目录
命令功能:
视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。
参数:
-b :若需覆盖文件,则覆盖前先行备份。
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
如果目标文件已经存在,如果当前用户是root 用户,不写 -i 也会提示,而新建的用户,则不会提示。原因在于用户家目录下的.bashrc 文件中配置了别名
而新建的用户家目录下的.bashrc 文件没有配置别名。
如果想新建的用户也提示,则在.bashrc 文件中配置,然后用下面命令使修改生效
# 重新刷新自己的环境变量
source .bashrc
文件重命名
[user4@localhost ~]$ mv a d3
[user4@localhost ~]$ ll
总用量 28
drwxrwxr-x. 2 user4 user4 6 5月 31 00:37 d1
drwx------. 2 user4 user4 6 5月 31 00:38 d2
drwxrwxr-x. 3 user4 user4 15 5月 31 00:38 d3
-rw-rw-r--. 1 user4 user4 31 5月 30 21:02 file1
-rw-rw-r--. 1 user4 user4 447 5月 30 22:49 file2
..........其他的省略
将新建的 file5 这个文件移动到d3 目录
[user4@localhost ~]$ mv file5 d3
将d3目录移动到d1目录中
[user4@localhost ~]$ mv d3 d1
移动重名文件到相同目录
[user4@localhost ~]$ mkdir d3
[user4@localhost ~]$ touch file4
[user4@localhost ~]$ mv file4 d3
[user4@localhost ~]$ touch file4
[user4@localhost ~]$ mv -i -b file4 d3
mv:是否覆盖"d3/file4"? y
[user4@localhost ~]$ cd d3
[user4@localhost d3]$ ll
总用量 0
-rw-rw-r--. 1 user4 user4 0 5月 31 00:51 file4
-rw-rw-r--. 1 user4 user4 0 5月 31 00:50 file4~
mv 的 -i 参数起到提示作用 -b 参数备份文件
5.2 复制:cp
cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。
一般情下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,并且.bashrc文件中已经配置了cp的别名,就会询问是否覆盖,不管你是否使用-i 参数。
命令格式:
cp [-参数] 源目录或文件 目标文件或目录
命令功能:
将源文件复制至目标文件,或将多个源文件复制至目标目录。
参数:
-a: –archive 递归复制文件目录,并且复制的文件的属性也一致
-i: –interactive 覆盖前询问
-R:递归处理,将指定目录下的文件及子目录一并处理
实例 :
[user4@localhost ~]$ cp file1 file4
[user4@localhost ~]$ cp -R d1 d4
[user4@localhost ~]$ ll
总用量 32
drwxrwxr-x. 3 user4 user4 16 5月 31 00:47 d1
drwx------. 2 user4 user4 6 5月 31 00:38 d2
drwxrwxr-x. 2 user4 user4 33 5月 31 00:51 d3
drwxrwxr-x. 3 user4 user4 16 5月 31 01:31 d4
-rw-rw-r--. 1 user4 user4 31 5月 30 21:02 file1
-rw-rw-r--. 1 user4 user4 447 5月 30 22:49 file2
-rw-rw-r--. 1 user4 user4 712 5月 31 00:16 file3
-rw-rw-r--. 1 user4 user4 31 5月 31 01:31 file4
lrwxrwxrwx. 1 user4 user4 31 5月 30 20:18 link1 -> /etc/sysconfig/network-scripts/
-rw-rw-r--. 1 user4 user4 82 5月 30 22:38 log1
-rw-r--r--. 1 user4 user4 2124 5月 31 00:33 passwd
-rw-r--r--. 1 user4 user4 6421 5月 30 20:52 server.xml
[user4@localhost ~]$ cp file2 file4
[user4@localhost ~]$ cp -i file2 file4
cp:是否覆盖"file4"? y
5.3 删除:rm
rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件均保持不变。
rm是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在/(根目录)下执行rm * -rf)。所以,我们在执行rm之前最好先确认一下在哪个目录,到底要删除什么东西,操作时保持高度清醒的头脑。
命令格式:
rm [-参数] 文件或目录
命令功能:
删除一个目录中的一个或多个文件或目录,如果没有使用- r选项,则rm不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。
参数:
-f: --force 忽略不存在的文件,从不给出提示。
-i:--interactive 进行交互式删除
-r, -R: --recursive 指示rm将参数中列出的全部目录和子目录均递归地删除。
示例:
[user4@localhost ~]$ rm file4
[user4@localhost ~]$ rm -rf d4
rm -rf /etc(不要尝试)
6 改变文档所有权、文档权限
6.1 改变文档的所有权
chown:change owner
chown 将指定文件的拥有者改为指定的用户或组,
用户可以是用户名或者用户ID;
组可以是组名或者组ID;
文件是以空格分开的要改变权限的文件列表,支持通配符。
系统管理员经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用该文件的权限。
命令格式:
chown [选项]... [所有者][:[组]] 文件或目录...
命令功能:
通过chown改变文件的拥有者和群组。
在更改文件的所有者或所属群组时,可以使用用户名称和用户识别码设置。
普通用户不能将自己的文件改变成其他的拥有者。其操作权限一般为管理员。
参数:
-R 处理指定目录以及其子目录下的所有文件
使用root用户在d1目录下创建3个文件,使用chown命令将d1的拥有者设置给zwm,但是3个文件的所有者和组没有变,依然是root
之后,使用chown -R zwm:zwm d1 ,这样可以将组及组内的文件拥有者都做修改
[user4@localhost ~]$ su - root
密码:
上一次登录:五 5月 31 01:30:50 CST 2019从 192.168.92.1pts/0 上
[root@localhost ~]# cp /etc/group ./
[root@localhost ~]# ll
总用量 8
-rw-------. 1 root root 1293 5月 30 12:28 anaconda-ks.cfg
-rw-r--r--. 1 root root 637 5月 31 01:35 group
[root@localhost ~]# chown user4:user4 group
[root@localhost ~]# ll
总用量 8
-rw-------. 1 root root 1293 5月 30 12:28 anaconda-ks.cfg
-rw-r--r--. 1 user4 user4 637 5月 31 01:35 group
[root@localhost ~]# mv ./group /home/user4/
[root@localhost ~]#
[root@localhost ~]# cp /etc/passwd ./file1
[root@localhost ~]# cp /etc/passwd ./file2
[root@localhost ~]# chown user4: file1
[root@localhost ~]# chown :user4 file2
[root@localhost ~]# ll
总用量 12
-rw-------. 1 root root 1293 5月 30 12:28 anaconda-ks.cfg
-rw-r--r--. 1 user4 user4 1304 5月 31 01:37 file1
-rw-r--r--. 1 root user4 1304 5月 31 01:37 file2
6.2 改变文件的所属组
chgrp:change group
在Linux系统里,文件或目录的权限的掌控以拥有者及所属群组来管理。可以使用chgrp 指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以。
Chgrp命令就是change group的缩写!要被改变的组名必须要在/etc/group文件内存在才行。
命令格式:
chgrp [选项] [组] 文件或目录
命令功能:
chgrp命令可采用群组名称或群组识别码的方式改变文件或目录的所属群组。使用权限是超级用户。
参数:
-R 处理指定目录以及其子目录下的所有文件
示例:
1)改变文件所属群组
[root@localhost ~]# chgrp group1 file1
[root@localhost ~]# ll
总用量 12
-rw-------. 1 root root 1293 5月 30 12:28 anaconda-ks.cfg
-rw-r--r--. 1 user4 group1 1304 5月 31 01:37 file1
-rw-r--r--. 1 root user4 1304 5月 31 01:37 file2
2)改变指定目录以及其子目录下的所有文件的群组属性
[root@localhost ~]# cp -R /etc/ ./
[root@localhost ~]# ll
总用量 24
-rw-------. 1 root root 1293 5月 30 12:28 anaconda-ks.cfg
drwxr-xr-x. 74 root root 8192 5月 31 01:46 etc
-rw-r--r--. 1 user4 group1 1304 5月 31 01:37 file1
-rw-r--r--. 1 root user4 1304 5月 31 01:37 file2
[root@localhost ~]# chgrp group1 etc/
[root@localhost ~]# ll
总用量 24
-rw-------. 1 root root 1293 5月 30 12:28 anaconda-ks.cfg
drwxr-xr-x. 74 root group1 8192 5月 31 01:46 etc
-rw-r--r--. 1 user4 group1 1304 5月 31 01:37 file1
-rw-r--r--. 1 root user4 1304 5月 31 01:37 file2
[root@localhost ~]# cd etc/
[root@localhost etc]# ll
总用量 1036
-rw-r--r--. 1 root root 16 5月 31 01:46 adjtime
-rw-r--r--. 1 root root 1518 5月 31 01:46 aliases
-rw-r--r--. 1 root root 12288 5月 31 01:46 aliases.db
drwxr-xr-x. 2 root root 236 5月 31 01:46 alternatives
-rw-------. 1 root root 541 5月 31 01:46 anacrontab
-rw-r--r--. 1 root root 55 5月 31 01:46 asound.conf
drwxr-x---. 3 root root 43 5月 31 01:46 audisp
drwxr-x---. 3 root root 83 5月 31 01:46 audit
.....其他的略
[root@localhost etc]# cd ../
[root@localhost ~]# chgrp -R group1 etc
[root@localhost ~]# cd etc/
[root@localhost etc]# ll
总用量 1036
-rw-r--r--. 1 root group1 16 5月 31 01:46 adjtime
-rw-r--r--. 1 root group1 1518 5月 31 01:46 aliases
-rw-r--r--. 1 root group1 12288 5月 31 01:46 aliases.db
drwxr-xr-x. 2 root group1 236 5月 31 01:46 alternatives
..........其他的略
执行效果相同:
chgrp -R group1 d1
chown -R :zwm d1
6.3 改变文档权限
chmod:change mode
chmod命令用于改变linux系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
6.3.1 符号类型改变档案权限
命令格式:
参数:权限范围 u :目录或者文件的当前的用户 g :目录或者文件的当前的群组 o :除了目录或者文件的当前用户或群组之外的用户或者群组 a :所有的用户及群组
符号类型的适合加减权限,不适合设定。
示例:
1)设置文件拥有者(读、写、执行权),组拥有(*读、写、执行权*),其他拥有者组拥有(*读、写、执行权*)
[root@localhost ~]# chmod u=rwx,g=rwx,o=rwx file1
[root@localhost ~]# ll
总用量 24
-rw-------. 1 root root 1293 5月 30 12:28 anaconda-ks.cfg
drwxr-xr-x. 74 root group1 8192 5月 31 01:46 etc
-rwxrwxrwx. 1 user4 group1 1304 5月 31 01:37 file1
-rw-r--r--. 1 root user4 1304 5月 31 01:37 file2
2)给 文件所有用户组加可执行权
[root@localhost ~]# chmod a+x file2
[root@localhost ~]# ll
总用量 24
-rw-------. 1 root root 1293 5月 30 12:28 anaconda-ks.cfg
drwxr-xr-x. 74 root group1 8192 5月 31 01:46 etc
-rwxrwxrwx. 1 user4 group1 1304 5月 31 01:37 file1
-rwxr-xr-x. 1 root user4 1304 5月 31 01:37 file2
6.3.2 数字类型改变档案权限
命令格式:
chmod [参数]三位权限数字 文件或目录
参数:-R 处理指定目录以及其子目录下的所有文件
数字与字符对应关系如下:r=4,w=2,x=1
若要rwx属性则4+2+1=7若要rw-属性则4+2=6;若要r-x属性则4+1=5。
示例:
1)设置文件拥有者(读、写、执行权),组拥有(读、执行权),其他拥有者组拥有(读权)
[root@localhost ~]# chmod 754 file1
[root@localhost ~]# ll
总用量 24
-rw-------. 1 root root 1293 5月 30 12:28 anaconda-ks.cfg
drwxr-xr-x. 74 root group1 8192 5月 31 01:46 etc
-rwxr-xr--. 1 user4 group1 1304 5月 31 01:37 file1
-rwxr-xr-x. 1 root user4 1304 5月 31 01:37 file2
2)*设置目录及其子目录 拥有者(读、写、执行权),组拥有(****读、写、执行权****),其他没有权限*
[root@localhost ~]# chmod -R 770 etc/
[root@localhost ~]# ll ./etc/
总用量 1036
-rwxrwx---. 1 root group1 16 5月 31 01:46 adjtime
-rwxrwx---. 1 root group1 1518 5月 31 01:46 aliases
-rwxrwx---. 1 root group1 12288 5月 31 01:46 aliases.db
drwxrwx---. 2 root group1 236 5月 31 01:46 alternatives
-rwxrwx---. 1 root group1 541 5月 31 01:46 anacrontab
-rwxrwx---. 1 root group1 55 5月 31 01:46 asound.conf
drwxrwx---. 3 root group1 43 5月 31 01:46 audisp
drwxrwx---. 3 root group1 83 5月 31 01:46 audit
drwxrwx---. 2 root group1 22 5月 31 01:46 bash_completion.d
7 输入输出重定向 和 管道
标准重定向符号
> 输出重定向到一个文件或设备 覆盖原来的文件
>> 输出重定向到一个文件或设备 追加原来的文件
< 输入重定向到一个程序
标准错误重定向符号
2> 将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 b-shell
2>> 将一个标准错误输出重定向到一个文件或设备 追加到原来的文件
2>&1 将一个标准错误输出重定向到标准输出
7.1 输出重定向
将标准输出到屏幕的信息重定向输出到指定文件内。
为何要使用命令输出重导向 • 当屏幕输出的信息很重要,而且我们需要将他存下来的时候; • 背景执行中的程序,不希望他干扰屏幕正常的输出结果时; • 一些系统的例行命令(例如写在 /etc/crontab 中的文件)的执行结果,希望他可以存下来时; • 一些执行命令,想查看错误信息时; • 错误讯息与正确讯息需要分别输出时。
常用输出重定向cmd > file 把 stdout 重定向到 file 文件中;cmd >> file 把 stdout 重定向到 file 文件中(追加);
cmd 1> file 把 stdout 重定向到 file 文件中;cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中;
cmd 2> file 把 stderr 重定向到 file 文件中;cmd 2>> file 把 stderr 重定向到 file 文件中(追加);
cmd >> file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中(追加);
案例 :
[user4@localhost ~]$ cat file1
java
hadoop
HTML
jQuery
hello
[user4@localhost ~]$ cat file1 > log1 <-- 标准输出重定向
[user4@localhost ~]$ cat log1
java
hadoop
HTML
jQuery
hello
[user4@localhost ~]$ cat file1 2 > log1 <-- 注意错误输出 2 > 中间没有空格
cat: 2: 没有那个文件或目录
[user4@localhost ~]$ cat file1 2> log1 <-- 错误输出
java
hadoop
HTML
jQuery
hello
[user4@localhost ~]$ cat file1000 2> log1
[user4@localhost ~]$ cat log1
cat: file1000: 没有那个文件或目录
[user4@localhost ~]$ cat file >> log1 2>&1 <-- 错误与输出都输出到一个文件中去
[user4@localhost ~]$ cat log1
cat: file1000: 没有那个文件或目录
cat: file: 没有那个文件或目录
[user4@localhost ~]$ cat file1 >> log1 2>&1
[user4@localhost ~]$ cat log1
cat: file1000: 没有那个文件或目录
cat: file: 没有那个文件或目录
java
hadoop
HTML
jQuery
hello
[user4@localhost ~]$ cat file1 >> log1 2> log2 <-- 错误与输出进入不同的文件中
[user4@localhost ~]$ cat log1
cat: file1000: 没有那个文件或目录
cat: file: 没有那个文件或目录
java
hadoop
HTML
jQuery
hello
java
hadoop
HTML
jQuery
hello
[user4@localhost ~]$ cat log2
[user4@localhost ~]$ cat file100000 >> log1 2> log2
[user4@localhost ~]$ cat log2
cat: file100000: 没有那个文件或目录
向文件中写入/etc/profile的内容,之后统计注释掉的行数cat /etc/profile > file3 2>&1cat file3 | grep -E '^#' |nlcat file3 | grep -E '^#' |wc -l
7.2 输入重定向:cat
将标准从键盘输入改为从文件输入。
cat命令的用途是连接文件或标准输入并打印。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。
下面简单说明几种使用方式和作用
1)cat << EOF,以EOF输入字符为标准输入结束:
2)cat > filename,创建新文件,并把标准输入输出到filename文件中,以ctrl+d作为输入结束:
3)cat > filename << EOF,以EOF作为输入结束,其中EOF可以是任何字符串,和ctrl+d的作用一样:
如何进行标准的输入
[user4@localhost ~]$ cat << EOF
> 1
> 2
> 3
> 4
> 5
> EOF
1
2
3
4
5
7.3 管道符号:|
利用Linux所提供的管道符 “|” 将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为 第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。
管道命令右边命令,必须能够接收标准输入流命令才行。
[user4@localhost ~]$ cat passwd | grep user*
user2:nbsp;x:nbsp;1001:nbsp;1000:nbsp;:nbsp;/home/user2:nbsp;/bin/bash
user3:nbsp;x:nbsp;1002:nbsp;1000:nbsp;:nbsp;/home/user3:nbsp;/bin/bash
user4:nbsp;x:nbsp;1003:nbsp;1006:nbsp;:nbsp;/home/user4:nbsp;/bin/bash
user5:nbsp;x:nbsp;1004:nbsp;1007:nbsp;:nbsp;/home/user5:nbsp;/bin/bash
sysuser1:nbsp;x:nbsp;997:nbsp;995:nbsp;:nbsp;/home/sysuser1:nbsp;/bin/bash
nologinuser1:nbsp;x:nbsp;1005:nbsp;1008:nbsp;一个特殊的普通用户:nbsp;/userhome/user1:nbsp;/sbin/nologin
nologinuser2:nbsp;x:nbsp;1006:nbsp;1009:nbsp;一个特殊的普通用户:nbsp;/userhome/user1:nbsp;/sbin/nologin
nologinuser3:nbsp;x:nbsp;1007:nbsp;1010:nbsp;一个特殊的普通用户:nbsp;/userhome/user3:nbsp;/sbin/nologin