Learning Linux
Linux文件名
/bin
普通用戶有權(quán)限使用的二進(jìn)制可執(zhí)行命令
cat摩疑、cp、chmod df夕春、dmesg未荒、gzip专挪、kill及志、ls片排、mkdir、more速侈、mount率寡、rm、su倚搬、tar等冶共。
/sbin
主要放置一些系統(tǒng)管理的必備程式例如:cfdisk、dhcpcd每界、dump捅僵、e2f/sck、fdisk眨层、halt庙楚、ifconfig、ifup趴樱、 ifdown馒闷、init、insmod叁征、lilo纳账、lsmod、mke2fs捺疼、modprobe疏虫、quotacheck、reboot啤呼、rmmod议薪、runlevel、shutdown等媳友。
/boot
存放引導(dǎo)加載器(bootstrap loader)使用的文件
/etc
etc.是法語詞et cetra 的縮寫斯议,相當(dāng)于英語的 and so on.
存放系統(tǒng)管理和配置文件,其中包括了用戶信息文件/etc/passwd
醇锚,系統(tǒng)初始化文件/etc/rc
/opt
用戶級的程序目錄哼御,可以理解為D:/Software
,opt有可選的意思焊唬,這里可以用于放置第三方大型軟件(或游戲)恋昼,當(dāng)你不需要時,直接rm -rf
掉即可赶促。在硬盤容量不夠時液肌,也可將/opt單獨掛載到其他磁盤上使用。
/usr
系統(tǒng)級的目錄鸥滨,可以理解為C:/Windows/
嗦哆,/usr/lib
理解為C:/Windows/System32
谤祖。
/usr/local
用戶級的程序目錄,可以理解為C:/Progrem Files/
老速。用戶自己編譯的軟件默認(rèn)會安裝到這個目錄下粥喜。
/usr/local/bin
本地增加的命令
/usr/local/lib
本地增加的庫根文件系統(tǒng)
/usr/bin
主要放置一些應(yīng)用軟體工具的必備執(zhí)行檔例如c++、g++橘券、gcc额湘、chdrv、diff旁舰、dig锋华、du、eject箭窜、elm供置、free、gnome绽快、 gzip芥丧、htpasswd、kfm坊罢、ktop续担、last、less活孩、locale物遇、m4、make憾儒、man询兴、mcopy、ncftp起趾、 newaliases诗舰、nslookup passwd、quota训裆、smb蝶溶、wget等欧募。
/usr/sbin
超級用戶使用的可執(zhí)行文件,放置一些網(wǎng)路管理的必備程式例如:dhcpd茅信、httpd每窖、imap睡陪、in.*d盖矫、inetd种柑、lpd、named、netconfig渔呵、nmbd怒竿、samba、sendmail厘肮、squid、swap睦番、tcpd类茂、tcpdump等
/home
存放所有用戶文件的根目錄
/lib
存放跟文件系統(tǒng)中的程序運行所需要的共享庫及內(nèi)核模塊。共享庫又叫動態(tài)鏈接共享庫托嚣,作用類似windows里的.dll文件巩检,存放了根文件系統(tǒng)程序運行所需的共享文件。
/tmp
用于存放各種臨時文件示启,是公用的臨時文件存儲點兢哭。
/dev
用于存放設(shè)備文件。/bus, /cpu, /disk夫嗓,比如迟螺,用戶可以通過訪問/dev/mouse/訪問鼠標(biāo)的輸入,就像訪問其他文件一樣
/media
放置的就是可移除的裝置舍咖。 包括軟碟矩父、光碟、DVD等等裝置都暫時掛載于此
/proc
proc是一個偽文件系統(tǒng)排霉,提供了<u>訪問內(nèi)核數(shù)據(jù)</u>的方法窍株,一般掛載在“/proc”目錄,其中的大部分內(nèi)容是只讀的
虛擬文件系統(tǒng)目錄攻柠,是系統(tǒng)內(nèi)存的映射球订。可直接訪問這個目錄來獲取系統(tǒng)信息瑰钮。
/var
用于存放運行時需要改變數(shù)據(jù)的文件冒滩,也是某些大文件的溢出區(qū),比方說各種服務(wù)的日志文件(系統(tǒng)啟動日志等浪谴。)等旦部。
/srv
主要用來存儲本機或本服務(wù)器提供的服務(wù)和數(shù)據(jù)
Linux文件命令
dmesg
用來顯示開機信息
開機信息保存在/var/log/dmesg
dd -- disk dump
復(fù)制文件并對原文件的內(nèi)容進(jìn)行轉(zhuǎn)換和格式化處理
df -- disk free
df -h ./
Filesystem Size Used Avail Use% Mounted on
/dev/sda10 189G 50G 131G 28% /
df ./
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda10 198170792 51487036 136594132 28% /
wc -> word count
用于查看文件的行數(shù),單詞數(shù)和字符數(shù)
wc filename
X Y Z filename
- X : 行數(shù)
- Y: 單詞數(shù)
- Z: 字節(jié)數(shù)
- filename: 文件名
ls | wc -l # 查看有多少個文件
find
在當(dāng)前目錄下较店,查找文件為suchen的文件士八。
find . -name suchen
find . -iname suchen # 不區(qū)分大小寫
找出當(dāng)前目錄下,目錄名是tmp的目錄
find . -type d -name tmp
查找特定權(quán)限的文件
find . -type f -perm 777 # 權(quán)限是777
find . -type f -perm /a+x # 查找可執(zhí)行文件
查找指定用戶的文件
find . -user tuo
查找特定時間修改的的文件
find . -type -f -mtime 3 # 三天前修改
find . -mtime +3 # 三天以前
find . -amin -3 # 三天以內(nèi)訪問過的
查找特定大小的
find . -type f -size +50MB -size -100MB # 大于50,小于100的文件
ln
- 軟鏈接:新建一個node指向原來node梁呈, 是一類特殊的文件婚度,這個文件包含了另一個文件或目錄的路徑名。在對符號文件進(jìn)程進(jìn)行操作時,系統(tǒng)會自動把該操作轉(zhuǎn)換為對源文件的操作蝗茁。但刪除文件時僅僅刪除鏈接文件醋虏。
- 硬鏈接:新建一個node指向原來node的block,和原node公共一個inode號哮翘,一個文件的另一個文件名颈嚼。引用的是文件在文件系統(tǒng)中的物理索引(node)。當(dāng)刪除原始文件時饭寺,硬鏈接不會被破壞阻课,因為它所引用的是文件的物理數(shù)據(jù)而不是文件在文件結(jié)構(gòu)中的位置。
ln -s /path/origin /path/link # -s創(chuàng)建一個軟鏈接
ln /path/origin /path/link # 創(chuàng)建一個硬鏈接
sort
排序
sort string.txt # 對字符串進(jìn)行排序
sort -n num.txt # 對數(shù)字進(jìn)行排序
sort -n -r num.txt # -r 倒序
unip
去重
uniq example.txt
uniq -c example.txt # 統(tǒng)計重復(fù)次數(shù)
tr
替換或刪除字符
echo "ABC" | tr [:upper:] [:lower:]
echo "A B C" | tr [:space:] '\t'
echo "delete1234" | tr -d [:digit:]
mkdir
mkdir -p already_exist #創(chuàng)建一個已經(jīng)存在的目錄艰匙,不報錯
diff
比較文件區(qū)別
diff -yw 1.txt 2.txt # w表示比較時忽略空格限煞,y以并排的格式輸出比較結(jié)果
- !表示由差異的行
- + 表示第二個文件比第一個文件多出的行
who
查看當(dāng)前所有登錄用戶的信息
paste
paste -d'|,' file1 file2 file3 # -d 指定分割符
apt
apt = apt-get员凝、apt-cache 和 apt-config 中最常用命令選項的集合署驻。
增加了進(jìn)度條交互。
apt-cache search **packagename **搜索包
apt-cache show **packagename **獲取包的相關(guān)信息健霹,如說明旺上、大小、版本等
apt-get install packagename 安裝包
apt-get install packagename --reinstall 重新安裝包
apt-get -f install 修復(fù)安裝”-f = –fix-missing”
apt-get remove packagename 刪除包
apt-get remove packagename --purge 刪除包糖埋,包括刪除配置文件等
apt-get update 更新源
apt-get upgrade 更新已安裝的包
apt-get source** packagename** 下載該包的源代碼
apt-get clean 清理無用的包
apt-get autoclean 清理無用的包
apt-get check 檢查是否有損壞的依賴
uname
查看系統(tǒng)信息
uname -a # 查看所有信息
Linux網(wǎng)絡(luò)命令
ping
判斷網(wǎng)絡(luò)的的聯(lián)通和延遲抚官,得到域名解析
ping www.baidu.com
ping -I wlp3s0f0 www.baidu.com # 以特定網(wǎng)卡ping
ping -s 1452 www.baidu.com # ping特定包的大小
- icmp_seq icmp包順序
- ttl 生存周期
- time 相應(yīng)時間
wlp3s0f0 無線網(wǎng)卡
enp2s0f1 有線網(wǎng)卡
traceroute/mtr
traceroute -n www.baidu.com # 不進(jìn)行域名解析
tracetoute -I wlp3s0f0 www.baidu.com # 以特定網(wǎng)卡
- 第一跳 為網(wǎng)關(guān)
- * 表示丟包
mtr是traceroute進(jìn)化版,IDE
host
簡單的域名解析
nslookup和dig
用于域名解析
lspci
查看所有pci設(shè)備信息阶捆,網(wǎng)卡硬件也是采用pci總線
lsusb
查看所有USB設(shè)備
ifconfig
interface configuration 查看接口信息
ifconfig -a # 查看所有接口信息
ifconfig wlp3s0f0 # 查看特定接口
ifconfig wlp3s0f0 up # 激活網(wǎng)卡
ifconfig wlp3s0f0 down # 關(guān)閉網(wǎng)卡
- lo 環(huán)回接口
- wlp3s0f0 無線網(wǎng)卡
- enp2s0f1 有線網(wǎng)卡
ifup凌节,ifdown 啟用關(guān)閉接口
ip route
查看路由表,本機只是一個網(wǎng)絡(luò)中端洒试,第一行為網(wǎng)關(guān)
route
route -n # ip地址
route # 主機名
netstat
用于顯示各種網(wǎng)絡(luò)相關(guān)信息
socket又稱為嵌套子:unix,udp,tcp
應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求倍奢,使主機間或者一臺計算機上的進(jìn)程間可以通訊。
- -t 列出tcp協(xié)議的鏈接
- -u 列出udp協(xié)議的鏈接
- -n 禁用域名解析功能
- -l 選項列出正在監(jiān)聽的套接字
- -p 打印進(jìn)程信息 (sudo)
- -r 打印內(nèi)核路由信息
- -i 打印網(wǎng)絡(luò)接口信息
ifup/down
啟用或禁用特定的網(wǎng)絡(luò)接口
網(wǎng)絡(luò)故障排查
網(wǎng)絡(luò)故障排查遵循從<u>底層到高層垒棋, 從自身到外部</u>的流程進(jìn)行卒煞。
- 先查看網(wǎng)絡(luò)配置信息是否正確
- IP地址
- 子網(wǎng)掩碼
- 網(wǎng)管
- DNS
- 查看到達(dá)網(wǎng)關(guān)是否聯(lián)通
- ping網(wǎng)關(guān)IP地址
- 查看DNS解析是否正常
- host www.baidu.com
top
top命令經(jīng)常用來監(jiān)控linux的系統(tǒng)狀況,比如cpu叼架、內(nèi)存的使用
- 第一行:top - 當(dāng)前系統(tǒng)時間 up 系統(tǒng)運行了多長時間 , 幾個用戶登錄 users, load average后面的三個數(shù)分別是1分鐘畔裕、5分鐘、15分鐘的負(fù)載情況乖订。
- 第二行:進(jìn)程數(shù)
- 第三行:cpu使用情況:us用戶扮饶,sy內(nèi)核,id空閑乍构,wa IO等待甜无,hi硬中斷,si軟中斷
- 第四行:內(nèi)存狀態(tài)
- 第五行:交換分區(qū)
- 第七行:PID:進(jìn)程id,PR:進(jìn)程優(yōu)先級岂丘,S:進(jìn)程狀態(tài) R=running, s=sleeping, t=stopped, z=zombie
輸入f陵究,查看縮寫的全稱
SSH
SSH為建立在應(yīng)用層和傳輸層基礎(chǔ)上的安全協(xié)議
sshd服務(wù)使用SSH協(xié)議進(jìn)行遠(yuǎn)程控制,或在計算機之間傳送文件奥帘。而實現(xiàn)此功能的telnet(遠(yuǎn)程桌面) 是不安全的铜邮,使用明文傳送密碼
ssh
ssh pi@10.42.0.47 # 樹莓派系統(tǒng)的用戶名和局域網(wǎng) IP 地址.
ssh -p 10022 user@hostname # 使用10022端口,默認(rèn)為22端口
ssh u0_a364@10.146.92.15 -p 8022 # 連接termux
利用ssh運行命令
ssh user@hostname python3 < test.py
或
ssh user@hostname "your cmd"
配置文件
/etc/ssh/目錄下
- ssh_config 客戶端配置文件
- sshd_config 服務(wù)器端配置文件
一般配置服務(wù)端的配置文件ssh_config
啟動服務(wù)
-
命令行
service sshd restart|start|stop|status|reload
-
init.d 啟動腳本
/etc/init.d 是 /etc/rc.d/init.d 的軟鏈接(soft link)寨蹋。
/etc/init.d/sshd restart|start|stop|status|reload
配置開機自動啟動
chkconfig sshd on
chkconfig --list sshd
chkconfig sshd off
scp
把當(dāng)前一個文件copy到遠(yuǎn)程另外一臺主機上
scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root
把文件從遠(yuǎn)程主機copy到當(dāng)前系統(tǒng)
scp root@172.19.2.75:/home/root /home/daisy/*.tar.gz
keygen
# termux
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys tuo@hostname:~/tmp
# pc
cat ~/tmp/authorized_keys >> ~/.ssh/authorized_keys # 本機authorized_keys所存儲的是可以訪問本機的設(shè)備
硬盤到文件系統(tǒng)
硬盤接口分類
- SATA (Serial Advanced Technology Attachment)
- SAS (Serial Attached SCSI)
- SCSI (Small Computer System Interface)
- IDE (Integrated Drive Electronics)
- USB
Linux中松蒜,IDE硬盤(hd)最多只能有59個邏輯分區(qū)(5-63),SATA接口硬盤最多只能有11個邏輯分區(qū)(5-15)
每種操作系統(tǒng)所配置的文件屬性權(quán)限不同钥庇,為了存放這些文件所需的數(shù)據(jù)牍鞠,需要將硬盤進(jìn)行格式化咖摹,以成為操作系統(tǒng)能夠利用的文件系統(tǒng)格式评姨。
不同操作系統(tǒng)使用的常見系統(tǒng)格式
- Windows: FAT(Win98以前), FAT32, NTFS(Win2000之后)
- Linux: Ext2, Ext3, Ext4, XFS
- Mac: HFS
各種接口的硬盤在linux中的文件命名
- SCSI,SATA,USB等接口文件的文件名:
/dev/sd[a-p]/[1-15]
- IDE接口的文件名:
/dev/hd[a-d][1-63]
hda表示IDE主硬盤,hdb表示IDE從硬盤 - 打印機文件名: lp
Linux文件系統(tǒng)將權(quán)限與屬性放置在一個inode中 ( 一個文件只有一個inode萤晴, 同時記錄文件數(shù)據(jù)所存放的data block號碼)吐句,實際數(shù)據(jù)放在block區(qū)中 (一個文件可=可以有多個block)。另外店读,還有一個superblock記錄整個文件系統(tǒng)的整體信息嗦枢,包括inode和block總量,使用量和剩余量屯断。
與linux的ext2相比文虏,F(xiàn)AT文件系統(tǒng)沒有inode,只有儲存文件數(shù)據(jù)的block殖演。前面一個block存放下一個block的號碼氧秘,現(xiàn)在這種FAT文件系統(tǒng)主要用在U盤上
Win7系統(tǒng)支持NTFS和winFS文件系統(tǒng),而win8是全新的ReFS系統(tǒng)
etx2是非日志文件系統(tǒng)趴久,etx3是日志文件系統(tǒng)
在Linux中輸入輸出設(shè)備被看做特殊文件丸相,稱為設(shè)備文件。設(shè)備文件分為兩類彼棍,字符設(shè)備文件(c)和塊設(shè)備文件(b)灭忠。字符設(shè)備文件允許設(shè)備傳送任意大小的數(shù)據(jù),如終端座硕,打印機弛作,鼠標(biāo)等。塊設(shè)備文件允許設(shè)備傳送數(shù)據(jù)以數(shù)據(jù)塊為單位华匾,如硬盤缆蝉,光盤,usb
計算機硬盤的分區(qū)主要分為基本分區(qū)和擴展分區(qū),基本分區(qū)和擴展分區(qū)之和不能大于四個刊头,基本分區(qū)可以馬上被使用但不能再分區(qū)黍瞧。擴展分區(qū)必須在進(jìn)行分區(qū)后才能使用,由擴展分區(qū)再分下去就是邏輯分區(qū)原杂,邏輯分區(qū)沒有數(shù)量限制印颤。
fdisk
fdisk命令是磁盤及分區(qū)管理工具,在硬盤設(shè)備中創(chuàng)建穿肄、刪除年局、更改分區(qū)等操作通過fdisk命令
-l: 該選項后沒不跟設(shè)備名會直接列出所有磁盤設(shè)備以及分區(qū)表,加上設(shè)備名會列出該設(shè)備額分區(qū)表
不加-l會對該磁盤進(jìn)行分區(qū)
mkfs
將磁盤分區(qū)后咸产,使用mkfs命令可對其進(jìn)行格式化
fsck
當(dāng)系統(tǒng)非正常關(guān)機時矢否,或其他原因破壞了文件系統(tǒng),需要對文件系統(tǒng)進(jìn)行恢復(fù)脑溢,否則文件系統(tǒng)將不能正常引導(dǎo)
fsck /dev/sda1
df
檢查文件系統(tǒng)的磁盤空間占用情況僵朗。可以利用該命令來獲取磁盤占用了多少空間屑彻,目前還剩下多少空間
du
查看目錄下所有文件所占空間大小验庙,默認(rèn)以block數(shù)為單位
基礎(chǔ)命令
date
顯示或設(shè)置此時系統(tǒng)時間
cal
cal [month] /[year]
在屏幕上顯示日歷信息
su root
登錄root 賬號
cat
cat a |head -n 3000|tail -n +1000 >> b
將文件a的1000行到3000行之間內(nèi)容添加到b的后面
cat a |tail -n 1000 >> b
將文件a的最后1000行添加到b后面
cat a |head -n 1000 >> b
將文件a的前1000行添加到b后面
cat a |tail -n +1000 >> b
將文件a的1000行以后的添加到b后面
cat > b
將接下來鍵盤輸入的內(nèi)容覆蓋b
set
-
set -e
當(dāng)命令以非零狀態(tài)退出,則退出shell
set -o noclobber
避免重定向重寫已存在的文件 +o 禁用noclobber功能
uniq
去掉重復(fù)行
diff
找不同
grep
-i 忽略大小寫
-v 顯示不包含字符串的文本行
-C 5 foo file 顯示file文件里匹配foo字串那行以及上下5行
-B 5 foo file 顯示foo及前5
-A 5 foo file 顯示foo及后5行
-l 只顯示文件名
grep -l main * # 列出當(dāng)前目錄下內(nèi)容含有main的文件
history
history 5 # 顯示最近執(zhí)行的5個命令
!547 # 重復(fù)執(zhí)行547號命令
killall
killall bash # 殺死所有bash程序
pkill
pkill -b -9 python # 殺死最近的python進(jìn)程
pkill -f string -9 # 殺死名字帶while的進(jìn)程
watch
watch -n 10 ps -au
Linux GUI
X Windows是一個窗口系統(tǒng)社牲,為GUI界面提供最基本的支持粪薛,而具體的窗口形式、窗口行為以及更多的圖形化支持搏恤,則需要借助于窗口管理器和桌面環(huán)境违寿。
現(xiàn)在常用的桌面環(huán)境為GNOME(基于GTK圖形庫)和KDE(基于Qt圖形庫),可以從中簡便地管理和使用應(yīng)用程序熟空、文件和系統(tǒng)資源
系統(tǒng)啟動過程
-
加載BIOS
加電自檢藤巢,根據(jù)BIOS內(nèi)設(shè)置的引導(dǎo)順序從硬盤、軟盤或CDROM中讀入主引導(dǎo)記錄即MBR(其中存放了預(yù)啟動信息痛阻、分區(qū)信息)菌瘪,被調(diào)到物理內(nèi)存的內(nèi)容是Boot Loader,具體到用戶PC機就是LILO或GRUB阱当。
-
加載Boot Loader
Boot Loader是在操作系統(tǒng)內(nèi)核運行之前運行的一段小朋友俏扩,通過這段小程序,可以初始化硬件設(shè)備弊添,建立內(nèi)存空間的映射圖录淡。
-
加載內(nèi)核映像
根據(jù)grub設(shè)定的內(nèi)核映像所在路徑,系統(tǒng)讀取內(nèi)存映像油坝,并進(jìn)行解壓縮嫉戚。
-
執(zhí)行init進(jìn)程
內(nèi)核被加載后刨裆,第一個運行的程序便是
/sbin/init
-
執(zhí)行
/bin/login
程序,進(jìn)入登錄狀態(tài)系統(tǒng)為用戶建立登錄接口彬檀,等待用戶輸入username和password
GRUB介紹
GRUB (GRand Unified Bootloader)是一個將引導(dǎo)裝載程序 (Boot Loader) 安裝到主引導(dǎo)記錄(MBR)的程序帆啃。這使得用戶能夠?qū)Σ僮飨到y(tǒng)進(jìn)行選擇,在內(nèi)核引導(dǎo)時可傳遞指令給內(nèi)核窍帝,或是在內(nèi)核引導(dǎo)前確定一些系統(tǒng)參數(shù)
Linux關(guān)機
shutdown
shutdown 16:50
shutdown +5 “Byebye” 五分鐘后關(guān)機打印拜拜
halt
相當(dāng)于shutdown -h 立即關(guān)機
halt執(zhí)行時努潘,kill掉所有應(yīng)用程序,然后調(diào)用sync(將所有內(nèi)存信息通過文件系統(tǒng)寫入硬盤)
reboot
和halt類似的重啟程序
相當(dāng)與shutdown -r
init
init進(jìn)程是所欲進(jìn)程的祖先坤学,其進(jìn)程號始終wenyi
日志管理
Linux系統(tǒng)有三個主要的日志子系統(tǒng)
-
連接時間日志子系統(tǒng)
由多個程序執(zhí)行疯坤,把記錄寫入到
/var/log/wtmp
和/var/run/utmp
中,login等程序更新wtmp和utmp文件深浮,使系統(tǒng)管理員能夠跟蹤用戶在何時登錄到系統(tǒng)中压怠。 -
進(jìn)程統(tǒng)計日志子系統(tǒng)
由系統(tǒng)內(nèi)核執(zhí)行,當(dāng)一個進(jìn)程終止時飞苇,為每個進(jìn)程向進(jìn)程統(tǒng)計文件中寫一個記錄菌瘫。進(jìn)程統(tǒng)計的目的是為系統(tǒng)中的基本服務(wù)提供命令使用統(tǒng)計
-
錯誤日志子系統(tǒng)
由syslogd (8) 執(zhí)行。各種系統(tǒng)守護(hù)進(jìn)程玄柠、用戶程序和內(nèi)核通過syslogd(8) 向文件
/var/log/messages
報告值得注意的事件突梦。
/var/log/dmesg
/var/log/dmesg
文件保存內(nèi)核啟動的信息诫舅,可以看到內(nèi)核和各種驅(qū)動程序的加載羽利,加載硬件驅(qū)動時系統(tǒng)也會顯示出相應(yīng)的信息。
/var/log/messages
/var/log/messages
文件是Linux系統(tǒng)中最全面的log文件刊懈,記錄了內(nèi)核和應(yīng)用程序發(fā)生錯誤時的信息和系統(tǒng)運行的一般信息这弧。
使用swatch文件分析日志
alias
給命令取別名
alias cdir='cd /home/user/dir'
gcc
-
預(yù)處理階段
gcc -E hello.c -o hello.i
-
編譯階段
gcc -S hello.i -o hello.s
-
匯編階段
gcc -c hello.s -o hello.o
-
鏈接階段
gcc hello.c -o hello
-
將兩個文件編譯鏈接成可執(zhí)行文件
gcc -o main mani.o stack.o
使用靜態(tài)鏈接庫
-
生成.o文件
gcc -c stack.c
-
用ar命令歸檔,生成文件libstack.a
ar -rc libstack.a stack.o
-
編譯源文件main.c為目標(biāo)文件main.o虚汛,注意要把靜態(tài)庫頭文件的路徑加到-I參數(shù)里面
gcc -I /includepath/ -o main.o -c main.c
-
生成可執(zhí)行文件匾浪,注意把靜態(tài)鏈接庫文件的路徑加到-L參數(shù)里面,把庫文件名(去掉lib和.a)加到-L參數(shù)里面
gcc -o main -L /libpath. main.o -L stack
-w 禁止所有警告信息
-Wall 允許發(fā)出gcc提供的所有有用的報警信息
-Werror 視警告為錯誤卷哩,出現(xiàn)任何警告即放棄編譯
-g 指示編譯程序在目標(biāo)代碼中加入供調(diào)試程序gdb使用的附加
git
初始化倉庫
git init # 通過git init命令把這個目錄變成Git可以管理的倉庫
將文件加入到倉庫的暫存區(qū)
git add readme.md # 將文件添加到倉庫蛋辈,實際上就是把文件修改添加到暫存區(qū)
git diff file # 比較工作區(qū)和暫存區(qū)之間的區(qū)別
將文件提交到當(dāng)前分支
git commit -m "This is commit" # 把文件提交到倉庫 -m后面輸入的是本次提交的說明 commit 可以一次提交很多文件,實際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支将谊。
git log # 查看commit歷史記錄
回歸到以前版本
get reset --hard HEAD^^ # 回到上兩個版本
get reset --hard 3a9864 # 回到指定版本號冷溶,查看log得到
git reflog # 記錄了每次commit和reset記錄,也可以通過這個命令的得到某個版本號的id
git checkout -- readme.md # 丟棄工作區(qū)中對readme.md的修改 --很重要
刪除文件
rm test # 從工作區(qū)刪除
git rm test # 從版本庫刪除文件
git commit # 確認(rèn)刪除
上傳到github
git remote add origin git@github.com:michaelliao/learngit.git # 要關(guān)聯(lián)一個遠(yuǎn)程庫
git push -u origin master # 推送最新修改
新的分支
git checkout -b dev # -b表示切換
上個語句等同于
git branch dev
git checkout dev
查看當(dāng)前的分支
git branch
我們把dev
分支的工作成果合并到master
分支上
git merge dev
刪除一個分支
git branch -d dev
上傳代碼
git push -u origin master
>> wangtuo0820@sina.cn
>> wangtuo96$
odps
od -c file
查看文件的實際內(nèi)容
fator
分解因數(shù) factor 999
fortune
打印一句名言 fortune-zh打印一首詩
tmux
- ctrl+b C: create new window
- ctrl+b , : rename the window
- ctrl+b p: go previous window
- ctrl+b n: go next window
- ctrl+b t: show time
- ctrl+b w: list all window
- ctrl+b %: split the window vertically
- ctrl+b ": split the window horizentally
- ctrl+b : input command
- ctrl+b d : detach session 不退出,在后臺繼續(xù)運行
- ctrl+b &: exit session
- ctrl+b ':
tmux new -s name 創(chuàng)建一個會話,命名為name
tmux attach -t name 重新連接上被分離的會話
tmux ls 列出所有創(chuàng)建的會話
Shell
有條件執(zhí)行
&&: 連接兩個命令尊浓, 前一命令執(zhí)行成功后才能執(zhí)行后一命令
-
||: 前一命令執(zhí)行不成功才執(zhí)行后一命令
ls ./test && cd test #當(dāng)存在test目錄逞频,cd到test目錄
引號(字符串)
- 雙引號對字符串中出現(xiàn)的$,"栋齿,'苗胀,\進(jìn)行替換
- 單引號不進(jìn)行替換襟诸,將字符串作為普通字符輸出
- 反引號會將字符串作為命令執(zhí)行
echo 'I am $USER'
>> I am $USER
echo -e "I am \n$USER" # 對字符串進(jìn)行轉(zhuǎn)義
>> I am
>> tuo
- $#: 實際位置參數(shù)個數(shù)
- @: 命令行所有參數(shù)組成的字符串
- $!: 上一個后臺命令對應(yīng)的進(jìn)程號
- $$: 當(dāng)前進(jìn)程號
- $? 上一命令的退出狀態(tài)
#!/bin/bash
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
read
echo -n "input:"
read $USER
echo "output: $USER"
read -p "input"
echo "output $REPLY"
LINE
逐行輸出文件中代碼
while read LINE
do
echo "$LINE"
done<file
printf
printf "%s's average score is %.2f\n" "Lixiaohai" $((83+99+66)/3)
數(shù)組
student=("A" "B" "C")
score=(11 22 33)
for i in 0 1 2
do
echo "${student[$i]} is : ${score[$i]} "
done
student[0]="E"
student[1]="F"
student[2]="G"
i=0
while [ $i -lt 5 ]
do
echo ${student[$i]}
i=$(($i+1)) # i++
done
echo "${#student[*]}"
獲取所有元素
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[*]}"
echo "Second Index: ${NAME[@]}"
獲取數(shù)組長度
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[*]}"
echo "Second Index: ${NAME[@]}"
#取得數(shù)組元素的個數(shù)
length=${#NAME[@]}
echo -e $length "\n" # len of NAMe
#或者
length=${#NAME[*]} # len of NAME
echo -e $length "\n"
#取得數(shù)組單個元素的長度
lengthn=${#NAME[0]} # 4 length of Zara
echo -e $lengthn "\n"
判斷
是否存在且為字符設(shè)備
if test -r $FILENAME;then
echo "is a file"
fi
數(shù)值的大于等于
if test n1 -ge n2; then
echo ""
fi
字符串的等于
if test str = str;then
echo ""
fi
邏輯
# 與 -a
if test n1 -ge n2 -a n1 -lt 70;then
echo ""
fi
# 或 -o
if test n1 -ge n2 -o n1 -lt 70;then
echo ""
fi
判斷目錄
if test ! -d $DIR; then
echo "not a dir"
fi
?