目录
一、Linux下虚拟机的使用
对于初学者来说,由于更改系统文件的文件后会导致系统被破坏,所以为了防止误操作情况下破坏RedHat系统,我们接下来的练习都在虚拟机中进行。
先介绍几个操作虚拟机的命令
westos-vmctl start nodea #启动虚拟机
westos-vmctl view nodea #观看虚拟机
westos-vmctl poweroff nodea #关闭虚拟机
westos-vmctl reset nodea #重置虚拟机
一般在启动虚拟机后,主要在“观看虚拟机”命令下对虚拟机进行操作,使用完后可以在虚拟机下关闭,也可以在主机shell窗口下执行“关闭虚拟机”指令。如果因为误操作导致虚拟机无法正常开机,可通过“重置虚拟机”命令对虚拟机进行重置。
二、文件管理命令
(1)touch:新建文件
touch #新建文件、修改文件的时间戳
touch file1 file2 #建立空文件
touch file #把文件时间同步到当前时间
touch -t YYYYMMDDHHmm file #把文件时间更改到指定时间
touch a #创建文件名为a的文件(默认创建在当前目录下,也可以指定目录)
touch file1 file2 #建立空文件,可指定目录,
这里是在shell窗口所在目录下创建了一个文件a,然后再在指定目录westos下创建file1,在指定目录Dcuments下创建file2。
touch file #把文件时间同步到当前时间
这里先查看之前创建文件a的时间,然后对文件a执行touch命令,可以看到文件a的时间已经同步到当前时间。
touch -t YYYYMMDDHHmm file #把文件时间更改到指定时间
这里是先在桌面创建一个文件b,显示的时间是当前创建文件的时间,使用touch命令更改其时间戳,改到了1111年,这里需要注意的是,更改时间时要符合规律,应该按照<YYYYMMDDHHmm>的顺序,即<年年年年月月日日时时分分>,月份不能超过12,天数不能超过31等等。
(2)mkdir(make directory):创建文件夹
mkdir dir1 dir2 .... #建立单层空目录
mkdir -p dir/dir1/dir2... #建立多层空目录
mkdir zzh zzh1 #建立单层目录,这里在桌面上建立了zzh和zzh1两个文件夹
mkdir -p zzh4/Linux #建立多层目录(因为建立多层目录时需要从父目录开始一级一级往下建立,所以需要加上参数“-p”,p指的是parent的意思),这里在桌面上建立了zzh4/Linux目录
所以经过测试,建立多级目录时如果不加上参数-p,就会创建失败。
(3)rm:删除文件或目录
rm file file1... #删除文件,但会有提示
rm -f file... #强制删除文件
rm -r dir dir1... #删除目录,会有提示
rm -rf dir... #强制删除目录
rm file file1.....#删除文件,但会有提示
rm -f file......#强制删除文件
这里先在桌面创建了4个文件,再使用第一个命令,删除file和file1,应该会有提示(我这个用户获得了管理员权限,所以没有提示了),再使用第二个命令强制删除file2和file3.
rm -r dir dir1...#删除目录,会有提示
rm -rf dir....#强制删除目录
这里先创建了三个文件夹和一个多层文件夹,在用rm指令删除文件夹时可以看到无法直接删除,对文件夹要做递归处理(recursion,递归),所以要加上参数“-r”,强制删除加上参数“-f”(force,强制)
(4)gedit:基于图形的文本编辑器
gedit file file1... #编辑file file1
#gedit使用时必须有图形,file和file1可以不存在
gedit file file1... #编辑file file1
这里先创建了一个文件a且未创建b,使用gedit命令对a和b同时进行编辑。编辑完成后未创建的文件b默认保存在shell窗口所在目录下。
(5)vim:文本编辑器(无图形)
vim file #进入到vim的浏览模式
vim -o file1 file2 #上下模式打开两个文件
#按<Ctrl>+<W>+<上或下>来转换控制窗口
vim -p file1 file2 #左右模式打开两个文件
#按<:tabn>,进入到下一个窗口;按<:tabp>,进入到上一个窗口
vim file #进入到vim的浏览模式
#在浏览模式无法编辑文本;
#浏览模式下按<i>键进入编辑模式;
#vim中鼠标无法控制光标;
#按<Esc>退出编辑模式;
#按<:wq>保存更改后退出;
#按<:q>未对文本进行操作可直接退出;
#按<:q!>修改后但不想保存可以直接退出且不保存。
这里进入vim浏览模式后
vim -o file1 file2 #上下模式打开两个文件
#按<Ctrl>+<W>+<上或下>来转换控制窗口
vim -p file1 file2 #左右模式打开两个文件
#按<:tabn>,进入到下一个窗口;按<:tabp>,进入到上一个窗口
这里先用vim打开两个文件file1和file2,对参数“-o”来说,编辑框上下显示,然后在浏览模式下按<Ctrl>+<W>+<上或下>来转换控制窗口;对参数“-p”来说,编辑框左右显示,然后在浏览模式下按<:tabn>,进入到下一个窗口;按<:tabp>,进入到上一个窗口。
vim异常退出:当vim编写文件时为更改保存强制关闭或vim出现异常时,再次用vim打开文件就会显示 [O]只读、[E]继续编辑、[R]恢复为保存内容编辑、[D]删除.swp文件进入编辑、[Q]退出当前文件编辑、[A]退出vim程序。
遇到这种情况应该选择[D]删除.swp文件后重新进入文件(不保存上次“更改未保存的内容”)。
(注:如果没有[D]选项,先进入shell输入<fg>,再输入<jobs>,然后就可以通过vim继续编辑文件了)
(6)cat:显示文件的全部内容
cat file #显示文件的全部内容
cat -b file # 显示文件内容并显示行号,不显示空行的行号
cat - n file #显示文件内容并显示行号
cat file #显示文件的全部内容。先通过指令“history >> a”将历史输入记录保存在a中并存放在shell所在目录下。对a进行编辑留出两行空白。
cat -b file #显示文件内容并显示行号,不显示空行的行号;
cat -n file #显示文件内容并显示行号,显示空行的行号。
这里可以看出,参数“-b”没有显示出空白的两行的行号,参数“-n”把空白两行的行号也算上了。
(7)head:查看文件前多少行
head file #默认显示文件的前10行
head -n file #n代表数字,显示文件的前n行
(8)tail:查看文件的后多少行
tail file #默认显示文件的后10行
tail -n file #n表示数字,默认显示文件的后n行
(9)less:分页浏览
less file #进入到分页模式查看file
#less模式下按<V>进入到vim,编辑完成后按<:wq>返回less
#在less中按<q>退出
less file #进入到分页模式查看file
#less模式中<上><下>逐行查看内容;<PgUp><PgDn>或鼠标滚轮可逐页查看内容
#</关键字> #搜索关键字,n向下匹配,N向上匹配
#less模式下按<V>进入到vim,编辑完成后按<:wq>返回less
#在less中按<q>退出
(10)cp:复制文件
复制原理:按照原文件建立新文件(抄作业)
cp 文件 目的地文件
cp 文件1 文件2 目的地目录
cp -r 目录1 目录2
cp 文件 目的地文件
把桌面上的文件a复制到路径/home下,并命名为b文件。可以看出复制完成后内容一模一样。
cp 文件1 文件2 目的地目录
这里先在桌面上建立一个空的多层目录“zzh/Linux”,用此指令可以把桌面上的file和file1文件复制到目录“zzh/Linux/”下。
cp -r 目录1 目录2
这里是把上一步中的zzh文件夹复制到目录“zzh1/Linux1/”下,因为是对文件夹进行操作,所以需要加上参数“-r”。
(11)mv:移动文件
移动原理:相同设备分区中的文件移动是重命名过程,不同分区的文件移动是建立删除过程
mv file file1 dir #移动file和file1到目录dir下
mv dir dir1 dir2 #移动目录dir和目录dir1到目录dir2下
mv file 不存在file #重命名
ls -i file #查看文件节点号(相当于文件身份证号)
mv file file1 dir #移动file和file1到目录dir下
这里是把桌面上的文件a和文件file移动到目录“zzh/Linux/”下。
mv dir dir1 dir2 #移动目录dir和目录dir1到目录dir2下
这里是先创建两个目录“zzh1/”和“zzh3”,然后使用此命令把目录zzh和目录zzh1移动到目录zzh3下。
mv file 不存在file #重命名
这里是把桌面上的”file2“文件通过此命令重命名为”hello——world“。
ls -i file #查看文件节点号(相当于文件身份证号)
这里对桌面上的file3文件和hello_world文件查看其文件节点号。
(12)file:查看文件类型
file 文件名 #查看此文件的真实类型
file 文件名 #查看此文件的真实类型
这里新建两个文件“hello.c”和“hello.py”,然后使用此命令看出是空文件;接下来通过vim对两个文件分别写入C语言和Python的头文件,再通过此命令看出“hello.c”已经自动识别出了是C语言文件,“hello.py”仍然是普通txt文件,对file3文件中写入普通字符,用此命令也判断出是普通txt文件。
(13)wc:文件容量统计
wc -l #行数
wc -m #字符数
wc -w #单词数
wc -c #字节数
对文件file2来说,先通过cat命令看到其中的内容,然后分别用这四个参数,可以看出有1行,4个单词,20个字符,对应的也是20个字节(因为每个空格也占一个字符,行尾的换行符也占一个字符)
对文件“file3”来说,只有四个汉字,每个汉字占用3个字节,所以算上结尾的换行符,总共有5个字符和13个字节;对文件“file4”来说,英文字母和汉字再加上换行符和空格,总共有18个字符和26个字节。
三、Linux中的文件寻址
1、相对路径和绝对路径
相对路径:文件路径的简写,省略了用户当前所在的系统位置。例如路径“/home/westos/Desktop/file”和路径“/home/westos/Documents/file”,两个路经下都存在file,我们在shell框中对file文件执行操作只会对同一目录下的file进行操作,因为省略了shell窗口所在的系统位置,所以又称相对路径。
绝对路径:文件在系统中的真实位置,不会考虑shell窗口中的当前位置,例如路径“/home/westos/Documents/file”就指系统中的这个文件。
2、系统的二级目录
/bin #系统常规命令
/sbin #系统管理命令
/dev #设备文件
/home #普通用户家目录集合,此目录中的子目录为普通用户家目录
/root #超级用户家目录
/lib64 #64位函数库
/lib #系统函数库
/proc #进程信息,系统识别的硬件信息
/run #当前运行的硬件和系统模块
/srv #系统数据(常量)
/var #系统数据(变量)
/tmp #系统临时文件存放目录
/mnt #临时设备挂载点
/media #cdrom临时挂载点
/etc #系统大多数程序的配置目录
/opt #第三方软件安装位置
/boot #系统启动分区,系统启动时读取的文件都在此目录中
/sys #关于内核设定目录
/usr #nuix system resource,仅次于</>重要,多数系统资源都在此目录中
3、一个小测试(此测试在虚拟机中进行)
在桌面上打开shell并执行以下操作:
*建立文件westos1 westos2 westos3,确保这些文件在</mnt>目录中
*在桌面上建立文件westos4
*复制上述所有文件到tmp目录中的westos子目录里
这里使用touch命令先在桌面和</mnt>创建这四个文件
使用cp命令对这四个文件执行操作,这里发现直接复制会报错,因为目的地目录不存在,所以要先通过<mkdir>命令创建该目录,然后重新执行此命令,成功。
四、关于文件寻址的命令
(1)pwd:显示当前工作目录
(2)cd :切换当前的工作目录
#<cd ~-> = <cd ->,切换最近的两个目录
#<cd ..>返回当前目录的上级目录
pwd #显示当前工作目录
cd #切换当前的工作目录
#<cd ~-> = <cd ->切换最近的两个目录
#<cd ..>返回当前目录的上级目录
这里先在桌面上创建了一个多层目录,然后使用上边四条命令,实现了切换工作目录,切换最近两个目录,返回上级目录以及显示当前工作目录的操作。
(3)ls:显示文件信息
#ls 显示当前目录文件中名称
#ls file 显示指定文件名称
#ls dir 显示指定目录中内容的名称
#ls -d dir 显示目录本身的名称
#ls -l file 显示文件属性
#ls -l dir 显示目录中内容的属性
#ls -ld dir 显示目录本身属性
#ls -a dir 显示目录中所有文件名称包括隐藏文件
#ls -s 显示文件大小
#ls -R dir 递归显示目录中的内容
ls #显示文件信息
#ls 显示当前目录文件中名称
#ls file 显示指定文件名称
#ls dir 显示指定目录中内容的名称
#ls -d dir 显示目录本身的名称
#ls -l file 显示文件属性
#ls -l dir 显示目录中内容的属性
#ls -ld dir 显示目录本身属性
#ls -a dir 显示目录中所有文件名称包括隐藏文件
#ls -s 显示文件大小
#ls -R dir 递归显示目录中的内容
这里先用<ls>命令查看当前目录(桌面)下的所有文件,然后通过<ls a>和<ls westos/>显示指定的文件和目录名称。其他操作结果如下图。
这里要记的参数很多,多练习就记住了,也不会搞混了。
五、文件批量处理
这部分主要学习一些批量处理的命令以及可以代表一类字符的关键字。
1、匹配字符的表示方法
* #匹配0~任意字符
? #匹配单个字符
[[:alpha:]] #匹配单个字母
[[:upper:]] #匹配单个大写字母
[[:lower:]] #匹配单个小写字母
[[:digit:]] #匹配单个数字
[[:alnum:]] #匹配单个数字或字母
[[:punct:]] #匹配单个符号
[[:space:]] #匹配单个空格
这里先在桌面创建一个文件夹<test>,文件夹中包含上述操作需要用到的文件;同时在桌面上也创建出待测试命令对应的文件夹,使用<cp>命令测试。
* #匹配0~任意字符
? #匹配单个字符
[[:alpha:]] #匹配单个字母
[[:upper:]] #匹配单个大写字母
[[:lower:]] #匹配单个小写字母
[[:digit:]] #匹配单个数字
[[:alnum:]] #匹配单个数字或字母
[[:punct:]] #匹配单个符号
[[:space:]] #匹配单个空格
这里对前一步创建的文件和文件夹分别执行上述命令,可以看出,符合匹配关系的文件已经通过<cp>命令复制到相应的文件夹中。
2、字符集合表示方法
[ ] :模糊匹配
用法: [ 0- 9] #0到9
[ ! d - f ] [ ^ d - f ] #除了d-f,“!”和“^”表示“非”的意思
注意:模糊匹配括号中的内容只能表示单个字符,如果是例如<file[1-9]>表示文件file1到file9的范围;<file[1-2][3-4]>表示文件名第一位1到2的范围,第二位3到四的范围,即file13、14、23、24;同理<file[1-2][3-4][5-6]>表示三位数,以此类推。
{ } :精确点名
用法: { 1..10 } #1到10
{ a..z } #a到z
注意:精确点名括号中的内容只能表示单个字符,如果要表示多重点名时,可以使用<{1..3}{a..b}>,就表示文件名为1a、1b、2a、2b、3a、3b的六个文件,需要表示更多位则以此类推。
这里对两者的区别做一个简单解释:精确点名顾名思义,就是精确到个体,就比如今天点名要张三和李四打扫卫生,那么就必须是他俩,不能是别人了;而模糊匹配就是划定一个范围,就比如坐在第一排的同学打扫卫生,满足这个范围的同学就要去打扫卫生了。这里要注意的一点是:在创建文件时只能用精确点名,如果用模糊匹配的话,系统也不知道我们要创建什么文件。
这步实验先在目录<test1>中使用精确点名功能创建了文件<file{1..3}{a..e}>即file1a、1b……3d、3e这15个文件,然后通过<cp>命令中设置了模糊匹配功能复制了文件<file[2-4][c-z]>,理论上可选择的范围file2c、2d……4y、4z,但是实际上目录中没有这么多文件,所以就会对符合这个范围的文件执行命令,结果验证了推论。
3、cd命令切换目录
cd ~ #默认代表当前目录的家目录
cd ~username #切换到指定用户的家目录
cd ~- #当前目录之前所在目录
cd .. #当前目录的上级目录
cd “~+”或“ . ” #表示当前目录
这一部分的命令比较简单,就不做实验了,除了第二条“切换到指定用户的家目录”其他命令都很常用。
4、实验部分
题目要求:
1.用命令和正则表达式按照要求建立文件
*)用一条命令建立12个文件WESTOS_classX_linuxY(X的数值范围为1-2,Y的数值范围为1-6)
*)这些文件都包含在root用户桌面的study目录中
*)用一条命令建立8个文件redhat_versionX(x的范围为1-8)
*)redhat_virsionX这些文件都包含在/mnt目录中的VERSION中
2.管理刚才新建立的文件要求如下
*)用一条命令把redhat_versionX中的带有奇数的文件复制到桌面的SINGLE中
*)用一条命令把redhat_versionX中的带偶数数的文件复制到/DOUBLE中
*)用一条命令把WESTOS_classX_linuxY中class1的文件一动到当前用户桌面的CLASS1中
*)用一条命令把WESTOS_classX_linuxY中class2的文件一动到当前用户桌面的CLASS2中
六、本章总结
这章主要介绍了Linux系统下的文件管理,包括复制、移动、删除、编辑等等命令及常用参数。需要掌握的东西不难,平时需要多练习才能更熟练地运用。
需要注意的有以下几点:
1、“模糊匹配”与“精确点名”的使用后范围以及表达方式,尤其是模糊匹配的括号范围内,每个括号表示相应的一个字符,如果要匹配多个字符,就需要多个括号表示。
2、文件批处理中各种字符的表达方式很容易混淆,多实验几次巩固一下。