第05课 Linux命令初探(一)
该篇为第一部分,主要介绍的Linux指令有:
mkdir、cd、ls、rm、touch、vi/vim、echo、cat、cp、mv、pwd、rm、rmdir
1、创建一个目录/data
提示:Windows下的目录路径样式为"d:\data\test",而Linux下的路径就是"/data/test"
命令答案:
mkdir_/data 或者 cd_/;mkdir_data <== 使用分号可以在一行内分隔两个命令,如果不加分号分隔,执行起来会报错
实践过程:
法 1:
[root@biyoulin ~]# mkdir /data
[root@biyoulin ~]# ls -ld /data <==查看data目录是否创建成功,ls 是list列表的意思,-ld 是ls的常用参数,是长格式查看目录属性
drwxr-xr-x. 2 root root 4096 Aug 14 17:07 /data
法 2:
[root@biyoulin ~]# rm -r /data <== 删除法1建立的目录ls
rm: remove directory `/data'? y <== 输入y表示确认删除,y是yes的缩写
[root@biyoulin ~]# cd / <==进入到根目录/下,“/”在Linux里是根的意思,即所有目录的顶点
[root@biyoulin /]# mkdir data <==创建data目录,不带斜线/,因为已经进入了“/”。
[root@biyoulin /]# ls -ld data <==查看data目录本身
drwxr-xr-x. 2 root root 4096 Aug 14 17:07 data
总结: mkdir == make directory 创建目录 cd == change directoty 更改目录 ls == list 列表 rm ==remove 移除
cd 后跟相对路径或者绝对路径,表示进入目录。如果不跟任何东西,会进入当前用户的家目录(home)。
相对路径:不从/开始,二是从当前目录开始。例如:data/,mnt/test
绝对路径:从/开始的目录。例如:/data,mnt/test
mkdir [-mp] [目录名称] <== 建立目录
-m: 这个参数用来指定要创建目录的权限,但是很少用,都会用chmod来处理。
如:mkdir -m 777 /tmp/test <== 即创建一个权限为777的目录
-p: 这个参数用来递归创建目录,创建给定路径中缺少的中间目录,这是mkdir的常用参数。
命令实例:
[root@biyoulin ~]# mkdir -p dir1/dir2/dir3/dir4/dir5 <== 使用“-p”选项,在创建目录的同时也创建中间缺少的目录
[root@biyoulin ~]# mkdir mydir_{1,2,3,4,5,6,7,8,9} <== 与shell通配符搭配使用,批量创建“mydir_1”到“mydir_9”共9个目录;
2、在/data下面建立一个文件test.txt
命令答案:
touch_/data/test.txt 或者 cd_/data;touch_testxtxt
拓展:创建文件也可以用echo等,只不过touch是专业的。例如 "echo > /data/test.txt" 或者 "> /data/test.txt"也可以创建文件。当然还有很多可以间接创建文件的命令,如vi,cat等。
实践过程:
法 1:
[root@biyoulin ~]# touch /data/test.txt <== 在/data目录下创建test.txt
[root@biyoulin ~]# ls -l /data/test.txt <== 查看创建的test.txt,注意没有上文提到的-d参数,-d参数意义为仅显示目录名,而不显示目录下的内容列表。显示符号连接文件本身,而不显示其所指向的目录列表
-rw-r--r--. 1 root root 0 Aug 15 00:17 /data/test.txt
[root@biyoulin ~]# cd /data
[root@biyoulin data]# touch test.txt
[root@biyoulin data]# ls -l /data/test.txt
-rw-r--r--. 1 root root 0 Aug 15 00:18 /data/test.txt <== 如果同名文件存在,不会提示页不会覆盖,会更新文件的时间戳
总结:
touch == 有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建新的空文件。
路径分隔符区别:
Windows的目录分隔 D:\PIC\test
Linux 的目录分隔 /data/test
3、为test.txt增加内容为“I am studing Linux.”
法1:常规编辑方法
[root@biyoulin data]# vi test.txt <== 进入vi编辑器(默认命令模式),点击a或i(insert) 进入编辑模式,敲入内容“I am studing Linux.”,然后按键盘上的esc键退出编辑模式(进入到命令模式),最后敲“:wq”保存并退出。wq解释为write quit,就是写入后退出编辑器的意思。vi就是类似记事本一样的Linux下的常用编辑器,如果想功能更丰富可以用vim替代vi。
法2:单行文本插入常用命令,内容都是放到文件内的尾部
[root@biyoulin data]# echo 'I am studing linux.'>>/data/test.txt <== 单行文本追加到文件结尾,特殊的编辑文件方法,通过echo命令使用单引号把引号的内容通过>>追加到/data/test.txt,这个在企业很常用。
[root@biyoulin data]# cat /data/test.txt <== 查看追加的结果
I am studing linux
I am studing linux.
说明:echo 是一个打印输出的常用命令,配合“>或>>”可以为文件覆盖及追加内容,这个命令需要重点掌握。“>”意思为重定向,会清除文件里所有以前的数据,“>>”为内容追加,只在文件尾部追加需要的内容,还有一个较复杂不常用的类似命令printf。
法3:写脚本常用,追加多行,内容都是放到文件的尾部
[root@biyoulin data]# cat >>/data/test.txt <<EOF
> I am studing Linux.
> EOF <== 结尾的EOF要顶格写,EOF也可以用别的字符替代,只要是一对就好。
[root@biyoulin data]# cat /data/test.txt <== 查看追加的结果
I am studing linux
I am studing linux.
I am studing Linux.
提示:
法2和法3为命令行或脚本中常使用的方法,都很重要,必须要掌握;法2用于单行文本,法3用于多行文本(文本中如果有特殊字符,如$等需要用\转义才可);
法4:
[root@biyoulin ~]# cat >>/data/test.txt <== 编辑新文件
echo 'I am biyoulin'
^C <== 按Ctrl+c组合键结束编辑。此法作为特殊编辑方法,作为扩展知识面提及
[root@biyoulin ~]# cat /data/test.txt <== 查看追加的结果
I am studing linux
I am studing linux.
I am studing Linux.
echo 'I am biyoulin' <== 追加的内容
总结:
vi,vim,echo,cat 这几个是企业常见的编辑文件的命令。
echo 是一个打印输出的常用命令,配合“>或>>”可以为文件覆盖及追加内容。
命令“echo $PATH”为打印出PATH的值
重定向和标准输入、输出:
重定向:意思是将“数据传到其它地方”,将某个命令执行后本应该显示在屏幕上的数据,传输到其它地方。执行命令时,这个命令可能会通过读入数据,经过处理之后,在将数据输出到屏幕。
>或1> 输出重定向 <== 把前面输出的东西输入到后边的文件中,会删除文件原有内容
>>或1>> 追加重定向 <== 把前面输出的东西追加到后边的文件中,不会删除文件原有内容
<或<0 输入重定向 <== 用于改变命令的输入,后面指定输入的内容,前面跟文件名
<<或<<0 追加输入重定向 <== 后跟字符串,用来表示“输入结束”,也可用Ctrl+c来结束输入
2> 错误重定向 <== 把错误信息输入到后边的文件中,会删除文件原有内容
2>> 追加错误重定向 <== 把错误信息追加到后边的文件中,不会删除文件原有内容
标准输入(stdin): 代码为0,使用<或<<,数据流向从右向左;
标准正常输出(stdout):代码为1,使用>或>>,数据流向从左向右;
标准错误输出(stderr): 代码为2,使用2> 或2>>.
范例:
[root@biyoulin ~]# date 1>/data/test.txt <== 标准输出范例,将时间和日期信息输入到/data/test.txt中
[root@biyoulin ~]# cat /data/test.txt <== 查看文件信息
Wed Aug 15 21:42:47 CST 2018
[root@biyoulin ~]# echo 111 >oldboy.txt <==标准输出范例
[root@biyoulin ~]# cat oldboy.txt
111
[root@biyoulin ~]# echo 111 2>oldboy.txt
111
[root@biyoulin ~]# cat oldboy.txt
[root@biyoulin ~]# echol 111 2>oldboy.txt <== 标准错误输出案例
[root@biyoulin ~]# cat oldboy.txt <== 查看文件内容,错误日志信息已经存放在文件里
-bash: echol: command not found
[root@biyoulin ~]# echo 111 1>oldboy.txt 2>oldgirl.txt <== 如果输出正确,将内容重定向至oldboy.ext中;如果输出不正确,将错误提示信息重定向至oldgirl.txt中
[root@biyoulin ~]# cat oldboy.txt
111
[root@biyoulin ~]# ech 111 1>oldboy.txt 2>oldgirl.txt
[root@biyoulin ~]# cat oldgirl.txt
-bash: ech: command not found
[root@biyoulin ~]# echo 'Hello,My name is biyoulin' 2>log.txt 1>log.txt <== 将正确和错误的信息重定向至同一个文件
[root@biyoulin ~]# cat log.txt
Hello,My name is biyoulin
[root@biyoulin ~]# echol 'Hello,My name is biyoulin' 2>log.txt 1>log.txt
[root@biyoulin ~]# cat log.txt
-bash: echol: command not found
[root@biyoulin ~]# echol 'Hello,My name is biyoulin' &>log.txt <== 通过"&>"将正确和错误的信息重定向至同一个文件
[root@biyoulin ~]# cat log.txt
-bash: echol: command not found
[root@biyoulin ~]# echo 'Hello,My name is biyoulin' &>log.txt
[root@biyoulin ~]# cat log.txt
Hello,My name is biyoulin
4、把history.txt文件拷贝到/tmp下
答案:
[root@biyoulin ~]# cd data
[root@biyoulin data]# ls
a b byl c command.txt d e history.txt
[root@biyoulin data]# cp history.txt /tmp/
总结:
cp == copy 用来将一个或者多个源文件或者目录复制到指定的目的文件或目录;他可以将单个源文件复制成一个指定文件名的具体文件或一个已经存在的目录;cp指令还支持同时复制多个文件,当一次复制多个文件是,目标文件参数必须是一个已经存在的目录,都则将出现错误。
cp [-adfilprsu] [源文件] [目标文件]
-a: 保持源文件的原有结构和属性,与选项‘-dpr’的功能相同;
-d: 如果复制的源文件是符号链接,金复制符号链接本身,而且保留符号链接所指向的目录文件或者目录
-f: 强制覆盖已经存在的目标文件,而不提示用户进行确认。为防止覆盖重要文件,通常不使用此选项
-i: 在覆盖已存在的目标文件前提示用户进行确认。使用此选项可以防止覆盖掉重要文件
-l: 为源文件创建硬链接(与‘ln’指令的功能相同)。此选项可以节省硬盘空间,但是要求源文件和目的文件必须在同一分区(或文件系统)上;
-p: 复制文件时保持源文件的所有者、权限信息和时间属性;
-r或-R:对目录进行复制操作,此选项一递归的操作方式,将指定目录及其子目录中的所有文件复制到指定的目标目录
-s: 不进行真正的复制操作,仅为源文件创建爱你符号链接(与“ln -s”指令的功能相同);
-u: 当目标文件不存在或者源文件毕目标文件新时才进行复制操作,否则,不进行复制。
[源文件]:指定文件列表。默认情况下,cp指令不能复制目录,如果要复制目录,则必须使用-r选项;
[目标文件]:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
5、把/data目录移动到/root下
命令答案:mv_/data_/root/ <== 移动目录是,原文件目录结尾不要多余斜线,虽然此处是可以的,但是我们要养成好的规范和习惯。
总结: mv == move <== 该指令用于移动文件或为文件改名
mv [-ifub] [源文件/源目录] [目标文件/目标目录]
-i: 在覆盖已存在的目标文件前不提示用户确认,防止覆盖重要的文件;
-f: 在覆盖已存在的目标文件前不提示用户确认。此选项具有一定的风险,可能导致覆盖重要的文件;
-u: 当源文件毕目标文件新或者目标文件不存在时,才执行移动操作;
-b: 当目标文件存在时,覆盖前,围棋创建一个备份;
说明:
- 如果“目标文件”是文件则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标目录”下;
- 在同一文件系统(即同一硬盘分区)中,无论移动的文件有多大,速度都非常快的;但是,如果在两个不同的Linux硬盘分区间移动文件,速度将明显降低。这是因为,在同一个分区移动文件时,仅仅需要修改文件对应的指针即可;但是,在不同分区间移动文件时,必须要执行复制的操作,所以执行导致速度明显降低。
- 为防止误操作二覆盖已经存在的文件,在使用mv指令时,最好加上“-i”选项。绝大多数的Linux发行版都为mv指令设置了命令别名“alias mv='mv -i'”,可以直接使用mv指令而无须添加“-i”选项。
命令实例:
[root@biyoulin ~]# mv oldfile newfile <== 将文件“oldfile”改名为“newfile”
[root@biyoulin data]# ls <== 查看目录下内容
newfilea newfileb newfilec newfiled newdirectory
[root@biyoulin data]# mv newfile[a-d] newdirectory/ <== 将4个文件移动到指定目录,本例中的“newfile[a-d]”为shell的通配符,匹配了4个文件
6、进入root目录下的data目录,删除history.txt
命令答案:cd_/root/data/;rm_history.txt <== rm指令用于删除指定的文件和目录
答案示例:
[root@biyoulin ~]# cd /root/data <== 进入root目录下的data目录 [root@biyoulin data]# pwd <== (print work directory)以绝对路径的方式显示用户当前工作目录 /root/data [root@biyoulin data]# ls <== 显示当前目录里的内容 a b byl c command.txt d e history.txt [root@biyoulin data]# rm history.txt <== 使用rm指令删除指定文件 rm: remove regular file `history.txt'? y <== 确认删除操作,输入y确认删除 [root@biyoulin data]# ls <== 显示当前目录里的内容,已经没有了history.txt文件 a b byl c command.txt d e
命令总结:
pwd == print work directory <== 打印当前工作目录
rm == remove <== 删除给定的文件和目录
命令详解:
rm [-firv] [文件]
-i: 以交互式的方式,提示用户进行确认是否删除文件。用户可以使用“n”和“y”进行回答。“n”表示不删除,"y"表示确认删除。使用“-i”选项可以防止误操作;
-f: 强制执行删除操作,而不提示用户进行确认。此选项同一造成误操作,要慎用;
-r或-R: 用递归的反噬删除目录及目录下的所有内容;
-v: 显示指令的详细执行过程;
[文件]:指定被删除的文件列表,如果参数中含有目录,则必须加上“-r”或者“-R”选项
说明:
- 大多数的Linux发行版已经设置了带“-i”选项的rm 指令的别名“alias rm='rm -i'”,用户在使用rm 指令时不必添加“-i”选项;
- 如果要删除的文件较多,可以结合shell的通配符,以提高命令行的输入效率;
- 为防止误操作二覆盖已经存在的文件,在使用mv指令时,最好加上“-i”选项。绝大多数的Linux发行版都为mv指令设置了命令别名“alias mv='mv -i'”,可以直接使用mv指令而无须添加“-i”选项。
命令实例:
[root@biyoulin data]# touch file_{1,2,3}
[root@biyoulin data]# ls
file_1 file_2 file_3
[root@biyoulin data]# rm -v -f file_1 file_2 file_3 <== 如果同时删除多个文件则需要确认多次,为了提高效率使用“-f”选项;“-v”选项用于显示指令的详细执行过程;
removed `file_1'
removed `file_2'
removed `file_3' <== 显示的删除过程
[root@biyoulin data]# touch file_{1,2,3}
[root@biyoulin data]# rm -v -f file_[1-3] <== 使用shell通配符删除多个文件
removed `file_1'
removed `file_2'
removed `file_3'
[root@biyoulin data]# tree <== 使用tree指令显示当前目录下的所有文件及目录的层级关系
.
`-- dir1
`-- dir2
`-- test.txt
2 directories, 1 file <== 统计显示总共有2个目录和一个文件
[root@biyoulin data]# rm -f -R -v dir1/ <== 使用“-R” 选项,实现递归删除目录及其目录下的所有内容;“-f” 无确认信息,强制删除目录;“-v”显示命令执行详细过程;
removed `dir1/dir2/test.txt'
removed directory: `dir1/dir2'
removed directory: `dir1' <== 从上面的输出可以发现,rm指令首先删除“dir1”目录下的所有文件,然后在删除“dir1”目录
特别提示:
- 初学者尽量不要用rm命令,可以使用mv替代rm,也就是把文件移动到/tmp下,然后等/tmp分区要满时一次性删除,减少犯错,这种把/tmp目录当做回收站使用对初学者是个不错的选择。
- 对于文件的删除禁止使用“rm -fr 文件名”这种杀鸡用牛刀的做法,最多是“rm -f 文件名”。“rm -fr” 一般用来强制删除目录不提示,非常危险,大多数的高手都出过严重的错误。
7、退出到上级目录,删除data目录
答案:
法1:
[root@biyoulin data]# cd ../ <=="cd .."或者“cd ../”为返回上一级目录 [root@biyoulin ~]# rm -r data <== 删除目录及目录下的文件和目录 rm: remove directory `data'? y <== 确认删除操作,输入y确认删除
法2:
[root@biyoulin ~]# rmdir test <== 使用rmdir删除test目录,test目录为空
总结: “ .. ” 相对路径:表示上一级目录,例如:/mnt/test,mnt就是test的上一级目录; “ . ” 绝对路径:表示当前目录,及当前命令行的目录。
rmdir == remove directory <== 删除空目录,当要删除非空目录是,需要使用带有“-R”选项的rm指令
rmdir [-pv] [目录名]
-p或--parents: 用递归的操作方式删除指定的目录路径中的所有父级目录。要求路径中出现的目录中没有普通文件,否则导致出错;
-v或--version: 显示指令的详细执行过程;
[目录名]: 要删除的空目录列表。当删除多个空目录时,目录名之间使用空格隔开。
命令实例:
[root@biyoulin data]# tree <== 使用tree指令显示当前目录下的所有文件及目录的层级关系
.
└── dir1
└── file.txt
1 directory, 1 file
[root@biyoulin data]# rmdir dir1
rmdir: failed to remove `dir1': Directory not empty <== 报错信息表明,rmdir指令不能用来
删除非空目录
[root@biyoulin data]# rm -R dir1 <== 使用带“-R”选项的rm指令删除非空目录
rm: descend into directory `dir1'? y
rm: remove regular empty file `dir1/file.txt'? y
rm: remove directory `dir1'? y
[root@biyoulin data]# ls
[root@biyoulin data]# mkdir -p -v dir1/dir2/dir3 <== 使用mkdir创建一个小型的目录树
mkdir: created directory `dir1'
mkdir: created directory `dir1/dir2'
mkdir: created directory `dir1/dir2/dir3'
[root@biyoulin data]# rmdir -p -v dir1/dir2/dir3 <== 使用“-p”选项,递归删除目录树
rmdir: removing directory, `dir1/dir2/dir3'
rmdir: removing directory, `dir1/dir2'
rmdir: removing directory, `dir1'
作者:biyoulin
出处:http://www.cnblogs.com/biyoulin/
版权声明:本文内容为依据老男孩教育的视频教程整理而来,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。