⑴ linux C語言的鎖機制
你列印parents並沒嘗試lockf加鎖啊
文件鎖必須大家都用才有效果的
⑵ linux生成的rsa秘鑰在哪
方法一, 有的時候經常需要登錄ssh,每次都需要輸入密碼,會比較繁瑣。所以設置了一下使用RSA公鑰認證的方式登錄Linux。 首先需要在伺服器端設置/etc/ssh/sshd_config # vim /etc/ssh/sshd_config 修改如下兩行為yes。其實大多數情況下不用修改,默認就是yes。 RSAAuthentication yes PubkeyAuthentication yes (1) 如果客戶機和伺服器都是Linux機器,那麼我們使用下面的方法:(後面第2節會提到怎麼在Windows下使用Putty生成密鑰對) 我們需要在客戶端生成RSA密鑰對。使用ssh-keygen命令: # ssh-keygen -t rsa 參數t的意思是type,後面跟著加密類型,這里我們是rsa。 然後會提示你輸入密鑰保存完成文件名,這里我們需要使用默認的id_rsa,之後才能正常才能登錄。如果你生成的密鑰作為其他用處,那麼可以命名為其他名稱: Generating public/private rsa key pair. Enter file in which to save the key (/home/cake/.ssh/id_rsa): 之後會提示你輸入一個passphrase,我們這里可以留空,這樣我們登錄的時候就不許輸入密碼。 Enter passphrase (empty for no passphrase): Enter same passphrase again: 然後會提示你密鑰生成成功。這是你的私鑰保存為~/.ssh/id_rsa,你的公鑰是~/.ssh/id_rsa.pub 我們現在需要做的是,把id_rsa.pub的內容,添加的伺服器端的~/.ssh/autherized_keys文件最後。 你可以把這個文件上傳到伺服器端,然後使用命令: # cat id_rsa.pub >> ~/.ssh/autherized_keys 到這里就完成了。 (2) 在Windows下使用Putty生成密鑰對: Putty的安裝目錄下有個puttygen.exe程序,我們運行這個程序。 之後點擊Generate,開始生成密鑰對。我們需要根據提示,在指定方框內隨機滑動滑鼠。這是為了根據滑鼠軌跡,產生一些隨機數據。 之後生成結束,我們點擊Save Private Key將私鑰存放在某個目錄中。然後賦值最上面文本框中的全部內容,粘貼到Linux伺服器端的autherized_key的最後。 我們現在可以關閉這個小程序。 現在打開Putty,在左邊的選項中,選擇Conneciton–SSH–Auth,在Private key file for authentication中,選擇剛才保存的私鑰路徑就可以了。 到此位置,Putty也可以不用密碼登錄了。 方法二 使用Linux主機生成的密匙 1、生成密匙 [root@ .ssh]#ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: e4:9a:47:a7:b4:8a:0b:98:07:b8:70:de:6b:16:2c:0croot@ 2、將 /root/.ssh/id_rsa.pub改名為/root/.ssh/authorized_keys [root@ .ssh]#mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys 3、將私鑰id_rsa拷貝到遠程客戶端 1)、如果遠程客戶端是linux,拷貝到遠程客戶端/root/.ssh/即可 2)、putty作為遠程客戶端在 putty不能識別直接從伺服器拷貝來的私鑰,需要使用puttygen.exe進行格式轉換 (1)、打開puttygen.exe --> Conversions --> Import Key (2)、選擇拷貝過來的私鑰文件id_rsa (3)、Save private key->id_rsa.ppk(保存私鑰) 4、打開putty.exe 1)、Session --> Host Name (填寫伺服器地址或者域名) 2)、Connection --> SSH --> Auth (點Browse選擇剛生成的id_rsa.ppk) 3)、open 成功打開後出現如下提示: login as: root Authenticating with public key "imported-openssh-key" ---------------------------------------------------------------------------------- 當然你有可能會遇到這個錯誤 [因為我遇到了,呵呵]: Permissions 0755 for '你配置的公鑰文件路徑' are too open. 這個是因為這幾個文件許可權設置的有點問題 執行命令: chmod 600 你的文件
⑶ 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
⑷ linux用戶許可權-實例問題
這個問題其實不難,要能刪除文件,要對文件所在的目錄有寫許可權,首先,你把root的home目錄「~」的許可權設置為775,再把用戶C加入root組,這樣的話用戶C就可以刪除那個文件瞭然後,你建立abc.txt文件,把文件所有者設置為用戶a,再把文件的許可權設置640,最後將文件所屬組設置為用戶b所在的組,這樣的話,用戶a因為擁有這個文件,對這個文件的許可權是6(讀寫),所以他可以讀寫這個文件,但是,他對文件所在的目錄「~」許可權是5(讀、執行)沒有寫許可權,所以他無法刪除這個文件,而用戶b對文件的許可權是4(只讀),所以他只能讀這個文件,而他對文件所在的目錄的許可權同樣是5(讀、執行),所以他同樣不能刪除這個文件,而用戶C對文件的許可權是0(沒有任何許可權),所以他既不能讀也不能寫,但他對文件所在目錄的許可權是7(讀、寫、執行),所以他可以刪除這個文件。
⑸ linux 怎麼編譯c的源程序的gcc,編譯命令是什麼
編譯方法:格式 gcc [option] [sourcefilename]常用的選項最簡單的是:gcc hello.c默認的情況下將生成a.out的可執行性文件,
只需要在終端上輸入./a.out就可以看到執行的結果,如果你想指定生成目標文件的名字那麼你可以加上 -o選項,命令如下:gcc -o hello hello.c
命令:gcc -c hello hello.c
gcc命令的基本用法
gcc[options][filenames]
其中,filenames為文件名;options為編譯選項。
當不使用任何編譯選項編譯hello.c時,gcc將會自動編譯產生一個a.out的可執行文件:
[root@localhostc]#ls
hello.c
[root@localhostc]#gcchello.c
[root@localhostc]#ls
a.outhello.c
執行:
[root@localhostc]#./a.out
Hello,World!
使用-o編譯選擇,可以為編譯後的文件指定一個名字:
[root@localhostc]#ls
a.outhello.c
[root@localhostc]#gcchello.c-ohello
[root@localhostc]#ls
a.outhellohello.c
執行:
[root@localhostc]#./hello
Hello,World!
注意:使用-o選項時,-o後面必須跟一個文件名,即:-o outfile。
為了便於描述後面的選項,刪除hello和a.out可執行文件。
⑹ C語言編程中</root>與<root>是什麼意思
root指的是你有許可權可以再系統上對所有檔案有 "讀" "寫" "執行"的權力
.png
root這名詞常出現再Linux & unix上,Android是架構再Liinux上面所有才會有root這名詞
而root相當於windows 上的administration,一個管理者的身份。
再Android系統上為了保護系統不被惡搞,所以不建議你root,尤其是你完全不懂Linux的情況下。
一個想像,當你在Windows上是屬於administration的許可權下,你幾乎可以再任何地方對任何檔案刪除他。
但你刪除時 Windows上是會問你是否刪除。
但再Linux(Android也一樣)當你是 root後,你刪除檔案是值接刪除的且不會跟你確定是否刪除,
這刪除不是放到類似垃圾桶的地方而是真的刪了....
所以當你安裝了可能是惡意的程式,再你系統上任意的做事,後果是不堪的。
另外更新韌體是不需要root的.,只需要裝官方的軟體即可,版上有教學自己找吧。
強烈建議不是很懂Linux的人真的不要root。
root什麼意思
電腦中ROOT的意思:
在Unix系統(如AIX、BSD等)和類UNIX系統(如Debian、Redhat、Ubuntu等各個發行版的Linux)中,系統的超級用戶一般命名為root。root是系統中唯一的超級用戶,具有系統中所有的許可權,如啟動或停止一個進程,刪除或增加用戶,增加或者禁用硬體等等。
計算機領域術語現代操作系統一般屬於多用戶的操作系統,也就是說,同一台機器可以為多個用戶建立各自的賬戶,也允許擁有這些賬戶的用戶同時登錄這台計算機。這就涉及到計算機用戶和資源的管理。這么多用戶都能夠同時訪問和使用這同一台計算機,那麼,其中的哪個用戶具有管理所有這些用戶賬戶和整個計算機的資源的許可權呢?在Windows上,這個具有管理其他用戶和計算機資源的用戶一般叫administrator。
root用戶所在的組稱為root組。「組」是具有相似許可權的多個用戶的集合。
需要注意的是,root用戶是系統中唯一的超級管-理-員,它具有等同於操作系統的許可權,所以,如果用root進行了誤操作後果可能是危險的,如,在根目錄下不小心執行#rm -rf * (這個命令極度危險,千
⑺ scientific linux上root畫圖軟體運行c語言文件報錯
以WIN7為例,可按以下步驟操作:
1、按下鍵盤上的「Print Screen Sys Rq"鍵
⑻ Linux下的c編程:系統調用
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
⑼ 我在linux里普通用戶之間如何切換(創建用戶時沒有設置密碼)
1.登陸時,輸入超級用戶名:root,然後輸入root用戶的密碼。
2.如果你忘記root密碼。
a.在grub選項菜單按e進入編輯模式
b.(按e)編輯kernel那行
添加
/init
1
(或/single)
c.按b重啟
或者用光碟修改root密碼
a.將系統光碟放入光碟機,設置光碟機引導
b.選擇f2進入系統修復
輸入命令:linux
rescue
c.出現這個提示的時候應該記住,他提示的命令:chroot
/mnt/sysimage,選擇ok,回車
d.在shell輸入chroot
/mnt/sysimage
回車
e.輸入password
回車,新密碼
回車,確認新密碼
回車
f.重新啟動
如果有幫助,給分哦,謝謝!
⑽ linux下 利用C或C++ 語言調用需要root許可權的命令時候,怎麼處理。
我想到2種方法
1.運行你的C/C++程序時 加上sudo
「sudo ./程序名」 然後輸入密碼
2.方法1不行的話 程序里用到system時 加上sudo
systme("sudo 命令")
希望可以幫到你