此種問題只在 Ubuntu 下才會(huì)出現(xiàn)!安裝 debian 系統(tǒng)根本不存在此類問題,因?yàn)橹挥?span id="wmqeeuq" class="Apple-converted-space">
Ubuntu 把默認(rèn)的 bash 替換成了 dash.在學(xué)習(xí) Shell 腳本的時(shí)候,有兩個(gè)例子在運(yùn)行時(shí)出現(xiàn)異常。比如,我在 test-dash.sh腳本輸入如下內(nèi)容:?
echo -e "Trekshot. \a \n"?
declare -i number=7?
echo $number?
在 Ubuntu 系統(tǒng)下使用 sh test-bash.sh 運(yùn)行將出現(xiàn)如下提示信息:?
-e Trekshot.?
test-dash.sh: 2: declare: not found:?
有兩個(gè)問題:?
a. echo 的參數(shù) '-e' 怎么也打印出來了??
b. 一個(gè)簡單的整數(shù)聲明語句為何提示 "declare: not found"??
1.出現(xiàn)此問題的原因并非代碼本身有誤,而是 Ubuntu 系統(tǒng)的問題。我們在編寫腳本時(shí),第一行經(jīng)常要寫這么一行內(nèi)容:#!/bin/bash. 這是對該腳本所使用的 shell 進(jìn)行聲明,因?yàn)?span id="wmqeeuq" class="Apple-converted-space">
pg_dump -U postgres -d mydatabase > dump.sql
從sql文件導(dǎo)入數(shù)據(jù):
psql -d newdatabase -U postgres -f dump.sql
執(zhí)行sql文件:
在相應(yīng)的數(shù)據(jù)庫中 \i sql文件 (這個(gè)如果是在windows下,要將\改為/)
在shell中 psql -s 數(shù)據(jù)庫名 -f sql文件
下面這個(gè)是基本sql的
進(jìn)入vi的命令
vi filename :打開或新建文件,并將光標(biāo)置于第一行首
vi +n filename :打開文件,并將光標(biāo)置于第n行首
vi + filename :打開文件,并將光標(biāo)置于最后一行首
vi +/pattern filename:打開文件,并將光標(biāo)置于第一個(gè)與pattern匹配的串處
vi -r filename :在上次正用vi編輯時(shí)發(fā)生系統(tǒng)崩潰,恢復(fù)filename
vi filename....filename :打開多個(gè)文件,依次進(jìn)行編輯
?
移動(dòng)光標(biāo)類命令
h :光標(biāo)左移一個(gè)字符
l :光標(biāo)右移一個(gè)字符
space:光標(biāo)右移一個(gè)字符
Backspace:光標(biāo)左移一個(gè)字符
k或Ctrl+p:光標(biāo)上移一行
j或Ctrl+n :光標(biāo)下移一行
Enter :光標(biāo)下移一行
w或W :光標(biāo)右移一個(gè)字至字首
b或B :光標(biāo)左移一個(gè)字至字首
e或E :光標(biāo)右移一個(gè)字至字尾
) :光標(biāo)移至句尾
( :光標(biāo)移至句首
}:光標(biāo)移至段落開頭
{:光標(biāo)移至段落結(jié)尾
nG:光標(biāo)移至第n行首
n+:光標(biāo)下移n行
n-:光標(biāo)上移n行
n$:光標(biāo)移至第n行尾
H :光標(biāo)移至屏幕頂行
M :光標(biāo)移至屏幕中間行
L :光標(biāo)移至屏幕最后行
0:(注意是數(shù)字零)光標(biāo)移至當(dāng)前行首
$:光標(biāo)移至當(dāng)前行尾
?
屏幕翻滾類命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:將第n行滾至屏幕頂部,不指定n時(shí)將當(dāng)前行滾至屏幕頂部。
?
插入文本類命令
i :在光標(biāo)前
I :在當(dāng)前行首
a:光標(biāo)后
A:在當(dāng)前行尾
o:在當(dāng)前行之下新開一行
O:在當(dāng)前行之上新開一行
r:替換當(dāng)前字符
R:替換當(dāng)前字符及其后的字符,直至按ESC鍵
s:從當(dāng)前光標(biāo)位置處開始,以輸入的文本替代指定數(shù)目的字符
S:刪除指定數(shù)目的行,并以所輸入文本代替之
ncw或nCW:修改指定數(shù)目的字
nCC:修改指定數(shù)目的行
?
刪除命令
ndw或ndW:刪除光標(biāo)處開始及其后的n-1個(gè)字
do:刪至行首
d$:刪至行尾
ndd:刪除當(dāng)前行及其后n-1行
x或X:刪除一個(gè)字符,x刪除光標(biāo)后的,而X刪除光標(biāo)前的
Ctrl+u:刪除輸入方式下所輸入的文本
?
搜索及替換命令
/pattern:從光標(biāo)開始處向文件尾搜索pattern
?pattern:從光標(biāo)開始處向文件首搜索pattern
n:在同一方向重復(fù)上一次搜索命令
N:在反方向上重復(fù)上一次搜索命令
:s/p1/p2/g:將當(dāng)前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:將第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:將文件中所有p1均用p2替換
?
選項(xiàng)設(shè)置
all:列出所有選項(xiàng)設(shè)置情況
term:設(shè)置終端類型
ignorance:在搜索中忽略大小寫
list:顯示制表位(Ctrl+I)和行尾標(biāo)志($)
number:顯示行號(hào)
report:顯示由面向行的命令修改過的數(shù)目
terse:顯示簡短的警告信息
warn:在轉(zhuǎn)到別的文件時(shí)若沒保存當(dāng)前文件則顯示NO write信息
nomagic:允許在搜索模式中,使用前面不帶“\”的特殊字符
nowrapscan:禁止vi在搜索到達(dá)文件兩端時(shí),又從另一端開始
mesg:允許vi顯示其他用戶用write寫到自己終端上的信息
?
最后行方式命令
:n1,n2 co n3:將n1行到n2行之間的內(nèi)容拷貝到第n3行下
:n1,n2 m n3:將n1行到n2行之間的內(nèi)容移至到第n3行下
:n1,n2 d :將n1行到n2行之間的內(nèi)容刪除
:w :保存當(dāng)前文件
:e filename:打開文件filename進(jìn)行編輯
:x:保存當(dāng)前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:執(zhí)行shell命令command
:n1,n2 w!command:將文件中n1行至n2行的內(nèi)容作為command的輸入并執(zhí)行之,若不指定n1,n2,則表示將整個(gè)文件內(nèi)容作為command的輸入
:r!command:將命令command的輸出結(jié)果放到當(dāng)前行
?
寄存器操作
"?nyy:將當(dāng)前行及其下n行的內(nèi)容保存到寄存器?中,其中?為一個(gè)字母,n為一個(gè)數(shù)字
"?nyw:將當(dāng)前行及其下n個(gè)字保存到寄存器?中,其中?為一個(gè)字母,n為一個(gè)數(shù)字
"?nyl:將當(dāng)前行及其下n個(gè)字符保存到寄存器?中,其中?為一個(gè)字母,n為一個(gè)數(shù)字
"?p:取出寄存器?中的內(nèi)容并將其放到光標(biāo)位置處。這里?可以是一個(gè)字母,也可以是一個(gè)數(shù)字
ndd:將當(dāng)前行及其下共n行文本刪除,并將所刪內(nèi)容放到1號(hào)刪除寄存器中。
ls 列出當(dāng)前目錄文件(不包括隱含文件)
ls -a 列出當(dāng)前目錄文件(包括隱含文件)
ls -l 列出當(dāng)前目錄下文件的詳細(xì)信息
cd .. 回當(dāng)前目錄的上一級(jí)目錄
cd - 回上一次所在的目錄
cd ~ 或 cd 回當(dāng)前用戶的宿主目錄
mkdir 目錄名 創(chuàng)建一個(gè)目錄
rmdir 空目錄名 刪除一個(gè)空目錄
rm 文件名 文件名 刪除一個(gè)文件或多個(gè)文件
rm -rf 非空目錄名 刪除一個(gè)非空目錄下的一切
mv 路經(jīng)/文件 /經(jīng)/文件 移動(dòng)相對路經(jīng)下的文件到絕對路經(jīng)下
mv 文件名 新名稱 在當(dāng)前目錄下改名
find 路經(jīng) -name “字符串” 查找路經(jīng)所在范圍內(nèi)滿足字符串匹配的文件和目錄
fdisk -l 查看系統(tǒng)分區(qū)信息
fdisk /dev/sdb 為一塊新的SCSI硬盤進(jìn)行分區(qū)
chown root /home 把/home的屬主改成root用戶
chgrp root /home 把/home的屬組改成root組
chmod XXX filename
×××(所有者\(yùn)組用戶\其他用戶)
×=4 讀的權(quán)限 ×=2 寫的權(quán)限 ×=1 執(zhí)行的權(quán)限
sudo chmod 600 ××× (只有所有者有讀和寫的權(quán)限)
sudo chmod 644 ××× (所有者有讀和寫的權(quán)限,組用戶只有讀的權(quán)限)
sudo chmod 700 ××× (只有所有者有讀和寫以及執(zhí)行的權(quán)限)
sudo chmod 666 ××× (每個(gè)人都有讀和寫的權(quán)限)
sudo chmod 777 ××× (每個(gè)人都有讀和寫以及執(zhí)行的權(quán)限)
文件權(quán)限除了r、w、x外還有s、t、i、a權(quán)限:
s:文件屬主和組設(shè)置SUID和GUID,文件在被設(shè)置了s權(quán)限后將以root身份執(zhí)行。在設(shè)置s權(quán)限時(shí)文件屬主、屬組必須先設(shè)置相應(yīng)的x權(quán)限,否 則s權(quán)限并不能正真生效(c h m o d命令不進(jìn)行必要的完整性檢查,即使不設(shè)置x權(quán)限就設(shè)置s權(quán)限,chmod也不會(huì)報(bào)錯(cuò),當(dāng)我們ls -l時(shí)看到rwS,大寫S說明s權(quán)限未生效)。Linux修改密碼的passwd便是個(gè)設(shè)置了SUID的程序,普通用戶無讀寫/etc/shadow文件 的權(quán)限確可以修改自己的密碼。
ls -al /usr/bin/passwd
-rwsr-xr-x 1 root root 32988 2008-12-08 17:17 /usr/bin/passwd
我們可以通過字符模式設(shè)置s權(quán)限:chmod a+s filename,也可以使用絕對模式進(jìn)行設(shè)置:
設(shè)置s u i d:將相應(yīng)的權(quán)限位之前的那一位設(shè)置為4;
設(shè)置g u i d:將相應(yīng)的權(quán)限位之前的那一位設(shè)置為2;
兩者都置位:將相應(yīng)的權(quán)限位之前的那一位設(shè)置為4+2=6。
如:chmod 4764 filename?? //設(shè)置SUID
t :設(shè)置粘著位,一個(gè)文件可讀寫的用戶并一定相讓他有刪除此文件的權(quán)限,如果文件設(shè)置了t權(quán)限則只用屬主和root有刪除文件的權(quán)限,通過chmod +t filename 來設(shè)置t權(quán)限。
i:不可修改權(quán)限??例:chattr u+i filename 則filename文件就不可修改,無論任何人,如果需要修改需要先刪除i權(quán)限,用chattr -i filename就可以了。查看文件是否設(shè)置了i權(quán)限用lsattr filename。
a:只追加權(quán)限, 對于日志系統(tǒng)很好用,這個(gè)權(quán)限讓目標(biāo)文件只能追加,不能刪除,而且不能通過編輯器追加。可以使用chattr +a設(shè)置追加權(quán)限。
Useradd 創(chuàng)建一個(gè)新的用戶
Groupadd 組名 創(chuàng)建一個(gè)新的組
Passwd 用戶名 為用戶創(chuàng)建密碼
Passwd -d用戶名 刪除用戶密碼也能登陸
Passwd -S用戶名 查詢賬號(hào)密碼
Usermod -l 新用戶名 老用戶名 為用戶改名
Userdel–r 用戶名 刪除用戶一切
tar -c 創(chuàng)建包 –x 釋放包 -v 顯示命令過程 –z 代表壓縮包
tar –cvf benet.tar /home/benet 把/home/benet目錄打包
tar –zcvf benet.tar.gz /mnt 把目錄打包并壓縮
tar –zxvf benet.tar.gz 壓縮包的文件解壓恢復(fù)
tar –jxvf benet.tar.bz2 解壓縮
make 編譯
make install 安裝編譯好的源碼包
reboot Init 6 重啟LINUX系統(tǒng)
Halt Init 0 Shutdown –h now 關(guān)閉LINUX系統(tǒng)
uname -a 查看內(nèi)核版本
cat /etc/issue 查看ubuntu版本
lsusb 查看usb設(shè)備
sudo ethtool eth0 查看網(wǎng)卡狀態(tài)
cat /proc/cpuinfo 查看cpu信息
lshw 查看當(dāng)前硬件信息
sudo fdisk -l 查看磁盤信息
df -h 查看硬盤剩余空間
free -m 查看當(dāng)前的內(nèi)存使用情況
ps -A 查看當(dāng)前有哪些進(jìn)程
kill 進(jìn)程號(hào)(就是ps -A中的第一列的數(shù)字)或者 killall 進(jìn)程名( 殺死一個(gè)進(jìn)程)
kill -9 進(jìn)程號(hào) 強(qiáng)制殺死一個(gè)進(jìn)程
常用apt命令:
apt-cache search package 搜索包
apt-cache show package 獲取包的相關(guān)信息,如說明、大小、版本等
sudo apt-get install package 安裝包
sudo apt-get install package - - reinstall 重新安裝包
sudo apt-get -f install 修復(fù)安裝”-f = –fix-missing”
sudo apt-get remove package 刪除包
sudo apt-get remove package - - purge 刪除包,包括刪除配置文件等
sudo apt-get update 更新源
sudo apt-get upgrade 更新已安裝的包
sudo apt-get dist-upgrade 升級(jí)系統(tǒng)
sudo apt-get dselect-upgrade 使用 dselect 升級(jí)
apt-cache depends package 了解使用依賴
apt-cache rdepends package 是查看該包被哪些包依賴
sudo apt-get build-dep package 安裝相關(guān)的編譯環(huán)境
apt-get source package 下載該包的源代碼
sudo apt-get clean && sudo apt-get autoclean 清理無用的包
sudo apt-get check 檢查是否有損壞的依賴
清理所有軟件緩存(即緩存在/var/cache/apt/archives目錄里的deb包 )
sudo apt-get clean