使用硬链接
先看概念:通过索引节点来进行的连接。在Linux的文件系统中回,保存在磁盘答分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(InodeIndex)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。
由于指向同一个节点,所以改变一个,其他的也会随之改变。 不过你得先建立硬链接。如下是对文件 oldfile 创建硬链接:
link oldfile newfile
ln oldfile newfile
使用脚本来进行批处理
在一个脚本里面添加多条 rm 或 remove 命令,然后运行这个脚本,以后就能一次性修改这些文件名。
② 如何修改 Linux 中的进程名
. 应用场景
2. 通过Linux prctl修改进程名
3. 通过修改进程argv[0]修改进程名
4. 通过bash exec命令修改一个进程的cmdline信息
1. 应用场景
1. 标识父子进程名称,防止被误杀
2. 构造假的进程名及参数,引导非法进入人员到蜜罐系统,取证
3. 恶意程序、木马会通过"檫除"自己的进程名,使ps的时候显示的是一敬知旦个无名字的进程猛模,同时亮扰删除进程对应磁盘上的文件
③ Linux服务器lib64库改名后无法进系统
用系统光盘,以rescue模式启动,挂载文件系统,再把lib64改正确
④ linux 下对文件重命名
1、首先我们需复要打开linux客户端进制入软件主界面。
⑤ linux系统整个etc文件夹改名了,里面的东西没动,重启起不来了然后提示这个,请大神帮解答
晕啊!怎么能改那个文件夹的名称呢!出问题了吧!现在要想解决此问题,那么您可以使用U盘/光盘启动盘,进入到维护系统中,然后在没清Linux系统所在的磁盘分区中把那个文件夹唤察虚名称重新改回和燃来。如果没有启动盘,有其它电脑,那么也可以把硬盘挂载到其它电脑上,之后同样进入对应的分区中把文件夹名改回来即可。
⑥ linux 给文件改名的命令
1、连接上相应的linux主机,进入到等待输入shell指令的linux命令行状态下。
⑦ Linux系统中给文件改名的命令是什么/
linux的文件重命名非常简单。常用的是mv命令和rename命令。下面介绍一下这两个命令的用法,具体结节可以参考手册。
1、mv
mv fromfile tofile
如把文件a.txt得命名为b.txt,可以是mv a.txt b.txt。
mv一次只能重命名一个文件,而且,它是移动命令。如果tofile已经存在的话,会直接装原文件覆盖,从而造成文件的丢失。当然有选项可以对已存在的文件进行提示,但是,我表示,那个选项我还真不常用。综合这两点考虑,还是决定看看rename吧。
2、rename
rename frompart topart filename 或者 rename 's/frompart/topart/' filename
如把文件a.txt得命名为b.txt,可以是rename 'a' 'b' a.txt (这个没有试过,看网上别人说的,是这样子的。)还可以是:rename 's/^a/b/' a.txt
在有的系统之上,用前面的那句可以通过,在有的系统之上,用后面的这个可以通过。两个不一样,一个是C的,一个是perl的。明显看出,后面这条是正则表达式的写法。具体采用哪一种方式,可以man rename,在手册页的最后一行看版本。由于我使用的系统rename的版本是Perl的,所以我只能采用后面的这一种方式。
rename 强大 的地方在于,你可以使用*,?等,对所有符合条件的文件名进行批量修改。而你在使用mv的时候,只能采用写脚本,用循环的方式来解决。
⑧ linux 给文件改名的命令
1、连接上相应的linux主机,进入到等待输入shell指令的linux命令行状态下。
⑨ linux下root能改名吗
root可以改名
1.采用 vipw 命令来编辑passwd文件,找到root哪一行(应该在第一行)将root改为需要的名称。另外还要改动一下/etc/shadow文件,将root这一行改为需呀的名称。注意:如果 /etc/passwd和/etc/shadow文件的名称不一致就会很麻烦。
2.可以使用命令 usermod -l newname root 来修改。
修改root名称最好多几个窗口,以免修改错误带来的麻烦,还要到单用户模式中强制修改回来。
⑩ 如何修改 Linux 中的进程名
在编写网络服务器程序时,为了响应客户端的请求,我们经常需要新建进程来处理业务流程;而且又是为了关闭某个非法请求或者关闭长连接的客户端,这时就需要杀死进程 killall proc_name。升孙 但是在新建进程时,子进程名与父进程名相同。因此需要由进程名及参数来区分客户端连接。
在linux中prctl可以满足这个要求,下满是man手册:
PR_SET_NAME (since Linux 2.6.9)
Set the process name for the calling process, using the value in
the location pointed to by (char *) arg2. The name can be up to
16 bytes long, and should be null terminated if it contains
fewer bytes.
但是prctl修改的进程名,只能是16个字节(包括皮链'\0')。下面是修改的代码(changetitle.c):
#include <stdio.h>
#include <sys/prctl.h>
int main(int argc, char *argv[], char *envp[])
{
char *new_name = "abcdefghijklmnopqrstuvwxyz";
getchar();
prctl(PR_SET_NAME, new_name);
getchar();
return 0;
}
当新名称长度大于16时就会截断,上面的新名字截断后是abcdefghijklmno。这对于我们来说是有缺陷的。而且通过ps -aux 查看,进程名称并没有改变,改变的只是/prco/$(PID)/stat和
/prco/$(PID)/status的值,而/prco/$(PID)/cmdline并没有改变。这种方式使用起来也是不方便的。
下面介绍另一种方式,可以与上面的方式互补。
首先看一下main函数的原型:int main(int argc, char *argv[]);
argv[0]存放的是终端执行的程序名称也就是进程名。argv[1...argc-1]存放的是命令行参数。
linux中main()还有一个隐藏参数就是环境变量信息,存放了运行时所需要的环境变量。
我们可以通过以下来访问这个变量
extern char **environ;
argv与environ是连续存放在栈区的。下面吵握链代码可以查看参数信息:
#include <stdio.h>
#include <string.h>
extern char **environ;
int main(int argc , char *argv[])
{
int i;
printf("argc:%d\n" , argc);
for (i = 0; i < argc; ++i)
{
printf("argv[%d](0x%x):%s\n" , i , (unsigned int)argv[i], argv[i]);
}
printf("evriron=0x%x\n" , (unsigned int)environ[0]);
return 0;
}
通过上面可以看出,我们只需要修改argv[0]所指向的内存空间的内容,就可以修改进程名。但是如果新名称比argv[0]的长度小,我们可以直接修改,并把多余的部分请0,如果新名称
比argv[0]长我们需要两步:
1、申请新内存保存环境变量信息和argv[1...argc-1]参数信息
2、修改argv[0],将新名称往后到environ的最后一项清0
以下是参考代码:
#include <unistd.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <sys/prctl.h>
# define MAXLINE 2048
extern char **environ;
static char **g_main_Argv = NULL; /* pointer to argument vector */
static char *g_main_LastArgv = NULL; /* end of argv */
void setproctitle_init(int argc, char **argv, char **envp)
{
int i;
for (i = 0; envp[i] != NULL; i++) // calc envp num
continue;
environ = (char **) malloc(sizeof (char *) * (i + 1)); // malloc envp pointer
for (i = 0; envp[i] != NULL; i++)
{
environ[i] = malloc(sizeof(char) * strlen(envp[i]));
strcpy(environ[i], envp[i]);
}
environ[i] = NULL;
g_main_Argv = argv;
if (i > 0)
g_main_LastArgv = envp[i - 1] + strlen(envp[i - 1]);
else
g_main_LastArgv = argv[argc - 1] + strlen(argv[argc - 1]);
}
void setproctitle(const char *fmt, ...)
{
char *p;
int i;
char buf[MAXLINE];
extern char **g_main_Argv;
extern char *g_main_LastArgv;
va_list ap;
p = buf;
va_start(ap, fmt);
vsprintf(p, fmt, ap);
va_end(ap);
i = strlen(buf);
if (i > g_main_LastArgv - g_main_Argv[0] - 2)
{
i = g_main_LastArgv - g_main_Argv[0] - 2;
buf[i] = '\0';
}
(void) strcpy(g_main_Argv[0], buf);
p = &g_main_Argv[0][i];
while (p < g_main_LastArgv)
*p++ = '\0';
g_main_Argv[1] = NULL;
prctl(PR_SET_NAME,buf);
}
int main(int argc, char *argv[])
{
char argv_buf[MAXLINE] = {0}; // save argv paramters
for(int i = 1; i < argc; i++)
{
strcat(argv_buf, argv[i]);
strcat(argv_buf, " ");
}
setproctitle_init(argc, argv, environ);
setproctitle("%s@%s %s", "new_name", "ip", argv_buf);
for (int i = 0; environ[i] != NULL; i++)
free(environ[i]);
getchar();
return 0;
}
上面的代码使用了prctl和修改argv[0]两种修改方法的结合,通过ps -a 、 ps -ef 、ps -aux、 top 等等命令都只能查询到新进程名,/proc/$PID/ 下的文件也显示了新进程名的信息。
应用场景:
1、标识父子进程名称,防止被误杀
2、构造假的进程名及参数,引导非法进入人员到蜜罐系统,取证