第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等。
实践过程:
法 :
[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/
版权声明:本文内容为依据老男孩教育的视频教程整理而来,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
第05课 Linux命令初探(一)的更多相关文章
- 【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握
内容简介 1.第二部分第二课:命令行,世界尽在掌握 2.第二部分第三课预告:文件和目录,组织不会亏待你 命令行,世界尽在掌握 今天的标题是不是有点霸气侧漏呢? 读者:“小编,你为什么每次都要起这么非主 ...
- L014-第三关课前linux命令及基础知识考试手把手实战解答小节
又是一周啊,以后保持一周一个微博吧. 这是一个堂解答考试题的课,那么就以题目来展开吧! 1.如何取得/etiantian文件的权限对应的数字内容,如-rw-r--r--为644,要求用命令获得644这 ...
- linux命令基础(一课)
一.Linux命令基础 1.shell Linux系统中运行的一种特殊程序 在用户和内核之间充当'翻译官' 用户登录Linux系统时,自动加载一个shell程序 bash是Linux系统中默认使用的s ...
- 11 个很少人知道但很有用的 Linux 命令
Linux命令行吸引了大多数Linux爱好者.一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务.Linux命令和它们的转换对于Linux用户.Shell脚本程序员和管理员来说是最有 ...
- Linux命令随笔
Linux命令总结 man ==命令帮助; help ==命令的帮助(bash的内置命令); ls ==list,查看目录列表; -ld:查看目录权限; -l:(long)长格式显示属性; -F:给不 ...
- 每天一个 Linux 命令(21):find命令之xargs
在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行.但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出 ...
- 每天一个linux命令(25):linux文件属性详解
Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组.最近访问或修改的时间等内容.具体情况如下: 命令: ls -lih 输出: [root@loca ...
- Linux命令详解之—tail命令
tail命令也是一个非常常用的文件查看类的命令,今天就为大家介绍下Linux tail命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux tail命令主要用来从指定点开始将文 ...
- Linux学习心得之 linux命令
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 本篇博客是对 每日一linux命令(http://www.cnblogs.com/pe ...
随机推荐
- Cooperating sequential processes》,这篇论文提出了大名鼎鼎的概念信号量,Java里面用于线程同步的wait/notify也是信号量的一种实现。
闲话高并发的那些神话,看京东架构师如何把它拉下神坛 https://mp.weixin.qq.com/s/lAqn8CfSRta9iSvOR1Le6w
- 使用双引擎,让kbmmw 的客户端访问更方便(既给浏览器做服务,也给桌面程序做服务)
前面我们一直都讲了如何使用kbmmw smarthttpservice 给客户端提供REST 服务.主要都是返回给 浏览器访问的,如果我们使用delphi 开发桌面应用,如何使用这些服务呢?其实一切 ...
- 今日头条上看到的js面试题和答案
用js判断字符中每个字符出现的次数, 答案是var info = arr.split('').reduce((a,b)=>(console.log(a,b),a[b]++ || (a[b]=1) ...
- Why you shouldn’t connect your mobile application to a database
BY CRAIG CHAPMAN · PUBLISHED 2015-07-02 · UPDATED 2015-07-02 Working at Embarcadero, I frequently ...
- Linux 进程等待队列【转】
本文转载自:http://blog.csdn.net/dlutbrucezhang/article/details/9212067 Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制 ...
- MYSQL进阶学习笔记十:MySQL慢查询!(视频序号:进阶_23-24)
知识点十一:MySQL 慢查询的应用(23) 一.慢查询定义 MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为慢查询. 查看时间限制 show variables lik ...
- Oracle:impdb导入
最近有现场给我一份用expdp导出dmp文件,我用imp导入时,报错.因为导出dmp的数据库是11g,导入的数据库也是11g, 但客户端安装的是10g,不能用imp导入:所以只能试着用impdp导入: ...
- SPOJ:Lost and survived(multiset+并查集)
On September 22, 2004, Oceanic Flight 815 crashed on a mysterious island somewhere in the pacific. T ...
- laravel 自定义分页 offset 和 limit 的使用
laravel 本身有一个自带的快速分页方法 paginate,只需要传入每页显示多少条数据就可以 了,但是如果想使用自定义从哪里开始呢,这时候就可以使用offset 和 limit 的组合,offs ...
- CMake学习记录--list(列表操作命令)
CMake是一个跨平台的工程管理工具,能方便的把工程转换为vs各个版本.Borland Makefiles.MSSYS Makefiles.NMake Makefiles等工程,对于经常在不同IDE下 ...