Linux開發有關知識匯集
ps命令
bash
ksh
csh
sh
tcsh
ps
一個終端至少有一個shell,用來和用戶打交道
登陸shell,管理員指定登陸是什么shell,平常用就用什么shell
exec ksh切換shell,切換shell之后原來的shell就沒用了。可以通過ps來驗證
date
操作系統要管理文件
目錄
子目錄
文件
文件系統
樹
移動文件系統
/
/etc/hosts
linux嚴格區分大小寫;
pwd=print working directory打印出當前的工作目錄
ps=process status打印出進程的狀態
clear=ctrl+l
每個程序每運行一次有一個狀態
tty是終端編號,每個終端都有一個編號
pid進程的id;內核在管理對象的時候,一般采用一個整數來分配和識別
cmd是命令
time是利用的cpu的時間
cd=change direcotry改變當前工作目錄
絕對路徑
相對路徑
管理員在創建賬戶的時候會指定shell,和主目錄home directory
cd /etc/alsa/cards
/~.分別表示根目錄、主目錄、當前目錄
..表示上一級目錄
../..表示上一級的上一級
ls=list列出
telnet
passwd更改密碼
用戶名和密碼存在于/etc/passwd文件中
soft01:x:500:50::/home/soft01:/bin/bash
用戶名:密碼:
密碼實際上都放到了shadow文件中了
group
ps -l
ps -e
ps -f
ps -p pid
ls
ls /usr
ls /usr /mnt
case-sensitive
命令 【選項】....【參數】...
man
more
man date
date +%D
date +%F
date +%T
date 08011020
問題:
etc下的passwd、shadow、group等文件及文件格式解釋
id
id username
文件系統
從/開始的樹狀結構
絕對路徑:/打頭
相對路徑:當前目錄之下開始
當前目錄:cd .
cd ..
主目錄
~用戶名:本用戶的主目錄
username,passwd,uid,gid,,home,shell:/etc/passwd,x--->/etc/shadow
每個命令都對應一個可執行文件;shell會支持一些內部命令,沒有文件。
ls /bin 可執行文件
如bash ,csh,tcsh,ksh等;
clear命令,清屏幕;
sleep 5睡覺
ls -l 利用長格式顯示出相關信息
ls -F打標記(*表示可執行文件,@表示軟連接或者符號連接,)---快捷方式
ls -a顯示全部文件. .. 包含隱藏文件一起顯示.開頭的是隱藏文件,其中包含.和..
ls -A 除了.和..之外都顯示
ls -l
-打頭普通文件
d打頭目錄文件
l打頭鏈接文件
x結尾可執行文件
p打頭管道
ls -t -l與ls -l兩者的區別,兩者之間一個按字母一個是按時間來排序顯示
ls -R,列出當前目錄開始的目錄樹
ls -r
ls -F
mkfifo abc
ln -s /bin/date da
ls -l
echo hello>ghi.jk
軟鏈接:快捷方式;存放的是路徑 ln -s
硬鏈接:同一文件對應多個名字 ln
硬鏈接 跨設備不行
cp == copy
cp /bin/zsh ~/Desktop/
當硬鏈接數量為0的時候,則真正的刪除該文件;
硬鏈接一旦建立后,硬鏈接之間是相互平等的
rwx= read write execute
drwxrwxrwx
權限===》
自己|同組人|其他人
rm abc
rm bs da
如何更改權限
chmod ugo
u代表自己
g代表同組人
o代表其他人
chmod o-rx z刪除其他人的rx權限
chmod o+rx z增加其他人的rx權限
chmod o=rwx z設置其他組人的rwx權限
chmod o=- z 設置其他組人的rwx權限為空
chmod u-w,o+r,g+w z
chmod a+x z,給所有人增加x權限
chmod 0644 z;注意:在c和c++中,以0開頭的是一個8進制數
r----4 w----2 x---1 ----0權限數字化
權限可以用一個3位的8進制數來表示---》如700==》c語言編程中可以借鑒這種模式
文件的創建、刪除、修改、復制
創建目錄:
mkdir da db dc建立3個并排的目錄
mkdir dd/de XX
mkdir dd
mkdir dd/de
==>mkdir -p dd/de/dc創建多層的目錄
ls -R顯示所有的目錄文件
touch創建空文件
touch f1 f2 f3同時創建3個空文件
touch da/f4 db/f5在不同的目錄下創建不同的文件
touch db/f6 db/f7 db/f8
===>cd db
touch f6 f7 f8
cd ..
date命令
date > xyz重定向;將左邊命令產生的輸出寫到右邊的文件中去;會清空文件中的原有內容;
date >>xyz把左邊命令產生的輸出追加到右邊的文件中,不會清空原文件中的原有內容;
cat xyz用命令來查看xyz的內容或者用vi來查看xyz的內容
pwd > abc
cal顯示當月的日歷
cal 2012
cal 11 2010
echo 大家好
echo 大家好 >> f10
echo 大家好才是真的好 >> f10;cat f10=====>重要在編輯腳本時很有效
date;sleep 5;date===>在設置識別裸設備時,速度可能比較慢,最好是init過程之前等待識別30秒
/dev/tty表示的是終端鼠標\鍵盤\顯示器
date > /dev/tty===>編輯腳本時常用
date > /dev/null==>黑洞文件,永遠的空文件,空設備文件
如:ls -l > /dev/null
ls -l
mv f1 dc 將f1文件移動到dc下
mv f1 da dc將f1,da目錄移動到dc下
mv db dc/d2將db移動到dc下并修改為d2;只有移動一個目錄或文件的時候才能改名,如果移動多個是不能改名的
cp -r 包含目錄一起復制
cp -i interactive交互; 目錄覆蓋的時候無提示,有文件覆蓋的時候才提示
rm -r可以刪除文件和非空目錄;但是刪除目錄時比較危險
rm本身是不刪除目錄的
rmdir只能用來刪除空目錄
rm -ri
字符鏈接軟
ln -s:通過文件系統鏈接一個文件或者目錄
link1-->inode 3561(data blocks/file2)-->file2--->inode 1282(data blocks)
硬鏈接
ln
在同一個文件系統上去鏈接文件
多個文件被硬性的鏈接到相同的inode number,涉及硬盤上的相同數據
如file1,file===》inode1282 (data blocks)
dir1====>inode 4221(data blocks file1=inode1282;file2=inode 1282)
ls
rm dc/f1 dc/f2 dc/f3
rm dc/f*
rm dc/*
通配符號
ls -l dc/*2
ls -l -d dc/*2
rm -r a*b*c
命令本身并不能處理通配符,是通過shell來處理的
?只能匹配一個任意字符
[]匹配指定范圍內的一個字符,如[b-j] [135abj]
[4-12]====>[4-1,2]
cat
man
head /etc/passwd;head可以看前10行,或者head -5,顯示前5行
tail 默認看后10行,看后5行,tail -5
more分屏顯示
less可以上下左右的任意翻看文件內容,也是分屏顯示
vi
wc===word count統計數量;行數,單詞數,字符數
wc -l只要行數,-w只要單詞數 -c只要字符數
grep 字符串 文件
id
grep -i 忽略大小寫i=ignore case
grep -v查找不包含指定字符串的行
grep -v 01 /etc/passwd >tempxxx
more tempxxx
rm tempxxx
grep -v 01 /etc/passwd | more 把左邊命令的輸出當作一個文件直接交給右邊的命令來處理。這就是管道
grep nologin /etc/passwd | wc -l
gedit全屏幕的編輯器
kate
vi==vim
有兩種工作狀態;1、初始的命令狀態;2、插入狀態
命令狀態(初始)----i,a,o--->插入狀態---<ESC>--->命令狀態
----->底行模式---->:/?
vi
k上
h左 l右
j下
^行首 $行尾
G文件尾 1G文件首
第N行 NG
屏幕頭H,屏幕中M,屏幕底L
下翻:ctrl+f 上翻 ctrl+b
w下一個單詞開頭
b上一個單詞開頭
e下一個單詞末尾
i在光標當前位置插入
a在光標所在位置后插入
o在光標所在行下插入一空行
O在光標所在行上插入一空行
:set nu顯示行號代碼
: no nu 不顯示行號
I跑行首添加
A跑行尾追加
x刪除一個字符3x
dw刪除當前詞
3dw刪除3個詞
dd刪除當前行
5dd刪除5行
:5,10d刪除5-10行
刪除之后如果想恢復的話,使用u,undo
p粘貼在光標位置之后
P粘貼在光標位置之前
r替換一個字符
cw替換一個單詞
cc替換一行
C替換從光標至行尾
yw拷貝詞
yy 拷貝行
dw剪切詞
dd剪切行
p當前行下粘帖
:1,2co3 拷貝行1,行2在行3之后
:4,5m6 移動行4,5在行6之后
復制某一個字符,yl
ps -l
S=status
S睡眠狀態 T掛起狀態 R運行 Z 僵尸狀態
掛起狀態不會分時間片,只是一個后臺任務擺著;
sleep 10
sleep 10 &可以后臺執行
ps只顯示本終端的進程+e可以顯示所有的進程
ps -e -l | grep Z
ps -f 顯示完整的命令
ps -p 3846根據進程的PID來跟蹤進程
init進程,其PID總是為1;父進程為0(LINUX中是不存在的;UNIX中是存在的叫總調度)
jobs專門用來查看后臺任務
調出后臺任務到前臺fg,不帶參數表示把帶+號的調用到前面來執行
也可以帶fg+
把stopped的任務用bg在后臺執行起來
終止一個任務ctrl+c也可以用kill
kill發送的是一個sigterm信號
如果是后臺任務,kill也可以刪除
jobs
kill %1為了區分進程和任務編號,進程直接寫數字,任務編號需要加%號
熟悉vi
grep
> | ; * ? [] / ~ . ..
find可以搜索文件或目錄
find 目錄 條件 【命令,如何處理;默認print】----在指定的目錄中進行搜索;
find . -name f1 在當前目錄下搜索
find / -name f1(name后面只能包含一個文件名)
find . -name f*這句是錯誤的。
eacho find . -name f*
find . -name "f*"
eacho find . -name "f*"
find . -name "*.cpp" -exec cp{} d6 \;
這命令的意思是
find . -name "*.cpp" 找到所有的cpp文件
\;表示轉義就表示符號本身; ;號是命令的結束標志
-exec表示后面有個執行命令
{}表示前面的內容
find d6 -name "*.cpp" -exec rm {} ";"
who當前誰在線
who am i
users只關心用戶的名字的情況下 users
who | grep 192.168.24. 顯示出在24網段登錄的用戶
w可以知道誰在做什么?
who where when what
history顯示出用過的所有的命令的列表
!編號即可以執行相關命令
history其命令存儲在.bash_history中
du顯示磁盤空間的使用情況
du -k
du -h
du -s只有綜合
df查看剩余多少空間
ping
ifconfig
ifconfig -a
ftp
!ls -l
!ls
!lcd
!表示本地的
put
mput
get
mget
prompt把交互方式打開或者關閉;
asc表示傳遞模式設置成字符模式;尤其是在跨平臺傳輸文本文件時
bin按照二進制模式來傳輸
locale設置編碼語言
write聊天
mesg n不想聊天
env環境命令(環境變量)
PS1是來指定命令提示符的
path環境變量---為shell指定可查找命令的目錄
命令不是在當前目錄下找,而是在path指定的目錄下去找
假設在path路徑下有多個路徑指向了同名的命令的話,可以用which來查看
如果像查詢哪里有某個命令,可以通過whereis cal
PATH=$PATH:.
初始化文件:系統級和用戶級
系統級/etc---可以針對所有用戶
用戶級----只針對自己,不同的shell用不同的初始化文件,看man bash或man csh
~/.bashrc
vi ~/.bashrc
source ~/.bashrc在當前終端必須先source下才能生效,其他終端自動生效
alias起一個別名如
alias c=clear
alias pl=‘ps -l’
vi my.sh
#!/bin/bash
echo 大家好
sleep 5
echo I love u,baby。
sleep 5
date
source my.sh
chmod u+x my.sh