2010年5月28日 星期五

.檔案系統階層標準-自我筆記

1.檔案系統階層標準:Filesystem Hierarchy Standard,FHS)
2.四大類別:1.可共享的(Shareable Data)
          2.不可共享的(Unshareable Data)
3.變動性的資料(Variable Data)
4.靜態的資料(Static Data)
3.根目錄(Root Directory, / )/bin/dev/etc/lib/sbin五個目錄不能掛載,直接儲存於根目錄。
4./usr:指unix特殊資源(Unix Specific Resources)或是unix系統資源(Unix System Resources),包含應用程式的執行檔案、圖型介面程式、函數庫等。
5./var:存放的檔案都是屬於變動性較高的檔案,例如 系統相關記錄檔案等。
6.檔案型態五大類
常規檔案
Regular File
文字檔案 Text File
二位位檔案
Binary File
資料檔案 Data File
執行檔案 Execute File
目錄 Directory
連結檔案
Link File
符號連結檔案 Symbol Link File
硬式連結檔案 Hard Link File
裝置檔案
Device File
區塊裝置檔案 Block-oriented Device File
字元裝置檔案Character-oriented Device File
跨行程通訊檔案
Inter Process Communicate File
Unix Domain Socket檔案
FIFo Node檔案
7.檔案的操作

新增 create
複製Copy
刪除Delete
搬移Move
更名rename
常規檔案
Touch
Cp
Rm
Move
rename
目錄
Mkdir
Rmdir
連結檔案
Ln
rm
裝置檔案
Mknod
跨行程通訊檔案
Mknod/mkfifo

Ls = 輸入的指令----- ------ 短參數 -l
ls –l /etc/pwasswd
                                ---引數,作為ls指令參考的資料
Command [ptions] [arguments]
原先的語法:command –a –n arguments
整合的語法:command –an  arguments
(不可將長短參數整合在一起使用,僅能夠支持短參數的整合語法。)

8.Ls指令常用參數
-a
顯示目錄內所有的檔案
-d
只顯示目錄名稱不顯示目錄的檔案資訊
-F
依檔案類型的檔案名稱後方,加上特殊符號 (* / = | @)
-h
檔案大小以MBKB顯示
-l
長資料格式顯示
-i
將檔案屬性的欄位列出inode的資訊
-t
依時間日期排序
-r
檔案排序反向進行輸出(大小→小大)
-R
目錄下的子目錄全部列出
-S
容量大小排序
-u
依最後一次存取時間排序(atime)
--time
atime or ctime顯示(預設是atime)
--full-time
完整時間來表示資訊
9.檔案名稱
drwxr-xr-x
2
stoner
stoner
4096
126 02:09
Desktop
檔案屬性
連結數量
檔案擁有者
檔案擁有群組
檔案大小
時間戳記
檔案名稱
10.Touch指令常用參數
-a
變更存取時間(atime變更)
-m
變更inode屬性被改的time(mtime變更)
-r file
file檔案的時間戳記為檔案的參考
-c
僅變更ctime,如檔案不存在,不產生0位元空的檔案(--no-create參數結果)
-t time
指定時間格式變更檔案時間戳記
11.mkdir指令
-m
指定目錄的預設權限
-p
以遞迴的方式建立巢狀目錄
12.Ln指令:硬式ln –l檔案名稱hard-檔案名稱,軟式ln –s 檔案名稱soft-檔案名稱
13.Pwd指令:列印出目前所在的工作路徑(Print Work Driectory)
-p
顯示被連結的原始檔案路徑
Absolute path(絕對)
表示路徑是從/根目錄開始描述起的
Relative path (相對)
不是從/根目錄開始描述起的
.=本層目錄
. .=上層目錄

Cd切換指令
: cd /tmp
: cd desktop
Cd .
Cd ..
cd ~ =user家目錄
cd -=切上個路徑
14.Cp指令參數: cp 參數 路徑 .  例如: cp –i /etc/passwd.
-a  --archive
完全保存檔案or目錄(複制目錄 –R配合使用)
-i  --interactive
複寫目同檔案名稱 要先確認才操作
-R/-r  --recursive
目錄複製的遞迴處理
-s  --symbolic-link
製作一個符號連結檔案
-l  --link
製作一個硬式連結檔案
-u   --update
當來源檔案比目的地檔案新時,才會進行複製
15.Rm指令參數:檔案 rm 檔案名稱, 目錄 rm –r 目錄名稱
-r
進行目錄的遞迴處理(刪除目錄內裡所有目錄和檔案)
-i
執行刪除工作前會詢問確認
-f
預設系統管理員在刪檔,安全上的考量會進行詢目確認,此參數可以讓使用者忽略詢問,強制刪除檔案或目綠
16.Mv指令參數:mv 檔案名稱  指定移動的路徑
17.Rename指令參數:rename 變更前的名稱 變更後的名稱 操作的對象(檔案or副檔名)
18.Man指令參數: man 參數 name(文件名稱)
Whatis
預先了解手冊頁章節分類中哪幾個分類符合使用者需求
info
類似man手冊的工具
Maninfo
指令 man –w pwd  OR  info –w pwd  得知手冊頁存放位置
19.Linux系統常見檔案目錄解析
/bin
重要的執行程式,程式檔案都是在檔案系統未被掛載前便被執行使用
/sbin
主要是存放提供系統管理員專屬的重要執行程式檔案
/boot
存放許多關於系統啟動時所需的程式檔案
/mnt
通常用來作為臨時掛載某一裝置使用
/media
Os用來做為removable media的自動掛載位置
/opt
放置較大的套裝軟體
/etc
重要的目錄,內涵蓋大部份的系統組態檔案與服務組態檔案資訊
/dev
存放裝置檔案的目錄
/home
預設使用者家目錄位置
/lib
存放共享函數庫於/bin or /sbin目錄官的程式檔案呼叫使用(modules為存放linux核心相關模組)
/tmp
程式執行過程如有產生暫存檔的預設儲存位置
/root
系統管理員root的預設家目錄

檔案基本權限管理-自我筆記

檔案基本權限管理
指的權限一般我們是指針對檔案內容的存取能力,不是僅就檔案本身!
例如:使用者 a可以讀取/etc/passwd檔案內容,因此他便具備檔案內容的存取權限。

檔案基本權限檢視
linux ox中每個檔案都會擁有一個基本權限的記錄(指令ls –l):如圖
-rw-r--r--
1
root
root
4096
126 02:09
passwd
檔案屬性
連結數量
檔案擁有者
檔案擁有群組
檔案大小
時間戳記
檔案名稱
一個檔案的完整資訊中包含了七個欄位的資訊,只有其中的 檔案屬性、檔案擁有者、檔案擁有群組和權限有關聯(其它的不會影響設定與使用)

檔案屬性:是由10個字元共同組成,第一個字元表示檔案的類型,2~10稱為權限模式,9個字元又會每三個字元為一組。
檔案擁有者
通常會用英文字母u來代表檔案擁有者的權限欄位
檔案擁有群組
通常會用英文字母g來代表檔案擁有群組的權限欄位
其他使用者
通常會用英文字母o來代表其它使用者的權美欄位
R
讀取檔案內容的權限
顯示存放目錄內的檔案名稱
W
變更檔案內容的權限
目錄內進行新增、刪除、搬移、更名等檔案操作
X
執行檔案內容的權限
進入目錄內或檢式存放於目錄的檔案完整內容
  檔案類型         檔案擁有群組權限(g)
-  rw-  r--  r--
檔案擁有者權限(u) 其它使用者權限(o)
檔案擁有者:欄位中會顯示檔案的擁有者是誰,通常有二種情況下可以成為檔案的擁有者
            1.建立這檔案的使用者預設會成為檔案擁有者
            2.透過chown指令將使用者設定為檔案的擁有者
檔案擁有群組:欄位中會用來顯示檔案擁有群組帳號是誰,二種情況下
1.      建立這個檔案的使用者所使用的主要群組預設會成為檔案的擁有群組
2.      透過chgrp指偷將群組帳號設定為檔案的擁有群組

變更檔案權限
Chmod變更檔案的存取權限,有二種方法,數字類型改變檔案權限、符號類型改變檔案權限。
數字類型改變檔案權限:r=4 w=2 x=1
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
chmod [-R] xyz 檔案或目錄
選項與參數:
 xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。
-R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案都會變更


符號類型改變檔案權限
chmod
u
g
o
a
+(加入)
-(
除去)
=(
設定)
r
w
x
檔案或目錄
Chmod u=rwx,go=rx passwd

變更檔案擁有者權限:chown變更檔案擁有者、chgrp案有群組
chown [-R] 帳號名稱 檔案或目錄
chown [-R] 帳號名稱:群組名稱 檔案或目錄
選項與參數:
-R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案都變更

chgrp [-R] dirname/filename ...
選項與參數:
-R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案、目錄
     都更新成為這個群組之意。常常用在變更某一目錄內所有的檔案之情況。








檔案特殊權限功能
特殊權限
檔案
目錄
說明
Setuid
1.      檔案擁有者需具備x的執行權限
2.      程式執行以檔案擁者決定

也稱suid,在os中,當使用者存取某檔案時,系統會判斷存取者是否符合流程中的權限需求,如符合便賦予,否則不賦予。
Setgid
1.      檔案擁有群組需具備x的執行權限
2.      程式執行以檔案擁群組決定
1.      目錄的檔案擁有群組需具備wx權限
2.      在目錄內新建立的檔案將會copy目錄的檔案擁有群組作為檔案的擁有群組
唯一支援檔案與目錄的權限設定,針對檔案的運作方式與功能與suid相同。只要將目錄的w權限開啟後便允許符合的使用者,所產生的檔案會以產生檔案的使用者設定權限。
stickybit

1.      目錄的其他使用者需具備wx權限
2.      只有結級使用者與檔案擁有者可在目錄內刪除檔案
針對目錄所存在的,允許所有user在目錄上產生新檔,但僅許檔案擁有者和超級使用者可以刪檔的權限。
特殊權限的開啟與關閉
u
g
o
欄位
{+-}
s
s
t
權限
Setuidchmod u+s vi(vi編輯器程式)
Setuid並非是將使用者切換到檔案擁有者的身分去執行程式檔案,而是讓使用者暫時具備有檔案擁有者的權限去執行程式檔案。

S
x權限欄位出現表該程式檔案沒有具備執行權限
s
x權限欄位出現表該程式檔案有具備執行權限

Setgidchmod g+ws 檔案名稱:在檔案擁有群組權限欄位會變更為rws
Sticky bitchmod o+t 目錄名稱:在其他使用者權限欄位中的x執行權變成t,僅對其他使用者有斷影響。
T
x權限欄位出現表該目錄沒有具備執行權限
t
x權限欄位出現表該目錄有具備執行權限


存取控制清單ALC的使用
權限管理機制(Access Control List,ALC):提供傳統的基本權限外,還開放更細部權限設定功能,可對單一使用者、單一檔案或目錄進行權限規範。
在每個檔案或目錄中如啟用了acl權限規則時,原先的ACL entry ownerother所配置的基本權限都是永久有效的,不受其它規則所影響
User class
指的是使統POSIX標準檔案的權限:例如ugo
Acces ACL
用來決定檔案或是目錄可以由哪個使用者帳號或是群組帳號進行存取。又稱為基本型ACL
Default ACL
針對目錄所進行的權限規範
語法:setfacl –d –m g:newgrp:rw 目錄名稱
ACL entry
組成ACL規則的最小單位,每一個檔案或是目錄的acl權限都是由ACL entry所組成的。
型態
格式
named user
user:lpi_yang:rw-
Named gropu
group:newgrp:r--
mask
mask::rwx
Owner
user::rw-
Onwer group
group::r-x
other
other::rwx
檔案或目錄增加mask ACL entry,則會影響原先檔案上的named usernamed groupowner group的有效權限變化。
ACL規則語法 :
{ugo}:{使用者、群組帳號、其它使用者的名稱}:設定的權限 檔名
getfacl:取得某個檔案/目錄的 ACL 設定項目;
setfacl:設定某個目錄/檔案的 ACL 規範。
setfacl [-bkRd] [{-m|-x} acl參數] 目標檔名
選項與參數:
-m :設定後續的 acl 參數給檔案使用,不可與 -x 合用;
-x :刪除後續的 acl 參數,不可與 -m 合用;
-b :移除所有的 ACL 設定參數;
-k :移除預設的 ACL 參數,關於所謂的『預設』參數於後續範例中介紹;
-R :遞迴設定 acl ,亦即包括次目錄都會被設定起來;
-d :設定『預設 acl 參數』的意思!只對目錄有效,在該目錄新建的資料會引用此預設值
# 1. 針對特定使用者的方式:
# 設定規範:『 u:[使用者帳號列表]:[rwx] 』,例如針對 vbird1 的權限規範 rx
[root@www ~]# touch acl_test1
[root@www ~]# ll acl_test1
-rw-r--r-- 1 root root 0 Feb 27 13:28 acl_test1
[root@www ~]# setfacl -m u:vbird1:rx acl_test1
[root@www ~]# ll acl_test1
-rw-r-xr--+ 1 root root 0 Feb 27 13:28 acl_test1
# 權限部分多了個 + ,且與原本的權限 (644) 看起來差異很大!但要如何查閱呢?

[root@www ~]# setfacl -m u::rwx acl_test1
[root@www ~]# ll acl_test1
-rwxr-xr--+ 1 root root 0 Feb 27 13:28 acl_test1
# 無使用者列表,代表設定該檔案擁有者,所以上面顯示 root 的權限成為 rwx 了!
上述動作為最簡單的 ACL 設定,利用『 u:使用者:權限 』的方式來設定的啦!設定前請加上 -m 這個選項。 如果一個檔案設定了 ACL 參數後,他的權限部分就會多出一個 + 號了!但是此時你看到的權限與實際權限可能就會有點誤差! 那要如何觀察呢?就透過 getfacl 吧!
Getfacl:當你讀取檔案中所存放的acl設定則要透過getfacl來完成。
[root@www ~]# getfacl filename
選項與參數:
getfacl 的選項幾乎與 setfacl 相同!所以鳥哥這裡就免去了選項的說明啊!
 
# 請列出剛剛我們設定的 acl_test1 的權限內容:
[root@www ~]# getfacl acl_test1
# file: acl_test1   <==說明檔名而已!
# owner: root       <==說明此檔案的擁有者,亦即 ll 看到的第三使用者欄位
# group: root       <==此檔案的所屬群組,亦即 ll 看到的第四群組欄位
user::rwx           <==使用者列表欄是空的,代表檔案擁有者的權限
user:vbird1:r-x     <==針對 vbird1 的權限設定為 rx ,與擁有者並不同!
group::r--          <==針對檔案群組的權限設定僅有 r 
mask::r-x           <==此檔案預設的有效權限 (mask)
other::r--          <==其他人擁有的權限囉!

# 2. 針對特定群組的方式:
# 設定規範:『 g:[群組列表]:[rwx] 』,例如針對 mygroup1 的權限規範 rx 
[root@www ~]# setfacl -m g:mygroup1:rx acl_test1
[root@www ~]# getfacl acl_test1
# file: acl_test1
# owner: root
# group: root
user::rwx
user:vbird1:r-x
group::r--
group:mygroup1:r-x  <==這裡就是新增的部分!多了這個群組的權限設定!
mask::r-x
other::r--
 
# 3. 針對有效權限(使用者或群組所設定的權限必須要存在於 mask 的權限設定範圍內才會生效,此即『有效權限 (effective permission))
mask 的設定方式:
# 設定規範:『 m:[rwx] 』,例如針對剛剛的檔案規範為僅有 r 
[root@www ~]# setfacl -m m:r acl_test1
[root@www ~]# getfacl acl_test1
# file: acl_test1
# owner: root
# group: root
user::rwx
user:vbird1:r-x        #effective:r-- <==vbird1+mask均存在者,僅有 r 而已!
group::r--
group:mygroup1:r-x     #effective:r--
mask::r--
other::r--
 

檢視與設定檔案的隱藏屬性
------------- 13個隱藏屬性資訊未啟動
Lsattr
檢視隱藏屬性lsattr 檔案
Chattr
啟用對應的隱藏屬性 chattr 參數 檔案



2010年5月12日 星期三

linux homework3

1.設計一個名為mycal的script,使其可以接收三個數字參數,第一、三個參數為數字,第二個參數為運算子(+-*/其中之一)
配合case命令,計算數字運算的結果,並將其結果顯示出來,如果參數個數不夠或太多,就不執行運算,而顯示一段訊息,
提示出正確的執行方式。如果中間的運算子是/,而第三個參數是0,則顯示除數不可為0
將各個運算功能分別寫成函數。

$ ./mycal 12 + 3
result = 15
$

$ ./mycal 12 - 3
result = 9
$


$ ./mycal 12 \* 3   # 注意:*為特殊符號,需加一倒斜線輸入
result = 36
$

$ ./mycal 12 / 3
result = 4
$


#!/bin/sh


zmr()
{
  # x=` expr $1 $2 $3 `
  x=$(($1$2$3))
  echo result=$x
}


if [ $# -eq 3 ]
then
 case "$2" in
"+")
zmr $1 $2 $3
;;
"-")
zmr $1 $2 $3
;;
"*")
# zmr $1 $2 $3
c=` expr $1 \* $3 ` ; echo "result =$c"    
;;
"/")
if [ $3 -eq 0 ]
then 
echo "無法計算:除數不可為0 "
else
zmr $1 $2 $3
fi
;;
 esac
else
    echo "第一、三個參數為數字,第二個參數為運算子(+-*/其中之一)"
fi


exit 0



2.設計一個名為manymaxmin的script,使其可以接收不固定的多個數字參數,顯示數字中最大的及最小的,如果都一樣大,則顯示都一樣大。

$ ./maxmin 12 18 9 32 24 13
max = 32
min = 9
$

$ ./maxmin 15 15 15 15 15 15
All Equal = 15
$



#!/bin/sh

aa=$1
qq=$1
for vv in $@
do
    # if [ $vv -gt $aa ]
    if ((vv>aa))
    then
 aa=$vv
    elif [ $vv -lt $qq ]
 then
qq=$vv        
     fi
done
if [ $aa -eq $qq ]
then
echo "All Equal = $aa"
else
echo "max=$aa"
echo "min=$qq"
fi
exit 0



3.設計一個名為createmyfiles的script,以迴圈配合touch指令,產生十個檔案,檔名分別為myprog1.c,myprog2.c,...,myprog10.c。


#!/bin/sh


for ((x=1;x<=10;x++))
do
   touch "myprog$x.c"
done


exit 0



4.設計一個名為lastfiles的script,顯示目前目錄中最近被修改的n個檔案檔名。

$ ./lastfiles 5
a1.txt
a3.txt
...共5個


#!/bin/sh


ls -t | head -5 | nl
# echo ".....共5個"


exit 0



5.設計一個名為mvfiles的script,可以將所有副檔名為.c檔案,
副檔名更名為.cpp,更名前後的副檔名均自命令列輸入。
並將更名的結果顯示出來。

$ ./mvfiles .c .cpp
renamed myprog1.c to myprog1.cpp
....
....
$

#!/bin/sh

for file in *$1
do
mv $file `basename $file $1`$2
echo "renamed $file to `basename $file $1`$2"
done

exit 0

linux homework2

1.設計一個名為addtwo的script,使其可以接收兩個數字參數,並將其相加後的結果顯示出來,如果參數個數不夠或太多,就不執行運算,而顯示一段訊息,提示出正確的執行方式必須給兩個參數。

$ ./addtwo 12 6
sum = 18
$

$ ./addtwo 12
Usage: ./addtwo number1 number2
$


#!/bin/sh
if [ -n "$3" ]
then
echo "Usage: ./addtwo number1 number2"
elif [ -z "$2" ]
then
echo "Usage: ./addtwo number1 number2"
else
echo "sum = `expr $1 + $2 `"
fi
exit 0



----
2.設計一個名為mycal的script,
使其可以接收三個數字參數,
第一、三個參數為數字,
第二個參數為運算子(+-*/其中之一)
以多層的if計算其結果,並將其結果顯示出來,
如果參數個數不夠或太多,就不執行運算,
而顯示一段訊息,
提示出正確的執行方式。
如果中間的運算子是/,而第三個參數是0,則顯示除數不可為0

$ ./mycal 12 + 3
result = 15
$

$ ./mycal 12 - 3
result = 9
$

$ ./mycal 12 \* 3   # 注意:*為特殊符號,需加一倒斜線輸入
result = 36
$

$ ./mycal 12 / 3
result = 4
$

$ ./mycal 12 / 0
無法計算:除數不可為0
$


#!/bin/sh


if [ $# -eq 3 ]
then
 case "$2" in
"+")
a=` expr $1 + $3 ` ; echo "result = $a"
;;
"-")
b=` expr $1 - $3 ` ; echo "result = $b"
;;
"*")
c=` expr $1 \* $3 ` ; echo "result =$c"  
;;
"/")
if [ $3 -eq 0 ]
then 
echo "無法計算:除數不可為0 "
else
d=` expr $1 / $3 ` ; echo "result = $d"
fi
;;
 esac
else
    echo "第一、三個參數為數字,第二個參數為運算子(+-*/其中之一)"
fi


exit 0



----
3.設計一個名為getmax的script,使其可以接收兩個數字參數,將較大的數顯示出來,如果都一樣大,則顯示都一樣大。

$ ./maxmin 18 15
max = 18
$

$ ./maxmin 15 15
Equals
$

#!/bin/sh

x=$1
y=$2


if [ $x -gt $y ]
then 
echo " max = $x "
else
if [ $x -lt $y ]
then
echo " max = $y "
else
echo "Equals"
fi
fi


exit 0


----
4.設計一個名為checkfile的script,使其可以接收一個檔案名稱作為參數,
若此名稱不是目前工作目錄的檔案或目錄,則顯示此名稱不存在,
如果是檔案,則顯示其檔案內容,如果是一目錄則顯示此目錄內的清單。

$ ./checkfile 名稱


#!/bin/sh


df=$1


if [ -e "$df" ]
then
if [ -f "$df" ]
then
cat $df
else
if [ -d "$df" ]
then
ls -l $df
else
echo "名稱不存在"
fi
fi
else
echo "名稱不存在"
fi


exit 0



----
5.設計一個名為newerfile的script,使其可以接收兩個檔案名稱作為參數,並將日期較新的檔案名稱顯示出來。

$ ./newerfile file1.txt file2.txt
file2.txt 較新


#!/bin/sh


if [ $1 -nt $2 ]
then
echo "$1 較新 "
else
echo "$2 較新"
fi


exit 0


----
6.設計一個名為avglen的script,
使其可以接收一個檔案名稱(文字檔)作為參數,
計算此檔平均每一列有多少bytes。
提示:使用wc -l < 檔名; 用man查一下wc的用法

$ ./avglen yang.txt
平均每列: 348 bytes


#1/bin/sh


avg=`expr $(wc -c < $1 ) / $(wc -l < $1)`
echo "平均每列: $avg bytes"




exit 0



----
7.設計一個名為createtodayfile的script,以touch指令產生一個檔案,檔名中含有今天的日期,例如myfile20090706.txt。
  date +%Y...., 其餘date的日期格式, 請以man指令查詢


#!/bin/sh


echo -n "輸入檔案名稱:"
read fname


touch ${fname}$(date +%Y%m%d)\.txt


exit 0



----
8.設計一個名為addfiles的script,
可自命令列讀取參數產生檔案allfile,
如下,每加入一個檔案,隔2秒,如果重覆執行,則覆蓋原檔案。

原始檔案:
$ cat filea.txt
aaaaa
$ cat fileb.txt
bbbbb
$ cat filec.txt
ccccc

執行程式:
$ ./addfiles allfile.txt filea.txt fileb.txt filec.txt

結果:
$ cat allfile.txt
--2009-09-08 16:25:33
aaaaa
--2009-09-08 16:25:35
bbbbb
--2009-09-08 16:25:37
ccccc


#!/bin/sh


af=$1
rm -f $af
touch $af
shift
for y in $@
do
date +--%F\ %T >> $af
cat $y >> $af
sleep 2
done
cat $af
exit 0

linux homework1

1.設計一個名為showme的script,藉由環境變數及一些Linux指令,使其可以顯示資訊如下:

$ showme
我是  <- login name
我的家在 <- home directory
我的家有下列這些東西:
<- ls home directory

我的殼是 <- shell name
這台電腦是 <- host name
我目前的工作目錄是 <- present woring directory
目前的工作目錄有下列這些東西:"
<- ls present woring directory
#!/bin/sh

echo 我是"$LOGNAME"
echo 我的家在"$HOME"
echo 我的家有下列這些東西
echo "$(ls $HOME)"
echo 我的殼是"$SHELL"
echo 這台電腦是"$HOSTNAME"
echo 我目前的工作目錄是`pwd`
echo 目前的工作目錄有下列這些東西
echo "$(ls)"
exit 0


----
2.設計一個名為verbvar的script,利用read輸入一個簡單的英文動詞,在其前加入一個to印出原形,字尾加ing印出作為進行式
,字尾加ed印出作為過去式。

$ ./verbvar
請輸一個動詞: work
原  形: to work
進行式: working
過去式: worked
#!/bin/sh
echo -n 請輸一個動詞:
read word
echo 原形:to $word
echo 進行式: ${word}ing
echo  ${word}ed
exit 0