UNIX實驗.doc_第1頁
UNIX實驗.doc_第2頁
UNIX實驗.doc_第3頁
UNIX實驗.doc_第4頁
UNIX實驗.doc_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

UNIX實驗題實驗一(1)常用命令引用參照教材例子運行命令:date,cal,who,echo,clear,cp,mv,rm,cat,mkdir,rmdir,ls注意理解輸入輸出重定向,和管道(|)操作的功能在/etc/passwd文件中查找適合你的注冊名得行實驗一(2)文件名通配符的驗證APwd顯示當前目錄mkdir bak在當前目錄下創(chuàng)建bak子目錄,并轉到該子目錄下用vi生成try.c,zap.c,arc.c,xxx.h四文件執(zhí)行 cat *.c 寫出實際執(zhí)行的命令:cat arc.c try.c zap.c (按字典序)對命令cat來說,指定了3個文件B在當前目錄下創(chuàng)建三個文件: a1.c 1aaaaaaaaaaa 2bbbbbbbbbb a2.c 1xxxxxxxxxx 2xxxa1.cxxxx try.c 1yyyyyyyyyy 2yyyyya*.cyy 3hdsba1.cjjdfds 4jdfj43a2.c654 然后分別執(zhí)行grep a*.c try.c與grep a*.c try.c命令查看兩命令的執(zhí)行結果,并說明起區(qū)別前者實際執(zhí)行grep a1.c a2.c try.c,在a2.c和try.c中查找正則表達式a1.c后者在try.c文件中查找正則表達式a*.c實驗二(1)文件的寫權限(注:應先創(chuàng)建有賬戶jiang且登錄)$ who am ijiang pts/2 Jun 06 08:34$ who mydata$ ls -l mydata-rw-r-r- 1 jiang usr 58 Jun 06 09:04 mydata$ chmod u-w mydata (注:去除文件主的寫權限;u用戶主,-去除,w寫)$ who mydata (注:將who的輸出內容附加到mydata文件中,注意該命令的執(zhí)行結果,想想為什么?)mydata: The file access permissions do not allow the specified action.$ rm mydata (只讀文件可以被刪除,為什么?)rm: Remove mydata? y$ ls -l mydatals: 0653-341 The file mydata does not exist.實驗二(2) 文件的讀權限$ who mydata$ chmod u-rw mydata$ cat mydata (無法讀取不允許讀的文件中內容)cat: 0652-050 Cannot open mydata.$ chmod 644 mydata實驗二(3) 目錄寫權限$ chmod u-w . (當前目錄不許寫)$ who mydata2 (不能創(chuàng)建新文件,為什么?)mydata2: The file access permissions do not allow the specified action.$ who mydata (但是可以修改已有的文件,追加一部分數(shù)據(jù),為什么?)$ rm mydata (不能刪除文件)rm: 0653-609 Cannot remove mydata.The file access permissions do not allow the specified action.$ cp /etc/passwd mydata (可以覆蓋舊文件)$ cp /etc/passwd mydata2 (不能創(chuàng)建新文件)cp: mydata2: The file access permissions do not allow the specified action.$ mv mydata MyData (文件不許改名)mv: 0653-401 Cannot rename mydata to MyData: The file access permissions do not allow the specified action.$ mkdir Test (不可創(chuàng)建子目錄)mkdir: 0653-357 Cannot access directory .: The file access permissions do not allow the specified action.實驗二(4)目錄讀權限$ pwd/usr/jiang$ chmod u-r .$ ls (不可讀的目錄無法列表出其中文件)ls: .: The file access permissions do not allow the specified action.$ chmod 000 . (取消當前目錄所有權限)$ ls ls: 0653-345 .: Permission denied.$ chmod 755 . (試圖恢復當前目錄權限失敗,因為試圖訪問當前目錄下的.文件)chmod: .: The file access permissions do not allow the specified action.$ chmod 755 /usr/jiang (這種訪問不需要當前目錄權限,可恢復當前目錄權限)n 子目錄沒有讀寫權限,但是保留了x權限$ chmod u=x ttt$ cat ttt/ccp.c main(int argc, char *argv) .$ rm ttt/arg.c (子目錄沒有寫權限,不能刪除其中的文件)rm: 0653-609 Cannot remove ttt/arg.c.The file access permissions do not allow the specified action.$ ls ttt (子目錄沒有讀權限,不能列出其中的文件)ls: ttt: The file access permissions do not allow the specified action.n 子目錄有讀寫權限,但沒有x權限$ chmod u=rw ttt$ ls tttBUGS.report arg.c ccp.c chap.h mydataarg auth.c chap.c disk.img$ cat ttt/arg.c cat: 0652-050 Cannot open ttt/arg.c.(試圖設置其他用戶的文件或目錄的權限)$ chmod 777 /chmod: /: Operation not permitted.實驗二(5) 文件歸檔與壓縮的應用先在當前目錄下創(chuàng)建abc子目錄,再在abc子目錄下創(chuàng)建abc1子目錄,并分別復制一些文件到abc和abcabc1目錄下 ,然后做入如下操作。a、查看壓縮前后文件的大??;b、改變當前目錄位置,然后恢復歸檔文件。觀察原始目錄文件和恢復后的目錄文件情況。? tar cvf abc.tar abc /將目錄abc存到文件abc.tar ? gzip abc.tar/壓縮生成文件abc.tar.gz ? gunzip abc.tar.gz /解壓縮? tar xvf abc.tar /恢復歸檔文件實驗三注:如果采用直接復制shell程序然后轉到linux下執(zhí)行注意文本行只能保留換行符(0a),而不是回車換行(0d0a)實驗 (1)簡單shell程序。說明echo -e 015 $count c中015和c的作用 if $# = 0 then echo Usage: $0 : else count=$1while $count -gt 0 do count=expr $count - 1 echo -e 015 $count c sleep 1 done fi實驗二(2)簡單shell程序。請將 ! -d $cmd -a -x $cmd & $cmd 換為echo $cmd運行;若不換該語句可試運行下一段開機時自動執(zhí)行的批處理程序 if -d /etc/rc.d then for cmd in /etc/rc.d/*/* /etc/rc.d/* do ! -d $cmd -a -x $cmd & $cmd done fi 實驗三:a.虛擬機下linux訪問物理硬盤 b.簡單shell的實現(xiàn)1.通過設置虛擬機使其能識別物理硬盤2.用命令fdisk在linux下安裝硬盤3.實現(xiàn)將windows目錄下的文件拷如linux分區(qū).4.編程實現(xiàn)簡單shell功能.實驗四:消息隊列實驗1. 編譯s.c;c.c程序2. 在后臺運行s,另開兩個窗口分別運行c并輸入信息觀察輸出信息.3. 使用命令ipcs -q 顯示消息隊列有關的信息,注意key值與程序中的SC_KEY的關系. ipcrm -q 0x1111 刪除程序建立的消息隊列.4. 使用ps -a 顯示進程信息,并用kill命令刪除后臺運行的s程序的進程. 5. 在用戶主目錄下的.bashrc文件中加入命令行PATH=$PATH:.然后重新注冊后,再執(zhí)行程序. /* File name : sc.h */#include #include #include #include #define SC_KEY 0x1111 /定義消息隊列KEY#define M_IN 1 /用作服務進程接收消息類型的標識struct Msg long mtype; /消息類型(4B的整數(shù)),后續(xù)為消息正文 long src_pid; char string1000; #define MAX_MSG_LEN (sizeof(struct Msg) sizeof(long) / 定義MAX_MSG_LEN消息正文長度/s.c#include sc.hmain() struct Msg rmsg, smsg; int qid, rlen, slen, i; qid = msgget(SC_KEY, IPC_CREAT | 0666);/創(chuàng)建消息隊列 for (;) rlen=msgrcv(qid, &rmsg, MAX_MSG_LEN, M_IN, 0); slen = rlen; smsg.mtype = rmsg.src_pid; smsg.src_pid = 0; /* useless */ for (i = 0; i slen - sizeof(long); i+) smsg.stringi = toupper(rmsg.stringi); msgsnd(qid, &smsg, slen, 0); /c.c#include sc.hmain() int qid = -1, pid, ret, slen, rlen; struct Msg smsg, rmsg; qid = msgget(SC_KEY, 0); pid = getpid(); for (;) printf(Input a string or D for exit: ); if (fgets(smsg.string,1000,stdin) = NULL) exit(0); smsg.mtype = M_IN; smsg.src_pid = pid; slen = sizeof(long) + strlen(smsg.string) + 1; ret = msgsnd(qid, &smsg, slen, 0); rlen = msgrcv(qid, &rmsg, MAX_MSG_LEN, pid, 0); printf(Result : %sn, rmsg.string); 實驗五: (1)信號被忽略單獨運行xyz時,使用kill -15命令可殺死該進程 由abc進程來啟動的xyz進程就不能用kill -15命令殺死。注意:在第二種運行方式中,XYZ程序存放的位置與PATH環(huán)境變量值的關系。 搞清signal(SIGTERM, SIG_IGN)與kill -15的關系/* File name : abc.c */ #include main() signal(SIGTERM, SIG_IGN); if (fork() for(;) sleep(100); else execlp(”xyz”, ”xyz”, 0); /* File name : xyz.c */ main() int i = 0; for (;) printf(”%dn”, i+); sleep(1); (2) 信號的捕捉信號被捕捉并由一個用戶函數(shù)來處理 n 信號到達時,這個函數(shù)將被調用來處理那個信號 #include sig_handle(int sig) printf(”HELLO! Signal %d catched.n”,sig); main() signal(SIGINT, sig_handle); signal(SIGQUIT, sig_handle); for(;) sleep(500); n注意:在信號的用戶函數(shù)被調用之前,自動被重置到它的缺省行為。 搞清signal(SIGINT, sig_handle),signal(SIGQUIT, sig_handle)的作用,并說明在程序中與sig_handle(int sig)的關系。 實驗六:簡單的client.c/server0.c程序通信1. 編輯、編譯、連接兩程序。2. 在一terminal窗口運行server0, 然后在另一terminal窗口運行client 127.0.0.1,觀察server0窗口的變化。3. 在運行client窗口內輸入若干文本行,觀察server0窗口的變化。/server0.c#include #include #include #define SIZE 8192#define PORT_NO 12345int main(void) int admin_sock, data_sock, nbyte, i; struct sockaddr_in name; char buf8192; admin_sock = socket(AF_INET, SOCK_STREAM, 0);/創(chuàng)建一個套接字(用于網絡通信的文件描述符) name.sin_family = AF_INET; /short類型的兩字節(jié)協(xié)議棧. AF_INET(TCP/IP協(xié)議) name.sin_addr.s_addr = INADDR_ANY; /IP地址. INADDR_ANY宏,其值為0,使用本地任一IP地址 name.sin_port = htons(PORT_NO); /端口號=12345, htons主機字節(jié)順序轉為網絡字節(jié)順序. bind(admin_sock, &name, sizeof(name);/將套接字與本地端點名綁定起來. listen(admin_sock, 5); /對該套接字進行偵聽,最大的排隊長度是5.(非阻塞形式) data_sock = accept(admin_sock, 0, 0);/ 偵聽到遠端有請求,接受請求,內核返回一新的連接,用于數(shù)據(jù)傳輸. printf(Accept connectionn); for (;) nbyte = read(data_sock, buf, sizeof(buf); if (nbyte = 0) printf(* Disconnected.n); close(data_sock); exit(0); for (i = 0; i nbyte; i+) printf(%c, bufi); /client.c#define SIZE 8192 #define PORT_NO 12345 int main(int argc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論