简介
vi及vim是linux下的文本编辑器,其他的还有emacs、pico、joe等。
为何要学vim
vim可视作vi的高级版本;
所有的Unix-like都有内置的vi文本编辑器,其他的文本编辑器则不一定会存在;
很多软件的编辑接口都会主动调用vi(crontab、visudo、edquota等);
vim具有程序编辑的能力,可以主动地以字体颜色辨别语法的正确性,方便程序设计;
程序简单,编辑速度块;
vi的使用
vi分三种模式,一般命令模式、编辑模式、命令行模式。
一般命令模式:以vi打开一个文件即进入该模式,可以进行光标的移动、搜索和替换、删除字符、删除整列、复制整列、粘贴整列,但是不能进行编辑文件内容;
编辑模式:按下[i,I,o,O,a,A,r,R]中任意一个则可以从一般命令模式进入编辑模式,之后左下角会出现"INSERT"或"REPLACE"字样,若返回一般命令模式则需按下ESC。
命令行模式:输入[:/?]三个中的任一个就可以将光标移动到最下面的一行,你可以进行读取、保存、批量替换字符、退出vi、显示行号等操作。
简易执行
vi建立文件
1 | /bin/vi welcome.txt |
关于vi或vim的保存与退出
如果welcome.txt的权限为-r--r--r--,当前登录用户为dmtsai,我们使用vim对此文件内容进行修改,我们然后退出,执行:wq(write and quit),但是该文件权限不允许dmtsai进行写入,我们就可以使用[:wq!]进行强制写入。但是需要注意,强制写入是在你的权限可以改变的情况下才成立的,即文件所有者dmtsai可以修改自己权限r--为rw-。
系统语系的修改
使用root用户登陆
1 | vim /etc/locale.conf |
使用vim打开上述文件,修改LANG="zh_CN.UTF-8"
为LANG="en_US.UTF-8"
,即可将中文修改为英文,修改为中文,反过来就可以了。
X window
X window system是个利用网络架构的图形使用者接口软件,这个架构基本上分成两个原件,X Server和X Client,X Server的作用是管理主机上的所有硬件设备,这些设备与输入/输出有关,如显卡、分辨率、鼠标按键对应等等。
X window系统是一套工作在\(\text{UNIX}\),现在是类\(\text{UNIX}\)系统中图形用户界面的工作标准。
cat命令的使用
cat命令用来查看文件信息,用法为
cat [参数] 文件名
,常用参数-n为从1开始对输出显示行号,建立小型文件,利用输出重定向把cat命令的输出写在一个新文件里,使用如下
1
2
3
4
5
6
7cat > newfile
echo "hello! Linux"
echo "date"
# Ctrl + d
cat newfile
# echo "hello! Linux"
# echo "date"合并文件,利用cat及重定向,将两个文件的信息合并在一起,并以一个新文件名命名。用法为
cat 文件1 文件2 > 新文件名
。
more命令
more命令用来逐屏显示文件内容,按回车显示下一行,按空格显示下一屏,按q键退出,用法为more 文件名
,也可以使用管道由另一个命令的输出作为more的输入,一个例子如下
1 | man ls | more |
file *命令
file *命令用来展示当前目录下的所有文件以及其文件类型,如下。
硬链接和软链接
硬链接(\(hard link\))和符号链接(\(symbolic link\))的区别,通俗点说,可以把硬链接当做源文件的副本,他和源文件一样的大小但是事实上却不占任何空间。符号链接可以理解为windows下的快捷方式。符号链接的文件可以是任意文件或目录,甚至可以是不存在的文件,还可以不断的循环链接自己。删除链接文件时,系统仅删除符号链接文件,不删除源文件本身;而硬链接文件有两个限制,第一是不允许给目录创建硬链接,第二是只允许在用以文件系统中的文件之间才能创建链接。对于硬链接文件与符号链接文件进行读写和删除的时候,都会转化成对源文件的修改,但是若删除硬链接的源文件,硬链接文件仍存在,并且保留了原有的内容。
1 | # 此命令为生成一个符号链接 |
文件搜索命令
不管是在linux还是在Windows下都是不推荐使用文件搜索命令的,因为它会占用大量的系统资源,所以在电脑或者服务器下文件的存放应该规划的很好,避免使用搜索或者搜索条件越精确,及搜索范围越小越好。
find命令:用法:
find [搜索范围] [匹配条件]
,在匹配条件中使用*
匹配任意字符,使用?
匹配单个字符关于使用常用参数如下;1
2
3
4
5
6
7
8
9
10
11
12
13
14# 在目录/etc中查找文件init
find /etc -name init
# 同上,但是查找不区分大小写,
find /etc -iname init
# 在根下查找大于100MB的文件,100MB=102400KB=204800数据块
# 这里的204800是数据块的大小,1KB=2数据块,
# +n 大于 -n 小于 n 等于
find / -size +204800
# 在根目录下查找所有者为ct104的文件
# -group 根据目录所属组查找
find /home -user ct104
# 在/etc下查找5分钟内被修改过属性的文件和目录
# -amin 访问时间(access) -cmin 文件属性(change) -mmin 文件内容(modify)
find /etc - cmin -5locate命令:它的查找是在一个资料库中查找,这个资料库中是会自动更新的,对于刚创建的文件显然使用locate是不行的,所以我们可以使用
updatedb
命令来更新这个资料库,用法locate [匹配条件]
;which命令:搜索命令所在目录及别名信息。
uptime命令
1 | uptime |
用户管理命令
- passwd命令:它用来设置用户密码,使用方法:
passwd [用户名]
; - who命令:查看当前登陆用户信息,使用方法:
who
; - w命令:查看登陆用户详细信息,使用发发:
w
。
压缩解压命令
- gzip命令:它的功能是压缩文件,使用方法:
gzip [文件]
,压缩后文件格式:.gz。这个命令只能用来压缩文件,不能用来压缩目录,并且压缩后不保留原文件; - gunzip命令:它的功能是解压缩.gz的压缩文件使用发发:
gunzip [压缩文件]
,它也等于gzip -d
; - tar命令:它用来打包压缩目录,压缩用法
tar [-zcf] [打包压缩后文件名] [目录]
,解压用法tar [-zxvf] [解压文件名]
; - zip命令:它的功能是用来压缩文件或目录,压缩后文件格式
.zip
,用法:zip [-r] [压缩后文件名] [文件或目录]
,-r
选项的作用是使它可以用来压缩目录; - unzip命令:它的功能是解压.zip的压缩文件,用法:
unzip [压缩文件]
; - bzip2命令:它的功能是用来压缩文件,相对gzip来说压缩文件后,它可以保留源文件,并且它的压缩比很好,推荐使用压缩比较大的文件,压缩后文件格式:.bz2,使用
tar [-cjf] [打包压缩后文件名] [目录]
,可以生成.tar.bz2
格式的压缩包文件,如果想把.tar.bz2
的压缩包解压,则使用tar [-xjf] [压缩文件]
。
swap分区的作用
当系统的物理内存不够用时,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。
如大家所知,现代操作系统都实现了“虚拟内存”这一技术,不但在功能上突破了物理内存的限制,使程序可以操纵大于实际物理内存的空间,更重要的是,“虚拟内存”是隔离每个进程的安全保护网,使每个进程都不受其它程序的干扰。
挂载
在windows操作系统中,挂载通常是指给磁盘分区(包括被虚拟出来的磁盘分区)分配一个盘符。这个操作可以通过“计算机管理”中的“磁盘管理”来进行。如插入U盘系统自动分配给了它盘符,盘符就是挂载,退U盘的时候进行安全弹出,其实就是卸载unmount。
如果我们现在插入了U盘,系统分配了新磁盘区sdb1,它现在还不属于/,我们可以在图形桌面系统中找到它,浏览管理里面的文件,但在命令行却不知怎么访问它的目录,比如无法使用cd或者ls。也无法在编程时指定一个目录对它操作。我们需要将它挂载到linux目录树下的某个文件目录下,之后我们访问它,如我们使用mount /dev/sdb1 ~/Share/
,将新硬盘的区sdb1挂载到工作目录下的/Share/文件夹下,之后访问这个/Share/文件夹就相当于访问这个硬盘2的sdb1分区了。对/Share/的任何操作,都相当于对sdb1里文件的操作。所以Linux下,mount挂载的作用,就是将一个设备(通常是存储设备)挂接到一个已存在的目录上。访问这个目录就是访问该存储设备。
linux操作系统将所有的设备都看作文件,它将整个计算机的资源都整合成一个大的文件目录。我们要访问存储设备中的文件,必须将文件所在的分区挂载到一个已存在的目录上,然后通过访问这个目录来访问存储设备。挂载就是把设备放在一个目录下,让系统知道怎么管理这个设备里的文件,了解这个存储设备的可读写特性之类的过程。
/dev是一个目录,然而/dev/sdb1它不是一个目录,是一个类似指针的东西,指向这个分区的原始数据块。mount前,系统并不知道这个数据块哪部分数据代表文件,如何对它们操作。另外,插入CD,系统其实自动执行了 mount /dev/cdrom /media/cdrom。所以可以直接在/media/cdrom中对CD中的内容进行管理。
使用命令进行挂载,语法:mount [-t fs-type] [-o option] device mountpoint
,fs-type为文件系统类型,device为要挂载的文件系统所在的存储设备名,mountpoint为文件系统挂载到的linux目录树上的位置,-o的参数这里暂时不予给出,等用到的时候在给出。
1 | mount -t vfat /dev/sda1 /mnt/disk1 |
常用的磁盘操作命令
- fdisk磁盘分区:fdisk为磁盘分区命令,用来进行创建分区、删除分区和查看分区等操作,分区管理是一项较危险的操作,建议执行前先备份数据;关于查看现有磁盘设备系统分区的命令为
fdisk [-l][device]
,l即为列出系统的分区类型,若不指定设备,则列出系统所有已识别的存储设备; - du磁盘统计:du命令用于统计目录的磁盘使用情况,语法为:
du [-a] directoryname
; - df磁盘空间统计:df命令用于统计文件系统中未使用的磁盘空间,语法为:
df -[ahil]
,a为显示所有文件系统的信息,包括swap和proc;h是以最合适的容量单位显示;i为显示文件文件节点数的使用情况而不是文件块的使用情况,l为显示本地文件系统的使用情况,不加参数,会显示所有以挂载的文件系统的磁盘空间使用情况。
Shell
shell的功能:第一个是作为命令解释器,第二个是作为一种高级程序设计语言,它几乎拥有高级程序设计语言所需的所有元素,包括变量名、关键字、各种控制语句,并拥有自己的语法结构;shell类似于DOS/Windows下的批处理,但是他比批处理要强大;
第一个shell程序:
vim test7
,然后输入以下命令,之后执行sh test7
即可成功执行该shell脚本,它能显示当前目录文件,显示日历,及当前在线用户清单;1
2
3ls -l
cal
whoshell脚本的执行方式:这里有三种常用执行方式:
输入重定向,格式为
sh < 脚本名
,它即是使用输入重定向让shell从给定文件中读入命令并进行相应处理;以脚本名作为shell参数的执行方式,执行方式为
sh 脚本名 [参数]
;改为可执行权限后直接执行,方法如下:
1
2
3
4
5chmod a+x test7
./test7
# 还可以在修改执行权限之后,将其放在命令搜索路径的目录之下
cp test7 /bin
test7
含有条件语句的shell脚本:
1
2
3
4
5
6
7cat test7
echo "type in the user name"
read user
if who|grep $user
then echo "hello!$user!"|write $user
else echo "$user has not logged in the system"
fi多路选择的shell语句:
1
2
3
4
5
6
7
8
9
10cat test7
echo 'key in number(1 - 10):'
read a
if ["$a" -lt 1 -o "$a" -gt 10]
then echo "Error Number."
exit
elif [!"$a" -lt 5]
then echo "It's not less 5."
else echo "It's less 5."
fi