⑴ linux用戶許可權-實例問題
這個問題其實不難,要能刪除文件,要對文件所在的目錄有寫許可權,首先,你把root的home目錄「~」的許可權設置為775,再把用戶C加入root組,這樣的話用戶C就可以刪除那個文件瞭然後,你建立abc.txt文件,把文件所有者設置為用戶a,再把文件的許可權設置640,最後將文件所屬組設置為用戶b所在的組,這樣的話,用戶a因為擁有這個文件,對這個文件的許可權是6(讀寫),所以他可以讀寫這個文件,但是,他對文件所在的目錄「~」許可權是5(讀、執行)沒有寫許可權,所以他無法刪除這個文件,而用戶b對文件的許可權是4(只讀),所以他只能讀這個文件,而他對文件所在的目錄的許可權同樣是5(讀、執行),所以他同樣不能刪除這個文件,而用戶C對文件的許可權是0(沒有任何許可權),所以他既不能讀也不能寫,但他對文件所在目錄的許可權是7(讀、寫、執行),所以他可以刪除這個文件。
⑵ 在Linux C語言下,可執行的Shell腳本文件與編譯之後的C可執行文件的區別有哪些
shell腳本是shell的一種擴展功能,也就是shell會根據你所寫的腳本一條一條的去執行,C寫的程序是直接給CPU執行的。一般來說做一些簡單功能,特別是和shell有關的。我們會用shell腳本,如系統環境的設定,開機後執行系統的初始化等。做一些功能復雜的,特別人用戶自已所想到的功能時會用C語。另外如果程序執行是要用到root許可權是最好也用C語。
(1)Shell腳本與Windows/Dos下的批處理相似,也就是用各類命令預先放入到一個文件中,方便一次性執行的一個程序文件,主要是方便管理員進行設置或者管理用的。但是它比Windows下的批處理更強大,比用其他編程程序編輯的程序效率更高,它使用了Linux/Unix下的命令。
(2)C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
⑶ Linux C語言用system()調用,帶參數
linux c system函數介紹:
system(執行shell 命令)
相關函數
fork,execve,waitpid,popen
表頭文件
#i nclude
定義函數
int system(const char * string);
函數說明
system()會調用fork()產生子進程,由子進程來調用/bin/sh-c string來執行參數string字元串所代表的命令,此命>令執行完後隨即返回原調用的進程。在調用system()期間SIGCHLD 信號會被暫時擱置,SIGINT和SIGQUIT 信號則會被忽略。
返回值
=-1:出現錯誤
=0:調用成功但是沒有出現子進程
>0:成功退出的子進程的id
如果system()在調用/bin/sh時失敗則返回127,其他失敗原因返回-1。若參數string為空指針(NULL),則返回非零值>。如果system()調用成功則最後會返回執行shell命令後的返回值,但是此返回值也有可能為 system()調用/bin/sh失敗所返回的127,因此最好能再檢查errno 來確認執行成功。
附加說明
在編寫具有SUID/SGID許可權的程序時請勿使用system(),system()會繼承環境變數,通過環境變數可能會造成系統安全的問題。
範例
#i nclude
main()
{
system("ls -al /etc/passwd /etc/shadow");
}
執行結果:
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
-r--------- 1 root root 572 Sep 2 15 :34 /etc/shado
例2:
char tmp[];
sprintf(tmp,"/bin/mount -t vfat %s /mnt/usb",dev);
system(tmp);
其中dev是/dev/sda1。
system函數的源碼
#include <syspes.h>
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
int system(const char * cmdstring)
{
pid_t pid;
int status;
if(cmdstring == NULL){
return (1);
}
if((pid = fork())<0){
status = -1;
}
else if(pid = 0){
execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
-exit(127); //子進程正常執行則不會執行此語句
}
else
{
while(waitpid(pid, &status, 0) < 0){
if(errno != EINTER)
{
status = -1;
break;
}
}
}
return status;
}
那麼如何獲得system的返回值呢??
char buf[10];
char * ps="ps -ef|grep -c root";
FILE *ptr;
int i;
if((ptr = popen(ps, "r")) != NULL)
{
fgets(buf, 10 , ptr);
i = atoi(buf);
pclose(ptr);
}
可以man下waitpid查看下如何檢查status的值
int ret = system("ls -al /etc/passwd /etc/shadow");
if(WIFSIGNALED(ret))
具體的這些宏查看man waitpid
⑷ 沒有root許可權怎麼使用linux c中ctags
root後獲取管理員許可權才能隨便刪手機上內置的軟體,因為手機廠商限制你了,有了root許可權你才算手機真正主人。下個一鍵Root大師可以一鍵root,你可以試試,很簡單的。
⑸ linux 虛擬機怎樣以root身份登錄
一樓的,人家說的是fedora12.....
fedora12初始情況下禁止root登陸,這是為了安全性考慮。當前也可以開啟.
切換到命令行模式下使用root登陸,然後修改文件
su
-c
'gedit
/etc/pam.d/gdm'
找到下面這行:
auth
required
pam_succeed_if.so
user
!=
root
quiet
將這一行備注掉:
#auth
required
pam_succeed_if.so
user
!=
root
quiet
再修改文件
edit
/etc/pam.d/gdm-password
同樣地注釋掉"auth
required
pam_succeed_if.so
user
!=
root
quiet"這一行
這樣就可以了。
順便說一句,有些
簡單的問題
,直接網上就可以搜到的。。
⑹ 在Linux中,當root密碼丟失後,應該:( )謝謝了,大神幫忙啊
樓上正確 附詳細方法 三種辦法: 1.在系統進入單用戶狀態,直接用passwd root去更改 2.用安裝光碟引導系統,進行linux rescue狀態,將原來/分區掛接上來,作法如下: cd /mnt mkdir hd mount -t auto /dev/hdaX(原來/分區所在的分區號) hd cd hd chroot ./ passwd root 這樣可以搞定 3.將本機的硬碟拿下來,掛到其他的linux系統上,採用的辦法與第二種相同 rh8中 一. lilo 1. 在出現 lilo: 提示時鍵入 linux single 畫面顯示 lilo: linux single 2. 回車可直接進入linux命令行 3. #vi /etc/shadow 將第一行,即以root開頭的一行中root:後和下一個:前的內容刪除, 第一行將類似於 root::...... 保存 4. #reboot重啟,root密碼為空 二. grub 1. 在出現grub畫面時,用上下鍵選中你平時啟動linux的那一項(別選dos喲),然後按e鍵 2. 再次用上下鍵選中你平時啟動linux的那一項(類似於kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/),然後按e鍵 3. 修改你現在見到的命令行,加入single,結果如下: kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/ 4. 回車返回,然後按b鍵啟動,即可直接進入linux命令行 5. #vi /etc/shadow 將第一行,即以root開頭的一行中root:後和下一個:前的內容刪除, 第一行將類似於 root::...... 保存 6. #reboot重啟,root密碼為空
麻煩採納,謝謝!
⑺ linux 怎麼編譯c的源程序的gcc,編譯命令是什麼
在Linux下面,如果要編譯一個C語言源程序,我們要使用gcc編譯器。
先將源文件編譯成目標文件:gcc - c hello.c
生成hello.o文件,再將目標文件編譯成可執行文件:gcc -o hello hello.o
如:
int main(int argc,char **argv)
{
printf("Hello Linux ");
}
(7)linuxcroot擴展閱讀:
在使用GCC編譯器的時候,我們必須給出一系列必要的調用參數和文件名稱。GCC編譯器的調用參數大約有100多個,這里只介紹其中最基本、最常用的參數。具體可參考GCC Manual。
GCC最基本的用法是∶gcc [options] [filenames]
其中options就是編譯器所需要的參數,filenames給出相關的文件名稱。
網路_gcc
⑻ linux root無法刪除文件和文件夾
一般來說,不能刪除文件Linux系統都會給出提示。如下圖所示,沒有許可權,所以不能刪除/boot目錄。
⑼ Linux下的c編程:系統調用
標準的c函數庫是所有的編譯都要具有的函數庫,(實際上還是略有不同),但是這些基本上實現方法略有不同,但是結果和標準是一樣的。但是linux的系統調用,調用是linux的系統庫,比如說unistd.h下的fork這個是Linux下特有,你在vs上,就沒有這個庫,也沒有這個函數。同樣在vs上寫c,你可以引入頭文件比如windows.h,顯然這個庫是Linux不具有的。簡單說系統調用庫根據具體的操作系統環境不同而不同,而c標准庫,是所有支持c語言編譯器都有的。
⑽ linux下 利用C或C++ 語言調用需要root許可權的命令時候,怎麼處理。
試試以下這種方式:
1. root用戶下將目標程序設置為root:root所有權;
2. 將目標程序設置為所有人可訪問chmod 777 APPNAME;或者將目標用戶加入root組等方式,使用戶可執行該程序;
3. root用戶下為目標程序設置UID,chmod u+s APPNAME
4. 執行該程序時自動具備root許可權
sudo調用時需要用戶口令的情況可通過管道解決,形式如下:
echo "PASSWORD" | sudo -S sh -c " CMD1; CMD2;..."