git :項目版本控制工具
項目克隆:git clone項目提交:git add(本地倉庫提交) git commit -m “bak msg”(-m 備注信息)同步到服務器:git push origin master(提交到主分支)**(提交時需要用戶名和密碼)**
svn–集中式
git —分布式 自己都有一個git倉庫,
vim 編輯器
vim共有12種模式,最常用的是三種:
普通模式:完成編輯一個文件最常見的操作光標移動復制,粘貼,剪切,撤銷,恢復撤銷
插入模式:插入數據
底行模式:保存/退出 vim設置
vim filename -->普通模式—>插入模式—>返回普通模式–>進入底行模式–>保存退出
模式切換:
esc回普通模式普通--->插入 i : 從光標所在位置開始插入I :光標移動到行首,開始插入a :光標移動最后一個字符,開始插入A : 光標移動到行尾,開始插入o : 向光標所在行下方添加新行,開始插入O : 向光標所在行上方添加新行,開始插入插入-->普通 esc普通-->底行 :底行—>普通 esc
普通模式下的操作
光標移動:h j k l 上下左右w/b 按單詞右左移動ctrl+f/b 向下/上翻頁gg/G 文檔首行/尾行
復制: yy 復制光標 所在行nyy 從光標所在行開始向下復制n行
粘貼:P(小寫) 向光標所在行下方粘貼新行P(大寫) 向光標所在行上方粘貼新行
剪切:X 刪除光標所在字符dw 刪除光標所在單詞dd 刪除光標所在行ndd 從光標所在行開始向下刪除n行
撤銷:u
恢復撤銷ctrl+r
底行模式的操作:
:q 退出
:w 保存
:wq 保存并退出
:q! 退出不保存(強制退出)
gcc編譯器
將高級語言程序(c語言)編譯成為機器可識別的指令代碼
編譯過程:
預處理:去掉注釋,展開所有代碼編譯:語義語法糾錯,將代碼解釋成為匯編代碼匯編:將匯編代碼解釋成機器指令代碼鏈接:鏈接代碼庫以及所有的目標文件,生成可執行程序。
去掉了一個分號。
預處理
報錯(之前少寫的分號問題)
現在就沒有錯了
庫文件:
大佬們實現一些常用的功能接口,為了防止每次編譯耗費時間,因此將這些接口代碼進行編譯匯編,并且將匯編完成的 代碼存儲到一個文件中,這個文件就叫庫文件
這時候如果大家想用庫函數,這時候就需要包含頭文件,因為頭文件中聲明這個函數的存在,這時候編譯器再頭文件,文件中 檢測到這個聲明,就知道有這個函數的時間,就不會報錯。
最終鏈接生成可執行程序的時候,因為要具體讓cpu處理命令,因此就必須將這些接口的具體實現拿過來
Gcc的鏈接方式:
靜態鏈接:靜態鏈接庫,連接時,將庫中代碼寫入到可執行程序中;
優點:運行時不依賴庫的存在,
但是占用資源較多,并且去過大量的程序靜態鏈接,
會再內存中造成代碼冗余。動態鏈接:鏈接動態庫,鏈接時,只記錄接口的位置符號信息,并不拷貝代碼;
優點:占用資源少,在內存中大量程序,可以共享使用(共享庫),
缺點:運行時原喲依賴庫的存在(運行時庫)gcc編譯器的默認的鏈接方式:動態鏈接
gdb調試器
調試一個程序的前提是什么?
生成debug版本程序,向程序中添加調試符號信息Linux下gcc默認生成的程序是release版本的程序,需要加上-g選項,生成debug版本程序gcc -g main.c -0 main
生成debug版本程序
賦予參數
Gdb加載程序
gdb ./main
gdb ->file./main
獲取運行參數,并運行程序r -a –l -s -t
最常見的調試操作有哪些?
打印內容:P(print)打印變量內容
P var_name
單步調試:start 開始逐步調試
l(list)查看調試行附近代碼L file;lineN(next)下一步;不進入函數,直接將函數運行S(step)下一步;跟蹤進入函 數
Unti 直接運行到指定行
Until file:line打斷點:
b(break):打斷點b file:line
b function_name
i(info):查看調試信息
I b 查看斷點信息
d(delete)刪除斷點d b_id(斷點編號)
watch 變量監控watch var_name
c(continue)繼續開始運行查看調用棧信息:bt 快速定位程序崩潰位置
因為main函數起始位置是第13行,所以到第13行停一下
查看附近代碼
n下一步,
until 直接運行到指定行
s進入到函數里面
bt
權限:
用戶對操作系統進行操作的權限:管理員root,普通
用戶對文件的操作權限:文件操作對用戶的分類:所有者u,所屬組g,其他o用戶對文件的造作分類:可讀r,可寫w,可執行x
權限表示:rwx rwx r-x 111 111 101 775
權限命令:umask 給定權限&(~umask) chmod chown chgrp