对应练习
路径练习
#终端的默认路径 ~
root@kali:~#
#表示去根目录
root@kali:~# cd /
#表示去用户的家目录
root@kali:/# cd ~
#表示回到刚刚工作的目录,这里指根目录
root@kali:~# cd -
/
#不加路劲,默认代表去家目录
root@kali:/# cd
#代表去上级目录
root@kali:~# cd ..
新建目录——mkdir练习
#表示到/tmp目录下
root@kali:~# cd /tmp
#建立名为test的新目录,
root@kali:/tmp# mkdir test
#成功
#建立test1下test2下的test3新目录
root@kali:/tmp# mkdir test1/test2/test3
mkdir: cannot create directory ‘test1/test2/test3’: No such file or directory
#失败了,系统不能建立这个目录
#原来是要建test3上层没先建test2和test1的原因,这是需要加【-p】
root@kali:/tmp# mkdir test1/test2/test3 -p
复制——cp练习
练习一:用root身份,将家目录下的.bashrc复制/tmp下,并更名为bashrc
root@kali:~# cp ~/.bashrc /tmp/bashrc
#用-i在复制遍
root@kali:~# cp ~/.bashrc /tmp/bashrc -i
cp: overwrite '/tmp/bashrc'? n 《==n不覆盖,y为覆盖
练习二:切换目录到/tmp,并将/var/log/wtmp复制到/tmp且观察属性
root@kali:~# cd /tmp
#不加参数
root@kali:/tmp# cp /var/log/wtmp . 《==想要复制到目前的目录用"."
#查看属性,两者对比下
root@kali:/tmp# ls /var/log/wtmp wtmp -l
-rw-rw-r-- 1 root utmp 16896 Dec 17 06:38 /var/log/wtmp
-rw-r--r-- 1 root root 16896 Dec 17 06:51 wtmp
#注意上面,文件的属性(建立时间),权限(用户,读写)会改变
#如果我们要文件的特性一起复制,可以加 -a
root@kali:/tmp# cp -a /var/log/wtmp wtmp_2
root@kali:/tmp# ls /var/log/wtmp wtmp_2 -l
-rw-rw-r-- 1 root utmp 16896 Dec 17 06:38 /var/log/wtmp
-rw-rw-r-- 1 root utmp 16896 Dec 17 06:38 wtmp_2
#现在文件特性也一样了
练习三:复制/etc/这个目录下的所有内容到/tmp下面
#直接复制看看
root@kali:/tmp# cp /etc /tmp
cp: -r not specified; omitting directory '/etc' 《 ==目录不能直接复制,加-r使可以复制目录
#-r复制目录,但是,文件与目录的权限可能会改变,所以【备份】用【cp -a /etc /tmp】
root@kali:~# cp -r /etc /tmp
练习四:将练习一复制的 bashrc 创建一个连结档 (symbolic link)
#到/tmp目录
root@kali:/tmp# cd /tmp
#
root@kali:/tmp# ls -l bashrc
-rw-r--r-- 1 root root 3391 Dec 18 08:38 bashrc 《==先观察一下文件情况
#建立符号连接,即快捷键
[root@www tmp]# cp -s bashrc bashrc_slink
#建立硬链接
root@kali:/tmp# cp -l bashrc bashrc_hlink
root@kali:/tmp# ls -l bashrc*
-rw-r--r-- 2 root root 3391 Dec 18 08:38 bashrc 《==与上面记录的文件不太一样了!
-rw-r--r-- 2 root root 3391 Dec 18 08:38 bashrc_hlink
lrwxrwxrwx 1 root root 6 Dec 18 08:40 bashrc_slink -> bashrc
练习五:若 ~/.bashrc 比 /tmp/bashrc 新才复制过来
#我们前面已经有/tmp/bashrc目录了
root@kali:/tmp# cp -u ~/.bashrc /tmp/bashrc
#看看文件的建立时间
root@kali:/tmp# ls -l bashrc
-rw-r--r-- 2 root root 3391 Dec 18 08:38 bashrc 《==与上面记录的一样
# 这个 -u 的特性,是在目标文件与来源文件有差异时,才会复制的。
# 所以,比较常被用于『备份』的工作当中
练习六:将练习四造成的 bashrc_slink 复制成为 bashrc_slink_1 与bashrc_slink_2
#看看直接复制符号链接
[root@www tmp]# cp bashrc_slink bashrc_slink_1
#复制符号链接文件属性而非文件本身
[root@www tmp]# cp -d bashrc_slink bashrc_slink_2
#查看文件
[root@www tmp]# ls -l bashrc bashrc_slink*
-rw-r--r-- 2 root root 3391 Dec 18 08:38 bashrc
lrwxrwxrwx 1 root root 6 Dec 18 08:40 bashrc_slink -> bashrc
-rw-r--r-- 1 root root 3391 Dec 18 09:17 bashrc_slink_1 《==复制成原文件了
lrwxrwxrwx 1 root root 6 Dec 18 09:17 bashrc_slink_2 -> bashrc 《==是链接文件
# 这个例子也是很有趣喔!原本复制的是链接文件,但是却将链接的实际文件复制过来了
# 也就是说,如果没有加上任何选项时,cp复制的是原始文件,而非链接文件的属性!
# 若要复制链接文件的属性,就得要使用-d 的选项了,如 bashrc_slink_2 所示。
练习七:将家目录的 .bashrc 及 .bash_history 复制到 /tmp 底下
[root@www tmp]# cp ~/.bashrc ~/.bash_history /tmp
# 可以将多个数据一次复制到同一个目录去!最后面一定是目录!
移除文件或目录——rm练习
练习一:将刚刚在 cp 的范例中创建的 bashrc 删除掉!
#如果没有就用cp范例在建一个
root@kali:~# cd /tmp
root@kali:/tmp# rm -i bashrc
rm: remove regular file 'bashrc'? y
# 如果加上 -i 的选项就会主动询问,避免你删除到错误的档名!
练习二:透过万用字节*的帮忙,将/tmp底下开头为bashrc的档名通通删除:
root@kali:/tmp# rm -i bashrc*
# 注意那个星号,代表的是 0 到无穷多个任意字节喔!很好用的东西!
练习三:将 cp 范例中所创建的 /tmp/etc/ 这个目录删除掉!
root@kali:/tmp# rmdir /tmp/etc
rmdir: etc: Directory not empty 《== 删不掉,因为这不是空的目录!
root@kali:/tmp# rm -r /tmp/etc
rm: descend into directory '/tmp/etc'? y
....(中间省略)....
# 因为身份是 root ,默认已经加入了 -i 的选项,所以你要一直按 y 才会删除!
# 如果不想要继续按 y ,可以按下[ctrl+c] 来结束 rm 的工作,这是一种保护的动作,
#如果确定要删除掉此目录而不要询问,可以这样做:
root@kali:/tmp# \rm -r /tmp/etc
# 在命令前加上反斜线,可以忽略掉 alias 的指定选项喔!至於 alias 我们在bash再谈!
练习四:删除一个带有 - 开头的文件
root@kali:/tmp# touch ./-aaa- 《==touch这个命令可以创建空文件
root@kali:/tmp# ls -l
-rw-r--r-- 1 root root 0 Dec 21 07:09 -aaa- 《==文件大小为0,所以是空文件
root@kali:/tmp# rm -aaa-
rm: invalid option -- 'a'
Try 'rm ./-aaa-' to remove the file '-aaa-'. 《== 因为 "-" 是选项,所以系统误判了!
Try 'rm --help' for more information.
#正确删除文件
root@kali:/tmp# rm ./-aaa-
移动文件与目录,或更名——mv练习
练习一:复制一文件,创建一目录,将文件移动到目录中
[root@www ~]# cd /tmp
[root@www tmp]# cp ~/.bashrc bashrc
[root@www tmp]# mkdir mvtest
# 将某个文件移动到某个目录去
[root@www tmp]# mv bashrc mvtest
练习二:将刚刚的目录名称更名为 mvtest2
root@kali:/tmp# mv mvtest mvtest2 《== 这样就更名了
# 其实在 Linux 底下还有个有趣的命令,名称为 rename ,
# 该命令专职进行多个档名的同时更名,并非针对单一档名变更,与mv不同。请man rename。
练习三:再创建两个文件,再全部移动到 /tmp/mvtest2 当中
#复制两个文件到tmp
[root@www tmp]# cp ~/.bashrc bashrc1
[root@www tmp]# cp ~/.bashrc bashrc2
#多个文件批量移动
[root@www tmp]# mv bashrc1 bashrc2 mvtest2
# 注意到这边,如果有多个来源文件或目录,则最后一个目标档一定是『目录』,即将所有的数据移动到该目录的意思
直接查看文件内容——cat练习
练习一:检阅 /etc/issue 这个文件的内容
root@kali:/tmp# cat /etc/issue
Kali GNU/Linux Rolling \n \l
练习二:承上题,内容要加印行号
root@kali:/tmp# cat -n /etc/issue
1 Kali GNU/Linux Rolling \n \l
2
# 这对于大文件要找某个特定的行时,很有用处
# 如果不想要编排空白行的行号,可以使用『cat -b /etc/issue』
练习三:将 /etc/hosts 的内容完整的显示出来(包含特殊字节)
root@kali:/tmp# cat -A /etc/hosts
127.0.0.1^Ilocalhost$
127.0.1.1^Ikali$
$
# The following lines are desirable for IPv6 capable hosts$
::1 localhost ip6-localhost ip6-loopback$
ff02::1 ip6-allnodes$
ff02::2 ip6-allrouters$
# 使用 [tab] 与空白键的效果差不多,都是一堆空白啊!我们无法知道两者的差别。此时使用 cat -A 就能够发现那些空白的地方是什么了![tab]会以 ^I 表示,
# 断行字节则是以 $ 表示,所以你可以发现每一行后面都是 $
修改文件时间或建新档——touch练习
练习一:检阅 /etc/issue 这个文件的内容
练习一:新建一个空的文件并观察时间
[root@www ~]# cd /tmp
#建立空文件
root@kali:/tmp# touch testtouch
root@kali:/tmp# ls -l testtouch
-rw-r--r-- 1 root root 0 Dec 21 08:25 testtouch
#再建一遍
root@kali:/tmp# touch testtouch
root@kali:/tmp# ls -l testtouch
-rw-r--r-- 1 root root 0 Dec 21 08:30 testtouch 《==文件时间改了
# 在默认的状态下,如果 touch 后面的文件存在,则该文件的三个时间 (atime/ctime/mtime) 都会修改为目前的时间。若该文件不存在,则会主动的创建一个新的空的文件
练习二:将 ~/.bashrc 复制成为 bashrc,假设复制完全的属性,检查其日期
root@kali:/tmp# cp -a ~/.bashrc bashrc
#查看系统时间和文件三个日期
root@kali:/tmp# date;ls -l bashrc;ls -l --time=atime bashrc;ls -l --time=ctime bashrc
Sun 22 Dec 2019 02:27:49 AM EST
-rw-r--r-- 1 root root 3391 Dec 14 02:26 bashrc 《==这是 mtime(文件【内容数据】修改时间)
-rw-r--r-- 1 root root 3391 Dec 21 06:15 bashrc 《==这是 atime(文件【权限与属性等状态】
-rw-r--r-- 1 root root 3391 Dec 22 01:17 bashrc 《==这是 ctime(文件【读取的时间】如用cat读取文件就会更这个时间)
练习三:修改练习二的 bashrc 文件,将日期调整为两天前
#用-d将日期调整
root@kali:/tmp# touch -d "2 days ago" bashrc
#查看系统时间和文件三个日期
root@kali:/tmp# date;ls -l bashrc;ls -l --time=atime bashrc;ls -l --time=ctime bashrc
Sun 22 Dec 2019 02:31:43 AM EST
-rw-r--r-- 1 root root 3391 Dec 20 02:31 bashrc
-rw-r--r-- 1 root root 3391 Dec 20 02:31 bashrc
-rw-r--r-- 1 root root 3391 Dec 22 02:31 bashrc
# 跟练习二比较,atime/mtime,ctime是记录目前的时间
练习四:将练习三的 bashrc 日期改为 2008/08/8 8:08
用-t将自定义日期调整
root@kali:/tmp# touch -t 0808080808 bashrc
root@kali:/tmp# date;ls -l bashrc;ls -l --time=atime bashrc;ls -l --time=ctime bashrc
Sun 22 Dec 2019 02:59:56 AM EST
-rw-r--r-- 1 root root 3391 Aug 8 2008 bashrc
-rw-r--r-- 1 root root 3391 Aug 8 2008 bashrc
-rw-r--r-- 1 root root 3391 Dec 22 02:59 bashrc
程序编辑器——vim练习
* 在/tmp下建一个文件man.config将本文件夹中的man.config.txt内容复制到此;
- ①请在 /tmp 这个目录下建立一个名为 vitest 的目录;
- ②进入 vitest 这个目录当中;
- ③将 /tmp/man.config 复制到本目录底下
- ④使用 vim 开启/tmp下的 man.config 这个档案;
- ⑤在 vim 中设定一下行号;
- ⑥移动到第 43 列,向右移动 59 个字元,请问你看到的小括号内是哪个文字?
- ⑦移动到第一列,并且向下搜寻一下『 gzip 』这个字串,请问他在第几列?
- ⑧接下来,我要将 29 到 41 列之间的『小写 man 字串』改为『大写 MAN 字串』,并且一个一个挑选是否需要修改,如何下达指令?如果在挑选过程中一直按『y』, 结果会在最后一列出现改变了几个 man 呢?
- ⑨修改完之后,突然反悔了,要全部复原,有哪些方法?
- ⑩我要复制 66 到 71 这 6 列的内容(含有MANDB_MAP),并且贴到最后一列之后;
- ⑪113 到 128 列之间的开头为 # 符号的注解资料我不要了,要如何删除?
- ⑫将这个档案另存成一个 man.test.config 的档名;
- ⑬去到第 25 列,并且删除 15 个字符,结果出现的第一个单字是什麽?
- ⑭在第一行新增一行,该行内容输入『I am a student…』;
- ⑮储存后离开
vim练习答案
-
在/tmp下建一个文件man.config将本文件夹中的man.config.txt内容复制到此;
root@kali:/tmp# vim man.config 用快捷键复制和粘贴内容 -
请在 /tmp 这个目录下建立一个名为 vitest 的目录;
root@kali:/tmp# mkdir /tmp/vitest -
进入 vitest 这个目录当中;
root@kali:/tmp# cd /tmp/vitest -
将 /tmp/man.config 复制到本目录底下
root@kali:/tmp# cp /etc/man.config . -
使用 vim 开启/tmp下的 man.config 这个档案;
root@kali:/tmp# vim man.config -
在 vim 中设定一下行号;
【:set nu】 然后你会在画面中看到左侧出现数字即为行号。 -
移动到第 43 列,向右移动 59 个字元,请问你看到的小括号内是哪个文字?
先按下【43G】再按下【59→】会看到【 as 】这个单字在小括号内; -
移动到第一列,并且向下搜寻一下【 gzip 】这个字串,请问他在第几列?
先执行【1G】或【gg】后,直接输入【/gzip】,则会去到第 93 列 -
接下来,我要将 29 到 41 列之间的【小写 man 字串】改为【大写 MAN 字串】,并且一个一个挑选是否需要修改,如何下达指令?
直接【 :29,41s/man/MAN/gc 】回车,若一直按【y】最终会出现【在 13 列内置换 13 个字串】的说明。 -
修改完之后,突然反悔了,要全部复原,有哪些方法?
(1)简单的方法可以一直按【 u 】回复到原始状态,
(2)使用不储存离开【 :q! 】之后,再重新读取一次该档案; -
我要复制 66 到 71 这 6 列的内容(含有MANDB_MAP),并且贴到最后一列之后;
【66G】 然后再【 6yy 】之后最后一列会出现【复制6列】之类的说明字样。 按下【 G 】到最后一列,再给他【 p 】贴上6列! -
113 到 128 列之间的开头为 # 符号的注解资料我不要了,要如何删除?
因为 113~128 共 16 列,因此『 113G 』→『 16dd 』出现【16 fewer lines】删除 16 列,此时你会发现游标所在 113 列的地方变成 『 # Flags. 』 开头 -
将这个档案另存成一个 man.test.config 的档名;
【 :w man.test.config 】,你会发现最后一列出现 “man.test.config” [New]… 的字样。
【:wq】退出,【ls】命令查看 -
去到第 25 列,并且删除 15 个字符,结果出现的第一个单字是什麽?
【25G】之后,再给他【15x】即可删除 15 个字符,出现【 tree 】的字样; -
在第一行新增一行,该行内容输入【I am a student…】;
先【 1G 】去到第一列,然后按下大写的【 O 】便新增一列且在插入模式;开始输入【I am a student…】后, 按下[Esc]回到一般指令模式等待后续工作; -
储存后离开
【:wq】
参考来源
http://cn.linux.vbird.org/linux_basic/linux_basic.php
来源:CSDN
作者:钱小昊
链接:https://blog.csdn.net/hwoehn/article/details/103689939