完整的ln命令參考:http://www.runoob.com/linux/linux-comm-ln.html
ln :創建連接文件
- 默認創建的是硬連接,好比復制 ,但是兩個文件會同步
命令:ln ./java/android/aa.txt aaa
- s :創建的是軟連接變為指向(類似於windows的快捷方式)
軟鏈接: 1.軟鏈接,以路徑的形式存在。類似於Windows操作系統中的快捷方式 2.軟鏈接可以 跨文件系統 ,硬鏈接不可以 3.軟鏈接可以對一個不存在的文件名進行鏈接 4.軟鏈接可以對目錄進行鏈接 硬鏈接: 1.硬鏈接,以文件副本的形式存在。但不占用實際空間。 2.不允許給目錄創建硬鏈接 3.硬鏈接只有在同一個文件系統中才能創建
例如:
可運行文件: qq.sh
num=3 #!/bin/bash case $num in 1) echo "num=1";; 2) echo "num=2";; 3) echo "num=3";; 4) echo "num=4";; *) echo "defaul";; esac
賦予可運行權限:
chmod +x qq.sh
注意:運行sh文件的方式
第一種: ./qq.sh 需要加./
第二種 sh qq.sh 不需要加./
1. 創建一個目錄ww,並在ww目錄創建一個可運行文件qq.sh的硬連接並運行:
[rwwwt@iz2ze46xi6pjjj ~]# mkdir ww [rwwwt@iz2ze46xi6pjjj ~]# cd ww [rwwwt@iz2ze46xi6pjjj ww]# ls [rwwwt@iz2ze46xi6pjjj ww]# ln ../qq.sh qq [rwwwt@iz2ze46xi6pjjj ww]# ls qq [rwwwt@iz2ze46xi6pjjj69ailg9lz ww]# ./qq num=3
2.創建一個軟連接並運行
創建軟連接 ln -s ../qq.sh qq.sh.link
運行軟連接 ./qq.sh.link
[rwwwt@iz2ze46xi6pjjj ~]# mkdir ww [rwwwt@iz2ze46xi6pjjj ~]# cd ww [rwwwt@iz2ze46xi6pjjj ww]# ls [rwwwt@iz2ze46xi6pjjj ww]# ln -s ../qq.sh qq.sh.link [rwwwt@iz2ze46xi6pjjj ww]# ls -l total 0 lrwxrwxrwx 1 root root 8 Oct 28 10:41 qq.sh.link -> ../qq.sh [rwwwt@iz2ze46xi6pjjj ww]# ./qq.sh.link num=3 [rwwwt@iz2ze46xi6pjjj ww]#
3. 將上面qq.sh進行改造后可提取輸入參數:
bash shell可根據參數位置獲取參數。通過 $1 到 $9 獲取第1到第9個的命令行參數。$0為shell名。如果參數超過9個,那么就只能通過${}來獲取了, 例如獲取第10個參數,那么可以寫為${10}。
參考:http://www.cnblogs.com/qlqwjy/p/7746009.html
num=$1 #!/bin/bash case $num in 1) echo "num=1";; 2) echo "num=2";; 3) echo "num=3";; 4) echo "num=4";; *) echo "defaul";; esac
運行原來的qq.sh
[rwwwt@iz2ze46xi6pjjj ww]# ./qq.sh 4 num=4
運行軟連接
[rwwwt@iz2ze46xi6pjjj ww]# ./qq.sh.link 2 num=2
------linux通過ln與chkconfig設置開機啟動(第一個例子)-------------------------
第一步:我們在/etc/init.d或者/etc/rc.d/init.d下新建一個文件test(需要在root權限下操作)(/etc/init.d是/etc/rc.d/init.d的一個軟連接)
[rwwwt@iz2ze46xi6pjjj ww]# vim /etc/init.d/test
復制上面qq.sh內容:
#!/bin/bash
num=$1 case $num in 1) echo "num=1";; 2) echo "num=2";; 3) echo "num=3";; 4) echo "num=4";; *) echo "defaul";; esac
第二步:保存退出之后,給其增加可執行權限
[rwwwt@iz2ze46xi6pjjj ww]# chmod +x /etc/init.d/test
第三步:掛載(創建一個軟連接)
將 這個shell文件的link連到/etc/rc2.d/目錄下。linux的/etc/rcX.d/目錄中的數字代表開機啟動時不同的run level,也就是啟動的順序,Ubuntu9.10下有0-5六個level,不能隨便連到其他目錄下,可能在那個目錄中的程序啟動時Tomcat所需 要的一些庫尚未被加載,用ln命令將tomcat的鏈接鏈過去:sudo ln -s /etc/init.d/tomcat /etc/rc2.d/S16Tomcat。rcX.d目錄下的命名規則是很有講究的,更具不同需要可能是S開頭,也可能是K開頭,之后的數字代表他們的 啟動順序,詳細看各自目錄下的Readme文件。
[rwwwt@iz2ze46xi6pjjj ww]# ln -s /etc/init.d/test /etc/rc2.d/S17Test
第四步:設置腳本開機自啟動
把這個腳本設置成系統啟動時自動執行,系統關閉時自動停止,使用如下命令:
[rwwwt@iz2ze46xi6pjjj ww]# chkconfig --add test
第五步:驗證:chkconfig命令:
參考:http://www.cnblogs.com/qlqwjy/p/7746419.html
選項:
--level levels
指定一個運行級別適合的操作。范圍為0-7。
--add name
增加一個新的服務。
--del name
刪除一個服務
--list name
顯示服務的情況
查看全部服務:
[rwwwt@iz2ze46xi6pjjj ww]# chkconfig --list Note: This output shows SysV services only and does not include native systemd services. SysV configuration data might be overridden by nat systemd configuration. If you want to list systemd services use 'systemctl list-unit-files' To see services enabled on particular target use 'systemctl list-dependencies [target]'. aegis 0:off 1:off 2:on 3:on 4:on 5:on 6:off agentwatch 0:off 1:off 2:on 3:on 4:on 5:on 6:off cloudmonitor 0:off 1:off 2:on 3:on 4:on 5:on 6:off netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off test 0:off 1:off 2:off 3:on 4:on 5:on 6:off tomcat 0:off 1:off 2:off 3:on 4:on 5:on 6:off
啟動test服務
[rwwwt@iz2ze46xiz ~]# service test num=3 [rwwwt@iz2ze46xi6pjjj69ailg9lz ~]# service test start num=3
刪除test服務:
[rwwwt@iz2ze46xiz ~]# chkconfig --del test
刪除后再次查看發現不存在service服務
------linux通過ln與chkconfig設置開機啟動服務(第二個例子用)-------------------------
參考:http://www.cnblogs.com/qlqwjy/p/7746419.html
第一步:
創建shell腳本: test2
vim /etc/init.d/test2
編輯腳本內容如下:
#!/bin/sh #chkconfig: 2345 80 90 #description:test2 case "$1" in start) echo "start test2 service" ;; stop) echo "stop test2 service" ;; esac
第二步:
賦予運行權限:
chmod +x /etc/init.d/test2
測試腳本:
/etc/init.d/test2 start
start test2 service
也可以:(service自動尋找/etc/init.d目錄下)
service test2 start
start test2 service
解析:service是一個shell腳本,service test2 相當於 /etc/init.d/test2 start
第三步:(兩種方式:手動添加服務+chkconfig創建服務 原理都是創建軟連接)
1.chkconfig創建服務
chkconfig --add test2
腳本的前三行如下:(腳本前面三行格式固定)
#!/bin/sh
#chkconfig: 2345 80 90 #description:test2
第一行,告訴系統使用的shell,所有的shell腳本都是這樣。
第 二行,chkconfig后面有三個參數2345,80和90告訴chkconfig程序,需要在rc2.d~rc5.d目錄下,創建名字為 S80test2的文件連接,連接到/etc/rc.d/init.d目錄下的的test2腳本。第一個字符是S,系統在啟動的時候,運行腳 本test2,就會添加一個start參數,告訴腳本,現在是啟動模式。同時在rc0.d和rc6.d目錄下,創建名字為K90test2的 文件連接,第一個字符為K,系統在關閉系統的時候,會運行test2,添加一個stop,告訴腳本,現在是關閉模式。
注意上面的三行中,第二,第三行是必須的,否則在運行chkconfig --add test2時,會報錯。
查看 /etc/rc2.d目錄下結構:(S80test2)
S:代表啟動服務(運行腳本傳入start參數)
K:關閉服務(運行腳本傳入stop參數)
80; 運行級別,越小越優先運行,優先級相同的時候按創建時間啟動。
查看 /etc/rc3.d目錄下結構:(S80test2)
查看 /etc/rc0.d目錄下結構:(K90test2)
2.手動添加服務:
在rc0.d-rc6.d目錄下分別創建文件連接。
ln -s /etc/rc.d/init.d/test2 /etc/rc.d/rc2.d/S99test2 ln -s /etc/rc.d/init.d/test2 /etc/rc.d/rc3.d/S99test2 ln -s /etc/rc.d/init.d/test2 /etc/rc.d/rc5.d/S99test2 ln -s /etc/rc.d/init.d/test2 /etc/rc.d/rc0.d/K01test2 ln -s /etc/rc.d/init.d/test2 /etc/rc.d/rc6.d/K01test2
Tips:/etc/rc[0~6].d其實是/etc/rc.d/rc[0~6].d的軟連接,主要是為了保持和Unix的兼容性才做此策
/etc/init.d/其實是/etc/rc.d/init.d/的軟連接。
第四步:驗證
chkconfig --list
第五步:刪除服務
chkconfig --del test2
上述刪除服務的命令會刪除/etc/rc.d/rc[0-6].d下面的軟連接。
查看/etc/rc.d/rc3.d目錄:(test2的軟連接已刪除)
查看/etc/init.d目錄結構:(原來test2文件仍然存在)