導航:首頁 > 編程系統 > prctllinux改名不成功

prctllinux改名不成功

發布時間:2023-04-10 09:55:38

linux下如何給多個文件同時改名啊

  1. 使用硬鏈接

    先看概念:通過索引節點來進行的連接。在Linux的文件系統中回,保存在磁碟答分區中的文件不管是什麼類型都給它分配一個編號,稱為索引節點號(InodeIndex)。在Linux中,多個文件名指向同一索引節點是存在的。一般這種連接就是硬連接。

    由於指向同一個節點,所以改變一個,其他的也會隨之改變。 不過你得先建立硬鏈接。如下是對文件 oldfile 創建硬鏈接:

    link oldfile newfile
    ln oldfile newfile

  2. 使用腳本來進行批處理

    在一個腳本裡面添加多條 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、構造假的進程名及參數,引導非法進入人員到蜜罐系統,取證

閱讀全文

與prctllinux改名不成功相關的資料

熱點內容
4558升級代換 瀏覽:589
泰國支持什麼網路 瀏覽:939
ps鉛筆畫用什麼工具上色 瀏覽:108
5s升級ios93會不會卡 瀏覽:775
驅動安裝完了找不到文件夾 瀏覽:717
金醫保app可以預約哪些醫院 瀏覽:840
如果快速刪掉電腦桌面文件 瀏覽:309
網路優化系統是什麼 瀏覽:320
海康威視數據怎麼刪除 瀏覽:826
ug編程哪個視圖好用 瀏覽:866
福州龍泉哪裡有學編程的 瀏覽:513
消保整改文件 瀏覽:145
重度貧血數據是多少 瀏覽:323
maya粒子表達式教程 瀏覽:84
抖音小視頻如何掛app 瀏覽:283
cad怎麼設置替補文件 瀏覽:790
win10啟動文件是空的 瀏覽:397
jk網站有哪些 瀏覽:134
學編程和3d哪個更好 瀏覽:932
win10移動硬碟文件無法打開 瀏覽:385

友情鏈接