FreeBSD 常用命令以及VI 命令
ls 命令详解
ls 显示本目录下的文件及目录
ls -a 显示本目录下的所有文件及目录(包括隐藏目录和文件)
ls -l 显示本目录下所有文件的属性
ls -l | grep ^d 只显示目录名
ls -l | grep ^f 只显示文件名
ls -G 以颜色显示目录名和文件名
ls -l | grep ^d 只显示子目录
ls -l | grep ^- 只显示文件
ls -l | grep ^d | wc –l 统计当能目录下的子目录数
ls -l | grep ^- | wc –l 统计当能目录下的文件数
(注:可以修改/root/.cshrc 增加 alias ls=ls -G 这样以后只要敲入ls 命令系统就会以颜色显
示目录和文件了,前提是你用的是FreeBSD 的默认shell。如果是其它的shell 请根据需要修
改对应的配置文件。)
cd 命令详解
cd .. 返回上级目录
cd ../.. 进入上二级目录
cd - 返回上一次进入的目录
cd 进入用户自己的主目录
cd ~ 进入用户自己的主目录
cd /进入/你想要/进入的/目录
col 命令概解
man ls | col -b > outfile 要将 ls 的 man 手册转为文本文件
more 命令概解:用于查看文件中的内容
more files 查看文件的内容
mkdir 命令概解:用于创建目录
mkdir directory 在本目录下建立新目录
mkdir -p directory 创建多级目录
touch 命令概解:用于创建新文件
touch files 创建新文件
chmod 命令概解:chmod 命令用于改变文件的运行级别(读=4、写=2 执行=1)
chmod 400 files 给某文件以只读权限
chmod 600 files 给某文件以只读、写权限
chmod 700 files 给某文件以只读、写、执行权限
chmod -R 400 directory 改变某目录下所有文件的运行权限为只读权限
chmod -R 600 directory 改变某目录下所有文件的运行权限为以只读、写权限
chmod -R 700 directory 改变某目录下所有文件的运行权限为只读、写、执行权限
以chmod 700 为例解释下数字及数字所在位置的意义
第一位数字代表用户自身对文件的运行权限
第二位数字代表用户本组对文件的运行权限
第三位数字代表其它组及用户对文件的运行权限
数字“7”代表文件具有读、写、执行的运行全部权限
7=读+写+执行
要想改变其他运行权限,请参考第一种做法。
chown 概解:改变文件及文件夹的用户所属
chown root:wheel files 改变文件的用户为root 用户组为wheel 组
chown -R root:wheel directory 改变目录的用户为root 用户组为wheel 组
rm -fr ./files
rm -fr [!s]* 删除当前目录下所有不以s 开头的文件(含文件夹)
cp -fr oldpath newpath
mkdir newdir
rmdir olddir
mv file newpath 既可移动文件,又可用来重命名
uname
-a, --all print all information, in the following order,
except omit -p and -i if unknown:
-s, --kernel-name print the kernel name
-n, --nodename print the network node hostname
-r, --kernel-release print the kernel release
-v, --kernel-version print the kernel version
mount
mount /dev/hda5 /mnt/hda5 挂载硬盘
mount -t iso9660 /dev/cdrom /mnt/cdrom 挂载光盘
mount -t vfat /dev/sdb1 /mnt/usb 挂载U 盘
mount -o loop /mnt/hda5/fedora/FC-5-i386-disc1.iso /mnt/cdrom 挂载硬盘上的ISO 文件
umount /mnt/XXX
eject 弹出光盘
eject -t 关闭光盘
rpm
-ivh 安装
-Uvh 升级
-e 卸载
-q 查询
tar
tar -jxvf tmp.tar.bz2 解压
tar -jcvf tmp.tar.bz2 /tmp/ 将/tmp/目录下的所有文件压缩成tmp.tar.bz2 文件
tar -zxvf tmp.tar.gz 解压
tar -zcvf tmp.tar.gz /tmp/ 将/tmp 目录下的所有文件压缩成tmp.tar.gz 文件
rar
rar a tmp.rar /tmp/ 将/tmp 目录下的所有文件压缩成tmp.rar 文件
rar e tmp.rar 解压
远程登录linux 主机(from linux to linux)
#ssh -l root IP
#password:
#...
#exit
远程拷贝文件
#scp -fr
[email=root@IP1:/home/programs]root@IP1:/home/programs[/email]
[email=root@IP2:/home/]root@IP2:/home/[/email]
ln
ln -s /etc/init.d/smb /bin/ 符号链接
硬链接没有-s,少用。
shutdown
-r now 重启(reboot)
-h now 关机
chmod
chmod u+x file 给属主用户加执行权限,u,g,o 三组,每组有rwx
date
date +%Y%m%d 输出20070330
locate
locate smb* 在文件系统中查找以smb 开头的所有文件
find
find ./ -name smb* 在当前目录下查找以smb 开头的所有文件
find ./ -name "[^s]*" -exec rm {} \; 查找当前目录下所有不以s 开头的文件并删除之
管道命令 |
#grep ‘hello$' hello.txt | wc -l 查询在hello.txt 文件中每行以hello 结尾的行的个数
管道就是前一命令的输出作为后一命令的输入
>> , > , newfile 会创建一个新文件newfile,并在其中写入字符串abc
#echo -n def >> newfile 不会创建新文件newfile(如果当前目录存在这个文件的话),
追加写def,并且不输出换行符
grep
#grep -a 'abc' file 将二进制文件file 以文本文件的方式,在其中搜寻字符串abc
#grep -c 'abc' file 计算找到的字符串的个数
#grep -i 'abc' file 忽略大小写
#grep -n 'abc' file 顺便打印行号
#grep -v 'abc' file 反选,打印不含abc 的那些行
例子:
#grep -n '^[^a-zA-Z]' file 不以英文字母开头的行
#grep -n '^$' file 空白行
#grep -n 'g.*g' file 匹配gg,gXg,gXXg,...“.”表示一个字符,“*”
表示0 个或1 个字符的n 次重复
#grep -n 'o\{2,5\}' file 匹配连续o 的数目在2 到5 之间的
sed
#sed -e '1,/apple/d' file 删除从第一行至apple 之间的所有内容
#sed -e 's/yellow/black/g' file 将yellow 替换成black
#sed -e '1,4p' -n file 输出1-4 行
cut
#cut -d ':' -f 1 file 以“:”为分割符,取出第一段的数据
#cut -b 5-9 file 输出每行5-9 的字节
#cut -c 1-4 file 输出每行1-4 的字符
查看系统信息:
主机信息 uname
网卡 ifconfig
内存 free
CPU top
I /O iostat
网络 netstat
进程 ps -aux
********************************************** *********************************
1: man 在线查询 man ls
2: ls 查看目录与档案 ls -la
3: ln 建立链接文件 ln -fs /usr/local/apache/etc/httpd.conf /etc/httpd.conf
4: more 分页显示 more 文件名称
5: cd 切换目录 cd /usr/local/apache
6: mkdir 建立新的目录 mkdir /usr/temp
7: rmdir 删除目录 rmdir /usr/temp
8: rm 删除目录或档案 rm -f 文件名称 (如果要删除目录.需要加-r )
9: cp 复制目录或档案 cp 来源档案目标档案
10: pwd 显示目前的工作目录
11: mv 目录或档案更名或搬移 mv 来源档案目标档案
12: find 寻找目录或档案 find /etc -name 文件名称
13 fetch FTP 取得档案 fetch
14 chmod 变更档案使用权限 chmod -R 755 /usr/local/etc
15 chown 变更档案所有者 chown -R lin.wheel /usr/local/etc
16 fsck 修理档案系统 fsck -y
17 gzip/tar 压缩或解压缩档案或目录 tar -czvf 压缩档名.tar.gz 目录名称
18 mount 挂上档案系统或是设备 mount /cdrom
19 umount 卸下档案系统或是设备 umount /cdrom
20 df 查询系统的可使用档案空间 df
21 du 显示目录或档案所占的磁盘空间 du -a 檔名 (du -sh 可以获取当前文件夹下的磁盘
使用空间)
22 ps 查询系统process 状态 ps -aux|grep apach*
23 kill 砍除一个process kill pid
24 su 变换身份 su - root
25 adduser 新增使用者
26 rmuser 删除使用者
27 vipw 编辑使用者账户
28 passwd 变更密码
29 ping 侦测计算机之联机状态 ping 210.240.6.9
30 ifconfig 网络接口的设定与管理 ifconfig -a
31 route 可以设定routing table
32 traceroute 列出所经过的route traceroute 210.240.8.1
33 netstat 可以查询网络的使用及联机情形
34 pkg_add 安装package pkg_add bash-2.04.tgz
35 pkg_delete 移除已安装的package pkg_delete bash-2.04
36 pkg_info 查询安装纪录
37 sync 强迫系统将快取数据写回硬盘
38 reboot 重新启动系统
39 halt 关闭系统
40 shutdown 通知使用者系统将关闭
41 init 0 直接关机
chown chown -R 所有者.群组档案或目录
-R:表该目录下之所有档案之所有者与群组跟着便变更
chmod
drwxrwxrwx
lr–rwxr-x
1 2 3 4
d:表目录
r:表read
w:表write
x:表可执行
-:表关闭功能
l:表链接的档案
2:该档案或目录所有人之读取权限
3:该档案或目录所有人之相同群组的读取权限
4:网络上的人的读取权限
-R:表该目录下之所有档案之读取权限跟着便变更
gzip/tar
tar czvf 压缩档名.tar.gz 目录名称
z:采用gzip 压缩
c:建立新的压缩档
v:采用verbose 方式,观看压缩过程
f:强制进行
tar zxvf 压缩档名.tar.gz
z:采用gzip 解压缩
x:解压缩
v:采用verbose 方式,观看压缩过程
f:强制进行
ifconfig
查询所有网络接口的情形
ifconfig -a
设定网络接口的参数
ifconfig de0 192.168.1.10 netmask 255.255.255. 0
停止网络接口
ifconfig de0 down
启动网络接口
ifconfig de0 up
route
改变 routing path 之gateway
route change default 192.168.1.254
netstat
查询 routing table
netstat -rn
查询网络接口流量统计
netstat -I
查询 TCP 网络联机情形
netstat -t
查询所有网络联机情形
netstat -a
shutdown
通知使用者多久后关机,管理者需下reboot 或halt
shutdown -k 时间讯息
通知使用者多久后重新启动系统
shutdown -r 时间讯息
通知使用者多久后关闭系统
shutdown -h 时间讯息
时间:now 或+3 表三分钟后或yymmddhhmm
讯息:用双引号括起来或用-号开头
一些常用的其它组合命令:
shift+g 同win 下的END 键,让光标处在文档末尾.
:/ 功能是在文档内进行文本搜索
:find 这个是文件的搜索
******************************************** ***********************************
第一步
我如何离线?(exit)
我如何停止电脑?(shutdown -h now)
我如何重新激活计算机? (shutdown -r now)
我如何在单使用者模式下停止系统? (shutdown now)
我如何切换终端机? (ALT-F*)
文件
我如何阅读 manual page? (man)
使用者管理 (1)
我该如何增加一个使用者? (adduser)
我如何移除使用者? (rmuser)
我如何改变我的密码? (passwd)
"su" 指令
我如何 "su" 至 root 帐号? (su)
我如何 "su" 至其它使用者的帐号? (su username)
四处观察
我在哪? (pwd)
我如何观察目录下有什么? (ls)
我如何看到以点开始的隐藏档? (ls -a)
我如何看到更多的讯息 (存取许可,拥有者,群组,大小,日期)? (ls -l)
我如何看出那些档是什么? (ls -F)
这些是什么档: ".." 与 "."? (ls -aF)
四处移动
我该如何改变工作目录? (cd)
如何回到上一层目录? (cd ..)
我如何回到自己的工作目录? (cd, cd ~/)
屏幕控制
我如何卷回 (在终端机中,非 X)? (The Scroll Lock Key)
我该如何清除屏幕? (clear)
文章
我如何不使用文书编辑器就可以观看小的档案? (more)
最普遍的文书编辑器是? (vi)
"vi" 看起来有点难,我可以从 "ee" 开始吗? (ee)
"visual" 编辑器
学习 "vi" 最有效的方法为何? (vilearn)
"vi" 是如何工作的? (man vi)
什么是储存指命? (:w)
什么是离开指令? (:q)
什么是可以储存与离开的命令? (:wq)
如何离开而不使用储存指令? (:q!)
我如何移动? (h, j, k, and l)
Esc 键有什么用途? (The Esc Key)
我如何加入新的文字? (a and i)
我如何建立新的一行? (o and O)
我如何删除文字? (x and dd)
我如何拷贝文章内容? (yy and p)
我如何替代文章? ?
我如何使用数个指令? (nCommand)
我如何搜寻文章? (/text)
我如何起动 "vi" 于只读模式? (view)
使用者管理 (2)
我如何新增使用者至群组? (vi /etc/group)
计算机信息
我如何能观看开机记录文件? (dmesg)
有什么方法可以让我慢慢地观看开机记录文件吗? (dmesg |more)
谁
显示谁在系统上? (who)
他们正在做什么?? (w)
"w" 可以显示出所有的处理吗? (w)
何时
我如何显示或设定日期时间? (date)
我如何显示月历? (cal)
有什么方法可以让我慢慢地观看月历吗? (cal | more)
Communications
我如何显示 (或不显示) 其它使用者送来的讯息? (mesg y, mesg n)
我如何传送讯息到其使用者的屏幕? (write)
我如何送讯息到每一个人的屏幕? (wall)
我如何与他人交谈 (chat)? (talk)
档案管理
我如何建立一个空档案? (touch)
我如何删除档案? (rm)
我如何建立一个目录? (mkdir)
我如何移除一个空的目录? (rmdir)
我如何移除一个目录包括里面所有的东西 (包括子目录)? (rm -r)
我如何移除以 "-" 起头的档案? (rm -- -filename)
我如何拷贝档案? (cp)
我如何拷贝整个目录包括它所有的内容? (cp -R)
我该如何搬移档案与目录? (mv)
我如何改变档案/目录名称? (mv)
我如何执行 rm、cp 与 mv 时,须要我的许可? (-i)
我如何执行 rm、cp 与 mv 时,不须要我的确认? (-f)
档案连结
我如何连结一个档案或目录? (ln -s)
我如何 hard link 一个档案? (ln)
档案拥有权/存取许可
我如何观察谁是档案拥有者? (ls -l)
我如何观察档案/目录的存取许可? (ls -l)
我如何改变档案/目录的使用者拥有人? (chown)
我如何改变档案/目录的群组拥有人?s group owner? (chgrp)
我如何改变档案/目录的使用者与群组拥有人? (chown user:group)
我如何改变存取许可? (chmod)
如果我拥有这个目录,我可否修改不是我的档案? (yes)
软盘机装置
我如何挂上我的软盘? (mount)
我如何挂上 MS-DOS 格式的软盘机? (mount -t msdos)
我如何卸下我的软盘? (umount)
应用程序
我如何起动应用程序? (./)
我如何由文件名称来起动应用程序? (PATH)
我如何在背景起动应用程序? (&)
我如何知道我的 PATH 是? (echo $PATH)
所有的应用程序在那? (The FreeBSD Ports Collection)
我如何安装一个 port? (make install clean)
那里有编辑好的二进制文件? (The FreeBSD Packages Collection)
我如何移除应用程序? (pkg_delete)
使用者环境
使用者的 profile 档案在那? (vi ~/.profile)
我如何改变我的 shell? (chsh)
处理管理
我如何列出处理? (ps)
我如何列找到处理? (ps -waux | grep "name of the process")
我如何砍掉处理? (kill)
磁盘管理
我如何检查可用的磁盘空间? (df)
我如何检查每个目录下用了多少磁盘空间? (du)
**************************************************************************
Freebsd 的PW 命令用法详解
pw 是一个用来创建、删除、修改、显示用户和组的命令行工具。它还有系统用户和组文件
编辑器的功能。
1.pw 命令格式:
1.1 组管理
1.1.1 组添加
pw [-V etcdir] groupadd [group|gid] [ -C config] [-q] [-n group] [-g gid]
[-M members] [-o] [-h fd | -H fd] [-N] [-P] [-Y]
1.1.2 组删除
pw [-V etcdir] groupdel [group|gid] [-n name] [-g gid] [-Y]
1.1.3 组更改
pw [-V etcdir] groupmod [group|gid] [ -C config] [-q] [-n name] [-g gid]
[-l name] [-M members] [-m newmembers] [-h fd | -H fd] [-N] [-P] [-Y]
1.1.4 组显示
pw [-V etcdir] groupshow [group|gid] [ -n name] [-g gid] [-F] [-P] [-a]
1.1.5 显示可建新组ID
pw [-V etcdir] groupnext [-C config] [-q]
1.2 用户管理
1.2.1(1) 用户添加
pw [-V etcdir] useradd [name|uid] [ -C config] [-q] [-n name] [-u uid] [-c comment]
[-d dir] [-e date] [-p date] [-g group] [-G grouplist] [-m] [-k dir]
[-w method] [-s shell] [-o] [-L class] [-h fd | -H fd] [-N] [-P] [-Y]
1.2.1(2)用户添加
pw [-V etcdir] useradd [name|uid] -D [-C config] [-q] [-b dir] [-e days]
[-p days] [-g group] [-G grouplist] [-k dir] [-u min,max] [-i min,max]
[-w method] [-s shell] [-y path]
1.2.2 用户删除
pw [-V etcdir] userdel [name|uid] [ -n name] [-u uid] [-r] [-Y]
1.2.3 用户更改
pw [-V etcdir] usermod [name|uid] [ -C config] [-q] [-n name] [-u uid] [-c comment]
[-d dir] [-e date] [-p date] [-g group] [-G grouplist] [-l name] [-m] [-k dir]
[-w method] [-s shell] [-L class] [-h fd | -H fd] [-N] [-P] [-Y]
1.2.4 显示用户
pw [-V etcdir] usershow [name|uid] [ -n name] [-u uid] [-F] [-P] [-7] [-a]
1.2.5 可新建的用户ID
pw [-V etcdir] usernext [-C config] [-q]
1.2.6 锁定用户
pw [-V etcdir] lock [name|uid] [ -C config] [-q]
1.2.7 用户解锁
pw [-V etcdir] unlock [name|uid] [ -C config] [-q]
1.3 常用选项解释
1.3.1 用户操作时常用选项
[-V etcdir]
默认当新增组和用户时使用/etc/pw.conf 作为pw 配置文件,也可以指到别的文件上。pw.conf
这个文件可以不存在。当使用这个参数时,需要使
用-C config
[-C config]
[-q] 在交互式环境中,这个选项使pw 支持输出错误信息
[-N] 在添加和更改操作时输出结果,而不真正改变组和用户信息。
[-Y] 自动更新yp 数据库。
[-n name] 指定用户名
[-u uid]指定用户id(ps:好像没什么用)
[-c comment]用户全称等注释信息(ps:没什么用)
[-d dir] 指定用户家目录
[-e date]帐号到期时间,时间格式可以是绝对的日-月-年,2 为数字年或4 位数字年,月可以
是数字或英文月份的简写('Jan', 'Feb', etc);也
可以是相对时间,+n[分时天周月年],n 可以是十进制、八进制[0 开头]或十六进制[0x 开头]。
[-p date]密码到期时间,时间格式同上。
[-g group]指定组(组名或组id)。
[-G grouplist]指定组列表,组以空格分开,如:-G wheel mysql teczm 即把某账号置于这三个
组内。
[-L class]在用户创建时指定登录等级。
[-m] 自动创建用户家目录
[-s shell]指定用户shell
[-w method]method 包括:
no 新创建的账号禁止登录
yes 强制新建账号密码和账号一样(ps:这样不安全)
none 强制新建账号使用空密码(ps:这样不安全)
random 生成一个随机密码
ps:pw useradd username -g tests -d /home/test -s /bin/sh -h 0
增加参数-h 0 可以出来password for user username:这样的提示来让你设定username 的密码
1.3.2 组操作时常用选项
[-M memberlist] 将用户置于组内,会替换掉已经存在的用户
[-m newmembers] 添加新用户到组内,不会替换掉已经存在的用户
示例:
1. 新建一个用户bsder 使用cshell , 家目录为[color]/home/bsder, 属于组
[color]wheel,口令交互输入
#pw useradd bsder -s /bin/csh -d /home/bsder -m -g wheel -h 0
2.将bsder 使用的shell 改为/bin/sh
#pw usermod bsder -s /bin/sh
3.将bsder 置于test 组内
#pw groupmod test -m bsder
4.锁定bsder 用户帐号
#pw lock bsder
5.对bsder 账号解锁
#pw unlock bsder
6.显示bsder 用户属性
#pw usershow bsder
**************************************************** *********************
1 发groups 查看秀出使用者是哪个群组
groups jackpig
2 vipw 编辑使用者密码文件
编修使用者密码文件。我们可以使用 vipw 这个指令来编辑使用者密码文件
/etc/master.passwd。如果我们编辑的内容不符合密码文件的格式,vipw 会提出警告。在修改
完后,vipw 还会自动执行 pwd_mkdb 来更新系统数据库。
1 增加用户
adduser
看了 adduser 指令的过程,您对于新增使用者应有的步骤应该已经有初步的了解了,接下
来我们要介绍 adduser 这个指令到底做了哪些事。
* 在 /etc/group 中加入使用者的群组
* 在 /etc/master.passwd 中加入使用者
* 在 /home 中建立使用者目录,并建立 dotfile
* 在 /var/mail 中建立使用者邮件目录
知道了以上的流程,我们也可以手动自己做上述的步骤,但我们必须先知道 group 及
master.passwd 等档案的格式。
2 删除用户
rmuser
删除使用者。使用 rmuser 将会进行下列动作:
* 如果该使用者有设定使用定时排程的工作,如 crontab 或 at,则先将它移除。crontab
的工作排程会被放在 /var/cron/tabs/username,而 at 的工作排程则放在 /var/jobs/username
中。
* 如果该使用者有正在执行的程序,则送出 SIGKILL 给该行程以将它停止。
* 以 vipw 移除让使用者在 /etc/master.passwd 中的账号。
* 使用者的家目录 /home/username,使用指令 rm -rf /home/username。
* 再移除使用者邮件目录 /var/mail/username。
* 如果暂存的目录中 (/tmp 及 /var/tmp) 有该使用的暂存盘,则将它移除。
* 若该使用者所属群组已无人使用,则编辑 /etc/group 来移除群组。
必须要注意的是 rmuser 并不能删除 UID 为 0 的使用者 (如 root)。
3 更改用户的详细信息
chpass
4 显示系统全部用户
pw usershow -a
5 增加一个用户组
pw groupadd 组名
6 显示系统全部用户组
pw groupshow -a
7 查看用户id 组id 所属组
id 用户名
8
$ who am i (我是谁)
teacher tty02 Sep 05 08:25
$ who –H (显示各列信息标题)
NAME LINE TIME
teacher tty02 Sep 05 08:25
student1 tty26 Sep 05 10:27
student1 tty15 Sep 05 10:38
student5 ttyp09 Sep 05 10:10
$ who –q (显示简要用户列表和用户总数)
teacher student1 student1 student5
# users=4
finger 显示用户的详细信息
9 finger 显示用户详细信息
**************************************************** *********************
FreeBSD 文件编辑器vi 常用命令
原文来自:野蔷薇
1、关于文本编辑器;
文本编辑器有很多,比如图形模式的gedit、kwrite、OpenOffice ... ...
,文本模式下的编辑器有vi、vim(vi 的增强版本)和nano ... ...
vi 和vim 是我们在Linux 中最常用的编辑器。我们有必要介绍一下vi(vim)最简单的用法,
以让Linux 入门级用户在最短的时间内学会使用它。
nano 工具和DOS 操作系统下的edit 操作相似,使用简单,我们不作介绍了,如果您有兴趣,
不妨尝试一下;
2、vi 编辑器;
为什么要学会简单应用vi
vi 或vim 是Linux 最基本的文本编辑工具,vi 或vim 虽然没有图形界面编辑器那样点鼠标
的简单操作,但vi 编辑器在系统管理、服务器管理
中,永远不是图形界面的编辑器能比的。当您没有安装X-windows 桌面环境或桌面环境崩
溃时,我们仍需要字符模式下的编辑器vi;
vi 或vim 编辑器在创建和编辑简单文档最高效的工具;
3、vi 编辑器的使用方法;
3.1 如何调用vi ;
[root@localhost ~]# vi filename
~
~
~
~
~
~
~
~
3.2 vi 的三种命令模式;
Command(命令)模式,用于输入命令;
Insert(插入)模式,用于插入文本;
Visual(可视)模式,用于视化的的高亮并选定正文;
3.3 文件的保存和退出;
Command 模式是vi 或vim 的默认模式,如果我们处于其它命令模式时,要通过ESC 键切
换过来。
当我们按ESC 键后,接着再输入:号时,vi 会在屏幕的最下方等待我们输入命令;
:w 保存;
:w filename 另存为filename;
:wq! 保存退出;
:wq! filename 注:以filename 为文件名保存后退出;
:q! 不保存退出;
:x 应该是保存并退出,功能和:wq!相同
3.4 光标移动;
当我们按ESC 进入Command 模式后,我们可以用下面的一些键位来移动光标;
j 向下移动一行;
k 向上移动一行;
h 向左移动一个字符;
l 向右移动一个字符;
ctrl+b 向上移动一屏;
ctrl+f 向下移动一屏;
向上箭头向上移动;
向下箭头向下移动;
向左箭头向左移动;
向右箭头向右移动;
我们编辑一个文件时,对于 j、k、l 和h 键,还能在这些动作命令的前面加上数字,比如 3j,
表示向下移动3 行。
3.5 插入模式(文本的插入);
i 在光标之前插入;
a 在光标之后插入;
I 在光标所在行的行首插入;
A 在光标所在行的行末插入;
o 在光标所在的行的上面插入一行;
O 在光标所在的行的下面插入一行;
s 删除光标后的一个字符,然后进入插入模式;
S 删除光标所在的行,然后进入插入模式;
3.6 文本内容的删除操作;
x 一个字符;
#x 删除几个字符,#表示数字,比如3x;
dw 删除一个单词;
#dw 删除几个单词,#用数字表示,比如3dw 表示删除三个单词;
dd 删除一行;
#dd 删除多个行,#代表数字,比如3dd 表示删除光标行及光标的下两行;
d$ 删除光标到行尾的内容;
J 清除光标所处的行与上一行之间的空格,把光标行和上一行接在一起;
3.7 恢复修改及恢复删除操作;
u 撤消修改或删除操作;
按ESC 键返回Command(命令)模式,然后按u 键来撤消删除以前的删除或修改;如果您
想撤消多个以前的修改或删除操作,请按多按几次u。这和Word 的撤消操作没有太大的区
别;
3.8 可视模式;
在最新的Linux 发行版本中,vi 提供了可视模式,因为这个功能是vim 才有的。如果您用的
vi 没有这个功能,就换成vim 就有了。打开可视模式,按ESC 键,然后按v 就进入可视模
式;
可视模式为我们提供了极为友好的选取文本范围,以高亮显示;在屏幕的最下方显示有;
-- 可视--
或
--VISUAL--
如图:
FreeBSD 文件编辑器vi 常用命令
进入可视模式,我们就可以用前面所说的命令行模式中的光标移动指令,可以进行文本范围
的选取。
选取文本范围有何用?
我们可以对某部份删除作业,按d 键就删除了我们选中的内容。
选中内容后,我们按y 就表示复制;按d 表示删除;
值得一提是的删除的同时,也表示复制。我们返回到命令模式,然后移动光标到某个位置,
然后按shift+p 键,就把刚才删除的内容贴上了。我们先在这里提一句,在后文,我们还得
详细说说。
退出可视模式,还是用ESC 键;
3.9 复制和粘帖的操作;
其实删除也带有剪切的意思,当我们删除文字时,可以把光标移动到某处,然后按shift+p
键就把内容贴在原处,然后再移动光标到某处,然后再按p 或shift+p 又能贴上;
p 在光标之后粘帖;
shift+p 在光标之前粘帖
来举一例:
比如我们想把一个文档的第三行复制下来,然后帖到第五行的后面,我们应该怎么做呢?
有两种方法;
第一种方法:
先把第三行删除,把光标移动到第三行处,然后用dd 动作,接着再按一下shift+p 键。这样
就把刚才删除的第三行帖在原处了。
接着我们再用k 键移动光标到第五行,然后再按一下p 键,这样就把第三行的内容又帖到第
五行的后面了;
第二种方法;
进入可视模式,按ESC 键,然后按v 键。移动鼠标指针,选中第三行的内容,然后按y 键
复制;再移动指针到第五行,最后按p 键;
所以复制和粘贴操作,是命令模式、插入模式及可视模式的综合运用;我们要学会各种模式
之间的切换,要常用ESC 键;更为重要的学会在命令模式下移动光标;
3.10 关于行号;
有时我们配置一个程序运行时,会出现配置文件X 行出现错误。这时我们要用到行号相关
的操作;
为所有内容添加行号;
按ESC 键,然后输入:
:set number
光标所处位置
在屏幕的右下角,有类似如下的;
57,8 27%
在这之中,57 表示第57 行,8 表示第8 个字符;
3.11 查找和替换功能;
3.11.1 查找;
首先,我们要进入ESC 键,进入命令模式;我们输入/或?就进入查找模式了;
/SEARCH 注:正向查找,按n 键把光标移动到下一个符合条件的地方;
?SEARCH 注:反向查找,按shift+n 键,把光标移动到下一个符合条件的
举一例:比如我想在一个文件中找到swap 单词,我应该如下做;
首先按ESC 键,进入命令模式,然后输入;
/swap
或
?swap
3.11.2 替换;
按ESC 键进入命令模式;
:s /SEARCH/REPLACE/g 注:把当前光标所处的行中的SEARCH 单词,替换成REPLACE,
并把所有SEARCH 高亮显示;
:%s /SEARCH/REPLACE 注:把文档中所有SEARCH 替换成REPLACE;
:#,# s /SEARCH/REPLACE/g 注:#号表示数字,表示从多少行到多少行,把SEARCH 替
换成REPLACE;
注:在这之中,g 表示全局查找;我们注意到,就是没有替换的地方,也会把SEARCH 高
亮显示;
举例说明:
比如我们有一篇文档要修改;
我们把光标所在的行,把所有单词the,替换成THE,应该是:
:s /the/THE/g
我们把整篇文档的所有的the 都替换成THE,应该是:
:%s /the/THE
我们仅仅是把第1 行到第10 行中的the,替换成THE,应该是;
:1,10 s /the/THE/g
4、关于本文;
我写本文的目的是让新手在最短的时间内用vi 或vim 创建、编辑和修改文件,所以说这篇
文档并不是大而全的vi 手册。如果把vi 所有的功能都说全了,至少得写一本千页的手册;
本也没有涉及更为高级的vi 用法。如果想了解的更多,请查找man 和help;
5、后记;
到目前为止,关于目录和文件的操作,我写过有几篇了,从文件和目录的创建、删除、复制
到属性操作,最后到文件修改等系列文档。这些文档都是有相关性的,如果把这些相关性的
文档连起来,就是一个整体知识块。我们只有掌握了这些知识,才能实现文件系统的管理。
在以后我会写什么内容呢????可能会补充一下文件的查找,其实以前有类似文档,到时
我总结一下,贴出来给大家看看就行了。
下一步是准备网络基础文档建设中,网络基础比较重要,这是我计划的下一个重点。。。。。。。。
6、参考文档;
man vi 和vi --help
*******************************************************************************
vi 指令大全
进入vi 的命令
============
vi filename: 打开或新建文件,并将光标置于第一行首
vi +n filename: 打开文件,并将光标置于第n 行首
vi + filename: 打开文件,并将光标置于最后一行首
vi +/pattern filename: 打开文件,并将光标置于第一个与pattern 匹配的串处
vi -r filename: 在上次正用vi 编辑时发生系统崩溃,恢复filename
vi filename....filename: 打开多个文件,依次进行编辑
移动光标类命令
==============
h: 光标左移一个字符
l: 光标右移一个字符
space: 光标右移一个字符
Backspace: 光标左移一个字符
k 或Ctrl+p: 光标上移一行
j 或Ctrl+n: 光标下移一行
Enter: 光标下移一行
w 或W : 光标右移一个字至字首
b 或B : 光标左移一个字至字首
e 或E : 光标右移一个字至字尾
): 光标移至句尾
(: 光标移至句首
}: 光标移至段落开头
{: 光标移至段落结尾
nG: 光标移至第n 行首
n+: 光标下移n 行
n-: 光标上移n 行
n$: 光标移至第n 行尾
H: 光标移至屏幕顶行
M: 光标移至屏幕中间行
L: 光标移至屏幕最后行
0: 光标移至当前行首
$: 光标移至当前行尾
屏幕翻滚类命令
==============
Ctrl+u: 向文件首翻半屏
Ctrl+d: 向文件尾翻半屏
Ctrl+f: 向文件尾翻一屏
Ctrl+b: 向文件首翻一屏
nz: 将第n 行滚至屏幕顶部,不指定n 时将当前行滚至屏幕顶部。
插入文本类命令
==============
i: 在光标前
I: 在当前行首
a: 光标后
A: 在当前行尾
o: 在当前行之下新开一行
O: 在当前行之上新开一行
r: 替换当前字符
R: 替换当前字符及其后的字符,直至按ESC 键
s: 从当前光标位置处开始,以输入的文本替代指定数目的字符
S: 删除指定数目的行,并以所输入文本代替之
ncw 或nCW: 修改指定数目的字
nCC: 修改指定数目的行
删除命令
========
ndw 或ndW: 删除光标处开始及其后的n-1 个字
do: 删至行首
d$: 删至行尾
ndd: 删除当前行及其后n-1 行
x 或X: 删除一个字符,x 删除光标后的,而X 删除光标前的
Ctrl+u: 删除输入方式下所输入的文本
搜索及替换命令
==============
/pattern: 从光标开始处向文件尾搜索pattern
?pattern: 从光标开始处向文件首搜索pattern
n: 在同一方向重复上一次搜索命令
N: 在反方向上重复上一次搜索命令
:s/p1/p2/g: 将当前行中所有p1 均用p2 替代
:n1,n2s/p1/p2/g: 将第n1 至n2 行中所有p1 均用p2 替代
:g/p1/s//p2/g: 将文件中所有p1 均用p2 替换
选项设置
========
all: 列出所有选项设置情况
term: 设置终端类型
ignorance: 在搜索中忽略大小写
list: 显示制表位(Ctrl+I)和行尾标志($)
number: 显示行号
report: 显示由面向行的命令修改过的数目
terse: 显示简短的警告信息
warn: 在转到别的文件时若没保存当前文件则显示NO write 信息
nomagic: 允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan: 禁止vi 在搜索到达文件两端时,又从另一端开始
mesg: 允许vi 显示其他用户用write 写到自己终端上的信息
最后行方式命令
==============
:n1,n2 co n3: 将n1 行到n2 行之间的内容拷贝到第n3 行下
:n1,n2 m n3:将n1 行到n2 行之间的内容移至到第n3 行下
:n1,n2 d: 将 n1 行到n2 行之间的内容删除
:w: 保存当前文件
:e filename: 打开文件filename 进行编辑
:x: 保存当前文件并退出
:q: 退出vi
:q!: 不保存文件并退出vi
:!command: 执行shell 命令command
:n1,n2 w!command: 将文件中n1 行至n2 行的内容作为command 的输入并执行之,若不指定
n1,n2,则表示将整个文件内容作为command 的输入
:r!command: 将命令command 的输出结果放到当前行
寄存器操作
==========
"?nyy: 将当前行及其下n 行的内容保存到寄存器?中,其中?为一个字母,n 为一个数字
"?nyw: 将当前行及其下n 个字保存到寄存器?中,其中?为一个字母,n 为一个数字
"?nyl: 将当前行及其下n 个字符保存到寄存器?中,其中?为一个字母,n 为一个数字
"?p: 取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一
个数字
ndd: 将当前行及其下共n 行文本删除,并将所删内容放到1 号删除寄存器中