本篇记录了9个命令,分别是ls,cd,psw,mkdir,rm,mv,cp,cat,nl
参考链接:https://www.cnblogs.com/peida/archive/2012/10/26/2740521.html
作用: list(显示列表)
格式:
ls [options]
option | functuion |
---|---|
-a | 显示全部路径,包括文件,文件夹 |
-l | 显示文件详细信息 |
-d | 显示directory而不是里面的文件 |
-h | 以人类能理解的语言显示文件详细信息 |
-t | 按修改的时间排序 |
使用例子:
1.寻找所有的文件并显示所有的详细信息:
ls -a -l
或者
ls -al
2.寻找以xx开头的文件
ls d*
作用: change directory
格式:
cd [Directory]
parameter | function |
---|---|
/ | 返回根目录 |
.. | 返回父级目录 |
~ | 返回home directory(是一个特定的目录,与根目录有所不同) |
- | 上一次的目录,类似于windows的返回上一级 |
补充:关于斜杠,Linux用正斜杠表示路径,反斜杠表示转义字符,所以在路径的时候不要使用反斜杠,而windows则相反,它用反斜杠表示本地路径,正斜杠表示参数
作用: 在进入了环境但是不知道这个环境属于哪一个目录的时候,可以用这个命令来获取当前目录
parameter | function |
---|---|
-P | 显示真实的物理路径而不是链接路径 |
-L | 当这个路径是连接路径就会显示(只显示链接路径) |
interlude: 如果删了某个文件还是会显示原来的目录,可以看到这里的zhou文件被删了,但是用pwd还是会显示原本的路径
作用: make directory(创建路径,不是文件噢)
格式:
mkdir [options] directory
parameter | function |
---|---|
-m | 设定权限 |
-p | 如果父目录不存在会自动创建父目录 |
-v | 每次创建新目录就会显示信息 |
使用例子:
1.在home的环境下,一条指令创建路径/ling/me,并指定权限是777,显示创建信息,ling不存在
修改权限出现问题,可能是没有登录
作用: remove(删除)
格式:
rm [options]
parameter | function |
---|---|
-r | 递归地删除这个文件以及它内部的子文件或子文件夹 |
-f | 强制性删除,不询问 |
-i | interative,互动式的,删之前会询问 |
使用例子:
1.删除文件file,系统会先询问是否删除。
rm -i log.file
默认状态的模式下是不提示的,只有不存在才会提示
2.强行删除file,系统不再提示,就算不存在也不提示
rm -f file
3.删除任何.log文件;删除前逐一询问确认
rm -i *.log
4.将 test1子目录及子目录中所有档案删除,不用-r 是无法删除目录的
rm -r test1
5.将 test2 子目录及子目录中所有档案删除,并且不用一一确认
rm -rf test1
6.实现回收站功能,即在删除的时候不直接删掉,而是将文件放到一个目录中,当用户后悔的时候可以来这里回恢复(移动操作)
步骤A: 先定义一个函数
myrm(){ D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; }
这个函数的意思是:
1.先定义D是根目录下tmp路径中的一个子路径(文件夹),路径以日期来命名
2.用mkdir来创建这个路径
3.用mv命令将当前的文件移动到路径D下
4.最后回应显示:move to D ok
步骤B: 定义好函数之后,将rm的功能改一下:
$alias rm='myrm'
步骤C: 使用rm函数,示例如下
这里我们可以看到,删除的功能变成了将文件加入回收站的功能,当需要恢复文件时,可以从这里移动回去
这里引入一个思考:如何将rm函数重置?在上面的步骤中我们将rm函数定义成了myrm(),如果我们需要把它换回原来的函数,应该怎么操作?
我的办法是:
$alias rm='rm'
作用: move(移动文件或者重命名)
格式:
mv [options] 源路径/文件 目标路径/文件
如果是文件–>文件就是重命名或者覆盖,如果是文件–>路径就是移动
parameter | funcrion |
---|---|
-i | interactive,如果存在目标文件,询问是否覆盖 |
-f | force,如果存在目标文件,直接执行不询问 |
-b | backup,如果覆盖,先备份 |
-u | 如果存在目标文件,并且源文件比目标文件更新,才会询问并更新,否则不询问也不更新 |
-t | target,这个命令使用时,目标目录在前,源路径/文件在后 |
使用例子:
1.将文件a.txt,b.txt,c.txt移动到目录test3中
mv -t test3 a.txt b.txt c.txt
或者:mv a.txt b.txt c.txt test3
2.将文件aa改名为bb,如果bb已经存在,则询问是否覆盖
mv -i aa bb
3.将文件aaa改名为bbb,即使bbb存在,也直接覆盖掉。
mv -f aaa bbb
4.将目录ling移动到ling1,跟windows资源管理器是一样的移动目录
mv ling ling1
5.移动当前文件夹下的所有文件到上一级目录
mv * ../(注意不是mv * ..)
6.把当前目录的一个子目录test1里的所有文件移动到另一个子目录test2里,
mv -r test1 test2
备注:如果test2存在就是改名
7.文件log1.txt被 log2.txt覆盖,被覆盖前做简单备份,注意-b的位置
mv log2.txt-b log1.txt
关于重命名,它并不检查你的后缀名是否有改动,你可以将1.txt重命名为test,而这个test不是路径,而是文件,可以通过文件颜色判断
作用: copy(复制),将源文件复制至目标文件,或将多个源文件复制到目标目录
格式:
cp [options]
parameter | function |
---|---|
-a | archive,此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpr参数组合 |
-b | backup |
-d | 复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。 |
-f | force,如果目标文件无法打开,则将其移除并重试(-n出现时不再需要此选项) |
-i | interactive,覆盖前询问(使-n无效) |
-l | link,链接文件而不复制 |
-L | 总是跟随符号链接 |
-r | 若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。 |
-n | 不要覆盖已存在的文件(使前面的 -i 选项失效) |
-p | 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。 |
使用例子:
1.复制单个文件file到目标目录tdir,文件在目标文件中不存在
cp file tdir
2.目标文件存在时,会询问是否覆盖
cp -i file tdir
不加-i 也可以,目标文件存在时,会询问是否覆盖。这是因为cp是cp -i 的别名。目标文件存在时,即使加了-f 标志,也还会询问是否覆盖。
3.复制整个目录sdir到tdir(当目标目录存在,当目标目录不存在两种情况下操作不同)
cp -a sdir tdir
当目标目录存在时,是将sdir整个放到tdir里面,当目标目录不存在时,直接将sdir复制一份 改名成tdir(复制并重命名)
4.复制的 log.log 建立一个连结档 log_link.log
cp -s log.log log_link.log
这个连结档相当于一个快捷方式
作用: concat(拼接)
有合并,显示,创建三大功能:
1.一次显示整个文件:cat filename
2.从键盘创建一个文件:cat > filename (只能创建新文件,不能编辑已有文件)
3.将几个文件合并为一个文件:cat file1 file2 > file
格式:
cat [options] filename
parameter | function |
---|---|
-a | –show-all ,显示所有,相当于vET |
-E | –show ends,每行结束的地方显示$ |
-n | –number,对输出的所有行编号,由1开始对所有输出的行数编号 |
-b | –number-nonblank ,对非空输出行编号 |
-s | –squeeze-blank 有连续两行以上的空白行,就代换为一行的空白行 |
-v | –show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外 |
-T, | –show-tabs ,相当于-vT将跳格字符显示为 ^I |
-t | 与 -vT 等价 |
-e | 与-vE等价 |
使用例子:
1.把 log2012.log 的文件内容加上行号后输入 log2013.log 这个文件里
cat -n log2012.log log2013.log
2.把 log2012.log 和 log2013.log 的文件内容加上行号(空白行不加)之后将内容附加
到 log.log 里。
cat -b log2012.log log2013.log log.log
3.把 log2012.log 的文件内容加上行号后输入 log.log 这个文件里
cat -n log2012.log log2013.log
4.使用here doc来生成文件,文件内容hello world
cat >hello.txt <<EOF
heredoc>hello world
heredoc>EOF
5.反向列示log.txt
tac log.txt
作用: n the line(连接,显示)
格式:
nl [options] [document]
options主要有两个参数b与n
parameter | function |
---|---|
-b | 指定行号指定的方式 |
-n | 列出行号表示的方法 |
-w | 辅助n rz,用于指定行号栏位的占用位数(几个0) |
具体参数:
parameter | function |
---|---|
-b a | 表示不论是否为空行,也同样列出行号(类似 cat -n) |
-b t | 如果有空行,空的那一行不要列出行号(默认值) |
parameter | function |
---|---|
-n ln | 行号在萤幕的最左方显示 |
-n rn | 行号在萤幕的最右方显示,不加0 |
-n rz | 行号在萤幕的最右方显示,加0 |
使用例子:
1.用 nl 列出a.txt 的内容
nl a.txt
此操作空文本不加行号
2.用 nl 列出 log2012.log 的内容,空本行也加上行号
nl -ba a.txt
3.让行号前面自动补上0,统一输出格式,调整行号位数为3位。
nl -rz -w 3 a.txt