///實驗1 Linux操作基礎和文本編輯
useradd 使用者名
passwd 使用者名
groupadd 使用者組名
man 指令
help指令
vi 檔案名
i指令插入文本
删除一個字元,用x指令
删除一行,用dd指令
删除剩下的行,用d指令
複原文字指令用u
指令ndd:能夠剪切從目前行開始的n行文本
指令p:能将剪切的内容粘貼到文檔内任何地方
向前查找:使用指令/+要查找的文本,向後查找:使用指令?+要查找的文本
:.=并按Enter鍵确定光标所在目前行行号
:行号并按Enter鍵,光标移動到輸入的行号。:$:光标移動到最後一行
ESC
:wq把編輯緩沖區的内容寫到你編輯的檔案中,退出編輯器,回到系統提示符下
:ZZ僅當作過修改時才将緩沖區内容寫到檔案上
:x與 :ZZ 相同
:q!強行退出vi
///實驗2Linux檔案系統
1.ls指令顯示目前工作目錄的内容
指令格式:ls [選項]目錄名 (顯示目錄中所有子目錄及檔案名)
選項:-l:以清單方式顯示。
2.指令mkdir建立目錄;指令rmdir删除目錄;
文法:
mkdir [選項]目錄名
rmdir [選項]目錄名(注意目錄下必須為空)
選項-p:可以建立和删除一系列具有父子關系的目錄
3.pwd指令确定你目前的工作目錄
指令cd .. 移到上一目錄
指令cd 目前目錄下的檔案名 移到目前目錄下的指定檔案内
date > file1 将目前日期和時間存放到建立檔案file1中
指令 > 輸出檔案(檔案輸出重定向)
#ls >file1 (将ls顯示的結果輸出到檔案file1中,如果file1存在,則覆寫)
4.cat指令檢視file1檔案的内容
man date >> file1 将date指令的用法附加到檔案file1的後面
指令 >> 輸出檔案(給檔案追加資料)
#ls –l >>file1 (将ls -l顯示的結果追加到檔案file1末尾)
ls -l file1指令列出檔案file1的較詳細的資訊
5.cp file1 fa 生成檔案file1的副本fa
cp[選項] 檔案1 檔案2(複制檔案1,并将副本命名為檔案2。如果檔案2是個目錄,就将檔案1的副本放在目錄中。)
選項:
-i : 如果目标檔案存在,在覆寫前提示
-r : 複制目錄
注意:複制前必須具有檔案1的讀權限和檔案2的寫權限
6.rm fa指令将檔案fa删除
rm [選項] 檔案清單
-i : 删除前提示
-f : 強制删除,不考慮權限
-r : 删除目錄中所有内容包括所有非空子目錄
7.mv file1 file_a
檔案的移動和重命名,mv指令
格式:mv [選項] 檔案1 檔案2
#mv temp temp.moved(将temp重新命名為temp.moved)
#mv dir1/* dir2 (将目錄dir1中所有檔案和目錄(不包括隐藏檔案)移到目錄dir2中)
8.檢視檔案指令cat
格式:cat [選項]檔案名
選項 –n:為顯示行添加行号
指令more:如果要檢視的檔案超過一頁,可以分屏顯示。
空格鍵:顯示下一屏
Enter鍵:顯示下一行
指令head:顯示檔案的頭10行内容
指令tail:顯示檔案的末尾10行内容
cat file*指令列出目前工作目錄中以file開頭的所有檔案
cat file?指令
9.find 目錄清單 -name 檔案名 -print
其中,目錄清單是指定開始查找的目錄,檔案名是你要查找的檔案或目錄。-name和-print是find指令的選項。
#find /usr/include –name socket.h –print
(在/usr/include及子目錄中查找檔案socket.h,并列印該檔案的絕對路徑)
10.whereis [選項]指令名
找到顯示該指令的絕對路徑名及手冊頁的絕對路徑名(執行指令時,該指令有效但shell找不到它時用)
11.grep指令在檔案中找到使用者的有關資訊
grep指令常用于文本檔案中查找給定的詞或短語。包含給定模式字元串的行在标準輸出(即顯示器)上顯示出來。
格式:grep [選項] 字元串 檔案名
#grep xiaomei /etc/passwd(在/etc/passwd目錄中尋找字元串xiaomei,找到則顯示包含該字元串的行資訊)
#grep –n xiaomei /etc/passwd (檔案中包含xiaomei字元串的行都顯示了行号)
12.指令echo $HOME : 确認目前使用者的主目錄
13.修改檔案權限
<1>符号模式格式如下:
chmod key 檔案 [檔案清單]
其中,key由以下成分組成:
[who] [+|-|=] [mode]
——who這一部分可以由下面的一個和多個字元組成:u,g,o或a,它們分别表示檔案主,組使用者,其他使用者或所有三種使用者。預設值是a。
——第二部分必須是以下三個字元中的一個:+,-,或者=,分别表示增加,删除或者設定。
——mode成分可以由以下字元任意組合:r,w或x,分别表示讀,寫或者執行/查詢的權限
以上三個部分必須依次輸入,而且它們之間沒有空格。在一個指令行中可以指定多個key,彼此間用逗号隔開,中間沒有空格。
如:設檔案f原來的權限是rw-rw-r--,現在想讓所有使用者都具有執行權限,則可使用以下指令:
chmod a+x f
該指令執行後,檔案f的權限變成rwxrwxr-x
<2>絕對模式格式如下:
chmod 八進制模式 檔案 [檔案清單]
例子:權限 rw- rw- r-- 用二進制表示應為:110 110 100,
八進制表示則為:664
#chmod 664 file1(将檔案1賦予rw- rw- r--權限)
14.改變檔案或目錄所屬的組 chgrp指令
格式:chgrp [選項] 組名 檔案名
15.改變檔案的屬主 chown指令
格式:chown [選項] 使用者名 檔案名
例:#chown xiaomei test(将檔案test的所屬使用者由root改為xiaomei)
///實驗3 Linux的程序控制
1.who指令檢視目前線上使用者資訊
2.w指令檢視目前登入的使用者及正在執行的指令
3.ps指令用法:
格式:ps 選項
常用選項說明:
-e: 顯示所有程序
-a:顯示終端上所有程序,包括前一會話中運作的背景程序
-l: 以長清單的方式輸出,顯示如下内容:
F:與程序相關的标志,訓示程序是否為一個使用者程序或核心程序。
S:程序狀态。R(就緒态),S(睡眠狀态),D(不間斷睡眠狀态,如執行I/O時),T(終止狀态),Z(僵化程序)。
UID:使用者号
PID:程序号
PPID:父程序号
PRI:優先權
SZ:大小
TTY:終端,該字段顯示附加程序的終端名
TIME:程序運作時間
CMD:指令名
WCHAN:等待通道:對于正在運作或準備運作的程序,值為空;對于等待程序,該字段列出程序等待的核心事件名。
NI:程序的nice值,計算程序優先号的參數
4.kill指令終止程序
Kill [-信号編号] 程序pid号
信号編号:1(終止)2(中斷)9(必殺)
5.建立一終端視窗,運作vi編輯器 ctrl+Z終止該前台程序
背景運作vi編輯器。切換到前台(使用fg指令)。
産生背景指令格式:指令 &
背景運作vi編輯器後撤銷該背景vi指令。使用ps檢視是否已經終止。(注意kill指令不帶信号編号使用後的程序狀态。)
前台運作vi編輯器。切換到背景。(先終止該前台指令,再使用bg指令切換到背景。
///實驗4 Linux程式開發基礎
1.vi first.c 建立C語言檔案
2.cat first.c 檢視完整檔案
3.more first.c 每次檢視一頁檔案
4.指令格式:gcc 【選項】 檔案清單
該指令用于調用C編譯系統。當指令執行後,它依次進行預處理,編譯,彙編,連結,最後産生可執行代碼。預設情況下,可執行代碼放在a.out檔案中。
例:
#gcc first.c //對檔案first.c進行編譯,并産生預設的可執行檔案a.out。
#gcc –o success first.c //gcc指令帶上選項–o表示對檔案first.c進行編譯,并将可執行代碼存放在一個自己指定的檔案中(此處為success)。
5.<1>使用gdb調試C程式之前,用gcc對程式進行編譯的時候帶上-g選項。
例: #gcc –g first.c –o success
<2>運作gdb:
gdb 檔案名(編譯後的可執行檔案)
例:%gdb success
<3>退出gdb:使用指令quit退出gdb傳回shell
<4>Gdb幫助指令:
help:獲得gdb指令的相關資訊。help指令顯示了所有gdb指令的類名。
help 指令名:顯示該指令的簡要說明。
如:(gdb)help run:顯示指令run的簡要說明
<5>執行程式:使用run指令
<6>設定斷點:
(gdb)break 17(行數)
(gdb)run :程式将在17行處停住。
<7>程式的單步調試:
(gdb)step:逐行執行程式
(gdb)continue:繼續将後面程式執行完畢。
<8>顯示執行中程式的變量或表達式的值:
(gdb)print 變量名
///實驗5 程序管理
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
Void waiting(),stop();
Int wait_mark;
Main()
{
int p1,p2;
while((p1= fork()) = = -1);
if (p1>0)
{
while((p2= fork()) = = -1);
if (p2>0)
{
Wait_mark=1;
Signal(SIGINT, stop); //如果鍵盤不認del鍵,思考此處如何解決?能否跳
Waiting(); // 過,使用别的方法?比如任意輸入字元getchar():w繼續
Kill(p1,16);
Kill(p2,17);
Wait(0);
Printf(“/n parent process is killed!/n”);
Exit(0);
}
Else
Wait_mark=1;
Signal(17, stop);
Waiting();
Printf(“/n child process2 is killed by parent!/n”);
}
Wait_mark=1;
Signal(16, stop);
Printf(“/n child process1 is killed by parent!/n”);
Void waiting()
While(wait_mark!=0);
Void stop()
Wait_mark=0;