vi编辑器怎么重命名文件
时间: 2023-09-08 18:11:53 浏览: 535
在Vi编辑器中重命名文件有两种方法:
1. 通过外部命令来重命名文件
可以通过在Vi编辑器中使用`!`命令来执行外部命令。例如,要将文件`old_file.txt`重命名为`new_file.txt`,可以输入以下命令:
```
:!mv old_file.txt new_file.txt
```
该命令将使用`mv`命令将文件重命名为`new_file.txt`。编辑器会显示`Press ENTER or type command to continue`,按下回车键即可返回到编辑器。
2. 保存文件为新名称
另一种方法是将文件保存为新的文件名。在Vi编辑器中执行以下操作:
- 在命令模式下,输入`:w new_file.txt`命令,将当前文件保存为`new_file.txt`。
- 输入`:q`命令退出编辑器。
- 在命令行中使用`mv`命令将旧文件名更改为新文件名,例如:`mv old_file.txt new_file.txt`。
请注意,第二种方法会创建一个新文件,并且旧文件名将不再存在。
相关问题
这样监控不到vi编辑器修改的文件
是的,因为 vi 编辑器在保存文件时并非直接修改原文件,而是先将修改后的内容写入一个临时文件,然后再将临时文件重命名为原文件名,这样会触发 inotify 的 IN_MOVED_FROM 和 IN_MOVED_TO 事件,而不是 IN_MODIFY 事件,因此需要在代码中增加对 IN_MOVED_FROM 和 IN_MOVED_TO 事件的处理。
以下是修改后的 C 代码示例,可以监控 vi 编辑器修改的文件:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/inotify.h>
#define EVENT_SIZE (sizeof(struct inotify_event))
#define EVENT_BUF_LEN (1024 * (EVENT_SIZE + 16))
int main() {
int fd, wd, length, i = 0;
char buffer[EVENT_BUF_LEN];
// 监控的文件路径
char *file_path = "/path/to/file";
// 初始化 inotify 实例
fd = inotify_init();
if (fd < 0) {
perror("inotify_init");
exit(EXIT_FAILURE);
}
// 添加要监控的文件路径并指定监控事件类型
wd = inotify_add_watch(fd, file_path, IN_MODIFY | IN_MOVED_FROM | IN_MOVED_TO);
if (wd < 0) {
perror("inotify_add_watch");
exit(EXIT_FAILURE);
}
// 监控循环
while (1) {
i = 0;
length = read(fd, buffer, EVENT_BUF_LEN);
if (length < 0) {
perror("read");
exit(EXIT_FAILURE);
}
while (i < length) {
struct inotify_event *event = (struct inotify_event *) &buffer[i];
if (event->mask & IN_MODIFY) {
printf("File %s has been modified.\n", event->name);
} else if (event->mask & IN_MOVED_FROM) {
printf("File %s has been moved from.\n", event->name);
} else if (event->mask & IN_MOVED_TO) {
printf("File %s has been moved to.\n", event->name);
}
i += EVENT_SIZE + event->len;
}
}
// 关闭 inotify 实例
inotify_rm_watch(fd, wd);
close(fd);
return 0;
}
```
在修改后的代码中,将 inotify_add_watch() 的参数修改为 IN_MODIFY | IN_MOVED_FROM | IN_MOVED_TO,增加了对 IN_MOVED_FROM 和 IN_MOVED_TO 事件的处理。如果事件类型为 IN_MOVED_FROM,则输出文件已被移动的消息;如果事件类型为 IN_MOVED_TO,则输出文件已被移动到的消息。
一、VI编辑器练习: 1.复制网卡配置文件,存放至/tmp目录下,并将文件重命名为vitest。 1. 打开vitest文件,为文件设置显示行号。 2. 在vitest文件中查找字符串“BOOT”。 3. 将vitest文件中所有的字符串“NO”替换为“YES”。 4. 复制第2-4行,拷贝至文件末尾。 5. 删除文件的第5行。 二、grep命令练习 1. 查找系统中是否安装了dhcp软件的rpm包。 2. 列出/etc目录下以字符串“yum”开头的所有文件。 3. 列出/etc目录下包含字符串“dhcp”的所有文件。 三、 1. 查看系统的挂载信息,特别关注一下光盘是否挂载,如果光盘未挂载,则将光盘挂载到/mnt/cdrom目录。 2. 查看yum配置文件,确认yum仓库的位置和光盘的挂载点是否一致。
答:1.使用命令“cp /etc/sysconfig/network-scripts/ifcfg-eth0 /tmp/vitest”将网卡配置文件复制到/tmp目录下,并使用“mv /tmp/ifcfg-eth0 /tmp/vitest”将文件重命名为vitest。2.使用命令“vi +set number /tmp/vitest”打开vitest文件,并设置显示行号。3.使用命令“grep -n BOOT /tmp/vitest”查找字符串“BOOT”。4.使用命令“sed -i 's/NO/YES/g' /tmp/vitest”将vitest文件中所有的字符串“NO”替换为“YES”。5.使用命令“sed -n '2,4p' /tmp/vitest”复制第2-4行,并使用“sed -i '$a[2-4行内容]' /tmp/vitest”将复制的内容拷贝至文件末尾。6.使用命令“sed -i '5d' /tmp/vitest”删除文件的第5行。1.使用命令“rpm -qa | grep dhcp”查找系统中是否安装了dhcp软件的rpm包。2.使用命令“ls -l /etc | grep '^yum'”列出/etc目录下以字符串“yum”开头的所有文件。3.使用命令“ls -l /etc | grep dhcp”列出/etc目录下包含字符串“dhcp”的所有文件。1.使用命令“mount”查看系统的挂载信息,特别关注一下光盘是否挂载,如果光盘未挂载,则使用命令“mount /dev/cdrom /mnt/cdrom”将光盘挂载到/mnt/cdrom目录。2.使用命令“grep '^[base|updates]url' /etc/yum.conf”查看yum配置文件,确认yum仓库的位置和光盘的挂载点是否一致。