【方向盘】达到Linux第三阶段的常用命令笔记记录---PartⅠ
既然絕非庸才,為何甘于平凡
本文已被https://yourbatman.cn收錄;女媧Knife-Initializr工程可公開訪問啦;程序員專用網(wǎng)盤https://wangpan.yourbatman.cn;公號后臺回復(fù)“專欄列表”獲取全部小而美的原創(chuàng)技術(shù)專欄
相關(guān)閱讀
【小家運(yùn)維】達(dá)到Linux第三階段的常用命令筆記記錄—PartⅠ
【小家運(yùn)維】達(dá)到Linux第三階段的常用命令筆記記錄—Part Ⅱ
【小家運(yùn)維】達(dá)到Linux第三階段的常用命令筆記記錄—Part Ⅲ
前言
你好,我是方向盤(YourBatman、方哥)
Linux雖然在個人桌面領(lǐng)域處于弱勢,被Windows絕對壓制。但是在服務(wù)器領(lǐng)域、嵌入式領(lǐng)域(比如Android的內(nèi)核也是Linux)幾乎一騎絕塵,為實(shí)際上的統(tǒng)治者。
它免費(fèi)、穩(wěn)定、高效、開源等一系列特點(diǎn)在在市場上都得到了很明顯的體現(xiàn)。
Linux的體系架構(gòu)
一般來說著名的linux系統(tǒng)基本上分兩大類:
- RedHat系列:Redhat、Centos、Fedora等
- Debian系列:Debian、Ubuntu等
Linux 的基石是 Unix 內(nèi)核,其基于 Unix 的基本特點(diǎn)以及 POSIX 和單獨(dú)的 UNIX 規(guī)范標(biāo)準(zhǔn)。看起來,該操作系統(tǒng)官方名字取自于 Linus,其中其操作系統(tǒng)名稱的尾部的 “x” 和 Unix 系統(tǒng)相聯(lián)系。
我不得不貼出最經(jīng)典的一張圖了:
內(nèi)核:從本質(zhì)上看是一種軟件——控制計算機(jī)的硬件資源,并提供上層應(yīng)用程序運(yùn)行的環(huán)境
系統(tǒng)調(diào)用:是操作系統(tǒng)的最小功能單位。現(xiàn)在各種版本的Unix實(shí)現(xiàn)都提供了不同數(shù)量的系統(tǒng)調(diào)用,如Linux的不同版本提供了240-260個系統(tǒng)調(diào)用,FreeBSD大約提供了320個(reference:UNIX環(huán)境高級編程)。我們可以把系統(tǒng)調(diào)用看成是一種不能再化簡的操作(類似于原子操作,但是不同概念)
Shell:是一個特殊的應(yīng)用程序,俗稱命令行,本質(zhì)上是一個命令解釋器,它下通系統(tǒng)調(diào)用,上通各種應(yīng)用,通常充當(dāng)著一種“膠水”的角色,來連接各個小功能程序,讓不同程序能夠以一個清晰的接口協(xié)同工作,從而增強(qiáng)各個程序的功能。同時,Shell是可編程的,它可以執(zhí)行符合Shell語法的文本,這樣的文本稱為Shell腳本,通常短短的幾行Shell腳本就可以實(shí)現(xiàn)一個非常大的功能,原因就是這些Shell語句通常都對系統(tǒng)調(diào)用做了一層封裝。為了方便用戶和系統(tǒng)交互,一般,一個Shell對應(yīng)一個終端,終端是一個硬件設(shè)備,呈現(xiàn)給用戶的是一個圖形化窗口。我們可以通過這個窗口輸入或者輸出文本。這個文本直接傳遞給shell進(jìn)行分析解釋,然后執(zhí)行。
總結(jié)一下,用戶態(tài)的應(yīng)用程序可以通過三種方式來訪問內(nèi)核態(tài)的資源:
1、系統(tǒng)調(diào)用(所以應(yīng)用程序也是不經(jīng)過shell,直接通過系統(tǒng)調(diào)用來訪問內(nèi)核資源的)
2、庫函數(shù)
3、Shell腳本
Linux的學(xué)習(xí)階段
本人結(jié)合平時閱讀的一些文章,大概把Linux選手分為如下這些階段:
如題,很顯然,本文做的相關(guān)筆記止步于第三階段。并且絕大部分內(nèi)容還是以命令/shell的講解記錄為主
Linux的學(xué)習(xí)不比編程,多實(shí)踐就自然出真知了。
Linux的目錄結(jié)構(gòu)
在Linux的世界里,一切皆目錄
重點(diǎn)目錄介紹
- /:根目錄是整個系統(tǒng)最重要的一個目錄,因?yàn)椴坏械哪夸浂际怯筛夸浹苌鰜淼?#xff0c; 同時根目錄也與開機(jī)/還原/系統(tǒng)修復(fù)等動作有關(guān)。
根目錄(/)所在分區(qū)應(yīng)該越小越好, 且應(yīng)用程序所安裝的軟件最好不要與根目錄放在同一個分區(qū)內(nèi),保持根目錄越小越好。 如此不但效能較佳,根目錄所在的文件系統(tǒng)也較不容易發(fā)生問題。說白了,就是根目錄和Windows的C盤一個樣。
- /bin:系統(tǒng)有很多放置執(zhí)行檔的目錄,但/bin比較特殊。在/bin底下的指令可以被root與一般帳號所使用,主要有:cat,chmod(修改權(quán)限), chown, date, mv, mkdir, cp, bash等等常用的指令。
- /sbin:Linux有非常多指令是用來設(shè)定系統(tǒng)環(huán)境的,這些指令只有root才能夠利用來設(shè)定系統(tǒng),其他使用者最多只能用來查詢而已。里面包括了開機(jī)、修復(fù)、還原系統(tǒng)所需要的指令。 至于某些伺服器軟體程式,一般則放置到**/usr/sbin/當(dāng)中。至于本機(jī)自行安裝的軟體所產(chǎn)生的系統(tǒng)執(zhí)行檔(system binary),則放置到/usr/local/sbin/**當(dāng)中了。常見的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。
- /boot:主要放置開機(jī)會使用到的檔案
- /dev:在Linux系統(tǒng)上,任何裝置與周邊設(shè)備都是以檔案的型態(tài)存在于這個目錄當(dāng)中。比如u盤等一般都掛在這里。比要重要的檔案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等 類似于windows的設(shè)備管理器
- /etc:系統(tǒng)主要的配置幾乎都放置在這個目錄內(nèi),例如人員的帳號密碼檔、各種服務(wù)的啟始檔等等。 普通用戶一般只能看,root用戶才能修改此目錄下的文件。 比較重要的檔案有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等 其下重要的目錄有:/etc/init.d/ :所有服務(wù)的預(yù)設(shè)啟動script都是放在這里的,例如要啟動或者關(guān)閉iptables的話: /etc/init.d/iptables start、/etc/init.d/ iptables stop
- /home:家目錄。新建一個用戶就會有一個家目錄。~ :代表當(dāng)前使用者的家目錄,而 ~guest:則代表用戶名為guest的家目錄。
- /lib:系統(tǒng)的函式庫。比如一些驅(qū)動程序等等
- /media:是媒體的英文,顧名思義,這個/media底下放置的就是可移除的裝置。
- /mnt:**如果妳想要暫時掛載某些額外的裝置,一般建議妳可以放置到這個目錄中。**在古早時候,這個目錄的用途與/media相同啦。 只是有了/media之后,這個目錄就用來暫時掛載用了。
- /opt:這個目錄對我們平時就很重要了。一般我們的第三方軟件都會放在這個目錄里,比如我們java的源代碼、jar包、打包腳本等等都放在這里。我們安裝的軟件:比如需要安裝一個redis,也可以安裝在這個目錄里。
- /root:root用戶的家目錄。
- /srv:srv可以視為service的縮寫,是一些網(wǎng)路服務(wù)啟動之后,這些服務(wù)所需要取用的資料目錄。 常見的服務(wù)例如WWW, FTP等等。
- /tmp:暫時存放目錄。比如一些日志文件、程序運(yùn)行時的中間臨時文件等等可放在這。這個目錄所有用戶都可以操作的
- /var:/var就是在系統(tǒng)運(yùn)作后才會漸漸占用硬盤容量的目錄。因?yàn)?var目錄主要針對常態(tài)性變動的文件,包括緩存(cache)、登錄檔(log file)以及某些軟件運(yùn)作所產(chǎn)生的文件、打印輸出的日志文件、mysql的數(shù)據(jù)庫文件等等
/var/cache/:應(yīng)用程序本身運(yùn)作過程中會產(chǎn)生的一些暫存檔
/var/lib/:
程序本身執(zhí)行的過程中,需要使用到的數(shù)據(jù)文件放置的目錄。
/var/lock/:
/var/log/:非常重要。這是登錄文件放置的目錄。里面比較重要的文件如/var/log/messages, /var/log/wtmp(記錄登入者的信息)等。
/var/mail/:放置個人電子郵件信箱的目錄,不過這個目錄也被放置到/var/spool/mail/目錄中,通常這兩個目錄是互為鏈接文件。
/var/run/:某些程序或者是服務(wù)啟動后,會將他們的PID放置在這個目錄下
/var/spool/: - /usr:usr不是user的縮寫,其實(shí)usr是Unix Software Resource的縮寫。也就是Unix操作系統(tǒng)軟件資源所放置的目錄,而不是用戶的數(shù)據(jù)啦。 因?yàn)槭撬邢到y(tǒng)默認(rèn)的軟件(distribution發(fā)布者提供的軟件)都會放置到/usr底下,因此這個目錄有點(diǎn)類似Windows 系統(tǒng)的C:\Windows\ + C:\Program files\這兩個目錄的綜合體,系統(tǒng)剛安裝完畢時,這個目錄會占用最多的硬盤容量。
/usr/bin/:絕大部分的用戶可使用指令都放在這里。請注意到他與/bin的不同之處。(是否與開機(jī)過程有關(guān))
/usr/lib/:如果你使用的是X86_64的Linux系統(tǒng), 那可能會有/usr/lib64/目錄產(chǎn)生
/usr/local/:管理員在本機(jī)自行安裝自己下載的軟件。建議安裝到此目錄。該目錄下也是具有bin, etc, include, lib…的次級目錄
/usr/sbin/:非系統(tǒng)正常運(yùn)作所需要的系統(tǒng)指令。最常見的就是某些網(wǎng)絡(luò)服務(wù)器軟件的服務(wù)指令(daemon)
/usr/share/:放置共享文件的地方,在這個目錄下放置的數(shù)據(jù)幾乎是不分硬件架構(gòu)均可讀取的數(shù)據(jù), 因?yàn)閹缀醵际俏谋疚募?br /> /usr/src/:
一般原始碼建議放置到這里,src有source的意思。至于核心原始碼則建議放置到/usr/src/linux/目錄下。
linux一切皆文件,因此大家需要行程一共公式,對應(yīng)的文件放在對應(yīng)的目錄里吧
常用命令
man:幫助命令
man是manual的縮寫,man命令用來提供在線幫助,通過man命令可以查看Linux中的命令幫助、配置文件幫助、編程幫助等信息。
man命令支持上下翻,搜索(輸入斜線’/’加字符串),退出用q
ping和telnet
先說說ping和telnet命令(Linux和windows都有):
telnet因?yàn)椴捎妹魑膫魉蛨笪?#xff0c;安全性不好,很多Linux服務(wù)器都不開放telnet服務(wù),而改用更安全的ssh方式了。windows默認(rèn)也是不開啟的,需要手動打開
ping通常是用來檢查網(wǎng)絡(luò)是否通暢。
telnet是用來探測指定ip是否開放指定端口。
Linux查看系統(tǒng)版本、內(nèi)核信息
- cat /etc/issue 或 cat /etc/centos-release 查看系統(tǒng)版本信息
- uname -a 查看內(nèi)核信息
- 查看系統(tǒng)版本信息
備注:(使用命令時提示command not found,需要安裝yum install redhat-lsb -y)
Linux中的SSHD服務(wù)
如果我們需要使用類似xshell工具遠(yuǎn)程登錄到Linux中,那么需要遠(yuǎn)程的Linux啟用了SSHD服務(wù)。SSHD服務(wù)一般都是隨系統(tǒng)啟動的/etc/init.d/sshd
檢查服務(wù)是否啟動:
[root@l-groupclass-server1.syc.dev.ali.qr ~]# service sshd status已啟動了顯示如下:
openssh-daemon (pid 13151) is running...沒有安裝SSHD服務(wù):請自行先安裝吧
sshd:unrecognized service SSHD的默認(rèn)端口號為22,可以通過修改 /etc/ssh/sshd_config文件,修改默認(rèn)端口,比如我修改成了如下,然后重啟服務(wù)servcie sshd restart即可備注:修改此配置文件,該端口可以避免被端口掃描,規(guī)避風(fēng)險。同時也可以禁止root登錄等等配置。
SSH的工作機(jī)制
服務(wù)器啟動的時候自己產(chǎn)生一個密鑰(768bit公鑰),本地的ssh客戶端發(fā)送連接請求到ssh服務(wù)器,服務(wù)器檢查連接點(diǎn)客戶端發(fā)送的數(shù)據(jù)和IP地址,確認(rèn)合法后發(fā)送密鑰(768bits)給客戶端,此時客戶端將本地私鑰(256bit)和服務(wù)器的公鑰(768bit)結(jié)合成密鑰對key(1024bit),發(fā)回給服務(wù)器端,建立連接通過key-pair數(shù)據(jù)傳輸。
SSH知識小結(jié)
SSH命令
SSH是一種網(wǎng)絡(luò)協(xié)議,用于計算機(jī)之間的加密登錄。如果一個用戶從本地計算機(jī),使用SSH協(xié)議登錄另一臺遠(yuǎn)程計算機(jī),我們就可以認(rèn)為,這種登錄是安全的,即使被中途截獲,密碼也不會泄露。
ssh命令用于遠(yuǎn)程登錄上Linux主機(jī)。一般我們會配置成免密碼的方式登錄
常用格式:ssh [-l login_name] [-p port] [user@]hostname
備注:ssh可以通過ssh 主機(jī)名的方式登錄到遠(yuǎn)程機(jī)器。需要修改主機(jī)的hostname配置:
不指定用戶,默認(rèn)利用當(dāng)前宿主用戶的用戶名登錄
ssh 192.168.0.11指定用戶登錄,若需要密碼,加-p password參數(shù)即可
ssh root@192.168.0.11若修改過端口,可以指定端口登錄
ssh -p 12333 root@192.168.0.11登錄到遠(yuǎn)程主機(jī)后立刻執(zhí)行某個命令(當(dāng)然也可以執(zhí)行腳本)
ssh omd@192.168.1.100 "ls /home/fangshixiang"SSH為啥安全呢?
SSH之所以能夠保證安全,原因在于它采用了公鑰加密。
(1)遠(yuǎn)程主機(jī)收到用戶的登錄請求,把自己的公鑰發(fā)給用戶。
(2)用戶使用這個公鑰,將登錄密碼加密后,發(fā)送回來。
(3)遠(yuǎn)程主機(jī)用自己的私鑰,解密登錄密碼,如果密碼正確,就同意用戶登錄。
這個過程本身是安全的,但是實(shí)施的時候存在一個風(fēng)險:如果有人截獲了登錄請求,然后冒充遠(yuǎn)程主機(jī),將偽造的公鑰發(fā)給用戶,那么用戶很難辨別真?zhèn)巍R驗(yàn)椴幌駂ttps協(xié)議,SSH協(xié)議的公鑰是沒有證書中心(CA)公證的,也就是說,都是自己簽發(fā)的。
口令登錄(用戶名、密碼登錄)
公鑰登錄
遠(yuǎn)程主機(jī)的authorized_keys文件
遠(yuǎn)程主機(jī)會將用戶的公鑰,保存在登錄后的用戶主目錄的$HOME/.ssh/authorized_keys文件中。公鑰就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。
不使用上面的ssh-copy-id命令,改用下面的命令,這樣也是okl的,只是比較麻煩:
$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pubscp(ssh提供的功能支持)
scp在夸機(jī)器復(fù)制的時候?yàn)榱颂岣邤?shù)據(jù)的安全性,使用了ssh連接和加密方式,如果機(jī)器之間配置了ssh免密碼登錄,那在使用scp的時候密碼都不用輸入。
遠(yuǎn)程文件的安全(加密)拷貝
scp是加密遠(yuǎn)程拷貝,cp為本地拷貝。每次都是全量拷貝(效率不高,適合第一次),增量拷貝用rsync
命令格式:
scp [參數(shù)] [原路徑] [目標(biāo)路徑]
-P port 注意是大寫的P, port是指定數(shù)據(jù)傳輸用到的端口號
-r 遞歸復(fù)制整個目錄(復(fù)制目錄一般都需要帶上此參數(shù))
這樣子就把我的機(jī)子的demo.txt文件拷貝到了遠(yuǎn)程機(jī)器10.102.131.178的指定目錄下了。
交換給位置,就可以把遠(yuǎn)程服務(wù)器的文件copy到本地了:
rsync
rsync是可以實(shí)現(xiàn)增量備份的工具。配合任務(wù)計劃,rsync能實(shí)現(xiàn)定時或間隔同步,配合inotify或sersync,可以實(shí)現(xiàn)觸發(fā)式的實(shí)時同步。
因?yàn)槭褂幂^少,具體參考:rsync(一):基本命令和用法
sudo和su
sudo : 暫時切換到超級用戶模式以執(zhí)行超級用戶權(quán)限,提示輸入密碼時該密碼為當(dāng)前用戶的密碼,而不是超級賬戶的密碼。不過有時間限制,Ubuntu默認(rèn)為一次時長15分鐘。
su : 切換到某某用戶模式,提示輸入密碼時該密碼為想要切換到的用戶的密碼,用法為su 賬戶名稱。如果后面不加賬戶時系統(tǒng)默認(rèn)為root賬戶,密碼也為root的密碼。沒有時間限制。
備注:root切換到任何用戶的時候,是不需要輸入密碼的
快捷命名:
sudo -i: 為了頻繁的執(zhí)行某些只有超級用戶才能執(zhí)行的權(quán)限,而不用每次輸入密碼,可以使用該命令。提示輸入密碼時該密碼為當(dāng)前賬戶的密碼。沒有時間限制。執(zhí)行該命令后提示符變?yōu)椤?”而不是“$”。想退回普通賬戶時可以執(zhí)行“exit”或“l(fā)ogout” 。
Linux下為用戶配置免密碼sudo權(quán)限(只有root用戶才能操作)
我們也可以指定的用戶組,來sudo -i免密碼:
1、root的密碼除了root本人知道外,不需被其他需要用到root權(quán)限用戶知道,因?yàn)槭褂胹udo時,要求輸入的密碼是『該位用戶自己的密碼』。
2、把所有可執(zhí)行sudo指令的用戶都規(guī)范在『/etc/sudoers』這個文件中,root可以很容易地掌控整個系統(tǒng)。(一般每個用戶一行記錄,當(dāng)然可以按組來)
普通用戶使用sudo 來執(zhí)行只有root才能執(zhí)行權(quán)限的命令,跟用root用戶執(zhí)行是不一樣的,因?yàn)檫@時候他用的還是普通用戶的環(huán)境變量。用su -成root的用戶還是有些環(huán)境變量是和root登陸是不一樣的。另外,它們的uid也是不一樣,只有euid是相同的。
sudo /bin/bash : 這個命令也會切換到root的bash下,但不能完全擁有root的所有環(huán)境變量,比如PATH,可以擁有root用戶的權(quán)限。這個命令和 sudo -s 是等同的。
sudo su : 這個命令,也是登錄到了root,但是并沒有切換root的環(huán)境變量,比如PATH。
sudo su - : 這個命令,純粹的切換到root環(huán)境下,可以這樣理解,先是切換到了root身份,然后又以root身份執(zhí)行了 su - ,這個時候跟使用root登錄沒有什么區(qū)別。這個結(jié)果貌似跟sudo -i 的效果是一樣的,但是也有不同,sudo 只是臨時擁有了root的權(quán)限,而su則是使用root賬號登錄了linux系統(tǒng)。
- sudo su - 約等于 sudo -i
- sudo -s 完全等于 sudo /bin/bash 約等于 sudo su
- sudo 終究被一個"臨時權(quán)限的帽子"扣住,不能等價于純粹的登錄到系統(tǒng)里
相比于su切換身份須要用戶的password,常常性的是須要root的password,sudo僅僅是須要自己的password,就能夠以其它用戶的身份來運(yùn)行命令。常常是以root的身份運(yùn)行命令。所以sudo相對來說安全很多,畢竟root的密碼可不是隨便能讓人知道的。
sudo的運(yùn)行有這樣一個流程:
1).當(dāng)用戶運(yùn)行sudo時,系統(tǒng)于/etc/sudoers文件里查找該用戶是否有運(yùn)行sudo的權(quán)限;
2).若用戶具有可運(yùn)行sudo的權(quán)限。那么讓用戶輸入用戶自己的password,注意這里輸入的是用戶自己的password。
3).假設(shè)password正確。變開始進(jìn)行sudo后面的命令,root運(yùn)行sudo是不須要輸入password的,切換到的身份與運(yùn)行者身份同樣的時候。也不須要輸入password。
區(qū)別總結(jié):
了解完su和sudo,是不是發(fā)現(xiàn)sudo有太多的優(yōu)點(diǎn)了。su方式切換是須要輸入目標(biāo)用戶的password。而sudo僅僅須要輸入自己的password,所以sudo能夠保護(hù)目標(biāo)用戶的password不外流的。當(dāng)幫root管理系統(tǒng)的時候,su是直接將root全部權(quán)利交給用戶。而sudo能夠更好分工,僅僅要配置好/etc/sudoers,這樣sudo能夠保護(hù)系統(tǒng)更安全,并且分工明白,有條不紊。
關(guān)機(jī)重啟相關(guān)命令:
reboot、shutdown、poweroff、halt、init、sync
reboot
ROOT權(quán)限用戶下輸入reboot命令就可以看到The system is going down for reboot NOW的提示,目前就重啟VPS。
reboot命令重啟動系統(tǒng)時是刪除所有的進(jìn)程,而不是平穩(wěn)地終止它們。因此,使用reboot命令可以快速地關(guān)閉系統(tǒng),但如果還有其它用戶在該系統(tǒng)上工作時,就會引起數(shù)據(jù)的丟失。所以使用reboot命令的場合主要是在單用戶模式。
last reboot可以查看最近一次reboot的時間
shutdown
這個命令可以用來重啟也可以用來關(guān)機(jī)操作。參數(shù)相對較多,本文只介紹常用的。
shutdown命令可以安全地關(guān)閉或重啟Linux系統(tǒng),它在系統(tǒng)關(guān)閉之前給系統(tǒng)上的所有登錄用戶提示一條警告信息。該命令還允許用戶指定一個時間參數(shù),可以是一個精確的時間,也可以是從現(xiàn)在開始的一個時間段。
該命令的一般格式: shutdown [選項(xiàng)] [時間] [警告信息]
-
- k 并不真正關(guān)機(jī)而只是發(fā)出警告信息給所有用戶
-
- r 關(guān)機(jī)后立即重新啟動
-
- c 取消一個已經(jīng)運(yùn)行的shutdown(這個比較重要咯)
shutdown -h 2:30 ‘halt’:2點(diǎn)30分關(guān)機(jī),注意以本機(jī)時間為準(zhǔn)
shutdown –r +10:系統(tǒng)10分鐘后關(guān)機(jī)并馬上重新啟動
shutdown –h now:系統(tǒng)馬上關(guān)機(jī)(不重新啟動)
shutdown -c :#取消之前的shutdown命令
該命令只能由超級用戶使用
halt
是最簡單的關(guān)機(jī)命令,其實(shí)際上是調(diào)用shutdown -h命令。halt執(zhí)行時,殺死應(yīng)用進(jìn)程,文件系統(tǒng)寫操作完成后就會停止內(nèi)核。
halt 立刻關(guān)機(jī)
poweroff
poweroff 立刻關(guān)機(jī)
init
是所有進(jìn)程的祖先,其進(jìn)程號始終為1。init用于切換系統(tǒng)的運(yùn)行級別,切換的工作是立即完成的。init 0命令用于立即將系統(tǒng)運(yùn)行級別切換為0,即關(guān)機(jī);init 6命令用于將系統(tǒng)運(yùn)行級別切換為6,即重新啟動
sync
一般在關(guān)機(jī)前可手動調(diào)用。表示:將數(shù)據(jù)同步寫入到磁盤
在我們執(zhí)行關(guān)機(jī)、重啟命令時候一般都建議先執(zhí)行此命令。
exit和logout
對于Linux中的命令而言,每當(dāng)其執(zhí)行完成后,都會返回一個整數(shù),這個整數(shù)就是程序退出狀態(tài)(exit status),可以在shell中使用echo $?來查看上一個命令的退出狀態(tài)。退出狀態(tài)為0表示程序執(zhí)行成功,否則執(zhí)行失敗。(比如我們判斷上一條命令執(zhí)行成功了,才繼續(xù)往下執(zhí)行)
在shell腳本中,可以使用exit [n]來退出當(dāng)前腳本,并且指定退出碼為n。若沒有指定退出碼,則以腳本執(zhí)行的最后一條命令的退出狀態(tài)作為當(dāng)前腳本的退出狀態(tài),即exit $?
在命令行中,可以使用exit來退出當(dāng)前shell,或者使用logout命令。
注意:
1、退出當(dāng)前shell并不是關(guān)機(jī),只是關(guān)閉了與系統(tǒng)的交互接口,Linux仍然正常運(yùn)行。
2、logout命令在運(yùn)行級別為圖形界面的時候,是無效的
創(chuàng)建目錄 mkdir
在Linux系統(tǒng)中,mkdir命令用來創(chuàng)建一個目錄或一個級聯(lián)目錄。
-m:為目錄指定訪問權(quán)限,與chmod類似。
-p:如果目錄已經(jīng)存在**,則不會有錯誤提示**。若父目錄不存在,將會創(chuàng)建父目錄。該選項(xiàng)常用于創(chuàng)建級聯(lián)目錄。
mkdir命令不加任何選項(xiàng)默認(rèn)在當(dāng)前目錄下創(chuàng)建目錄,目錄的默認(rèn)權(quán)限為777。如果目錄已經(jīng)存在將會提示錯誤
一次性創(chuàng)建多個目錄
mkdir cep dod testlog可以一次性創(chuàng)建多個文件夾
刪除目錄 rmdir
rmdir是常用的命令,該命令的功能是刪除空目錄,一個目錄被刪除之前必須是空的。
注意,rm -r dir 命令可以代替rmdir,但是很危險,萬一它突然就不是空的咧?
注意:刪除某目錄時必須具有對父目錄的寫權(quán)限。
-p 遞歸刪除目錄dirname, 當(dāng)子目錄刪除后其父目錄為空時,也一同被刪除。如果整個路徑被刪除或者由于某種原因保留部分路徑,則系統(tǒng)在標(biāo)準(zhǔn)輸出上顯示相應(yīng)的信息。
-v --verbose 顯示指令執(zhí)行過程
改名了很少被使用了,一般使用更為強(qiáng)大的rm命令
創(chuàng)建文件 touch
touch 文件名
若該文件名文件已存在你,不加參數(shù)的情況下會什么都不做
拷貝 cp
這個是使用頻率最多的命令,負(fù)責(zé)把一個源文件復(fù)制到目標(biāo)文件(夾)下。
復(fù)制到文件夾下,則文件名保持不變,復(fù)制到文件中,則文件名變更。如果目標(biāo)文件已經(jīng)存在或目標(biāo)文件夾中含有同名文件,則復(fù)制之后目標(biāo)文件或目標(biāo)文件夾中的同名文件會被覆蓋。
cp 源文件1 源文件2 目標(biāo)文件夾 或 cp 文件 目標(biāo)文件夾*,這樣可以一次性復(fù)制多個文件到目標(biāo)文件夾里面
cp -r 源文件夾 目標(biāo)文件夾。這個也是使用頻率很高的命令,只需要記住復(fù)制文件夾一定要加“-r”參數(shù),否則會出現(xiàn)“cp: omitting directory”錯誤。
cp -s 源文件 目標(biāo)文件:也可以用ln命令實(shí)現(xiàn)同樣的功能。當(dāng)一個文件路徑太深(如下述的a/b/c/d/e/orginalFile.txt),訪問起來十分不方便時,就會創(chuàng)建這個文件的軟鏈接,使之訪問起來更方便些。軟鏈接就相當(dāng)于windows上的快捷方式。
cp -l 源文件 目標(biāo)文件:也可以用ln命令實(shí)現(xiàn)同樣的功能。有時候,為了某種原因,需要創(chuàng)建一個硬鏈接
軟連接和硬鏈接的區(qū)別,這里不解釋了。記得自己理解哦
刪除文件(夾) rm
rm [選項(xiàng)]… 目錄… 刪除指定的<文件>(即解除鏈接)
-d --directory 刪除可能仍有數(shù)據(jù)的目錄 (只限超級用戶)
-f --force 略過不存在的文件,不顯示任何信息
-r/R --recursive 同時刪除該目錄下的所有目錄層(一般刪除文件夾帶上)
rm *.rb:刪除所有以.rb結(jié)尾的文件
移動文件 mv 重命名也用此命令
mv [選項(xiàng)] 源文件或目錄 目標(biāo)文件或目錄
-f :force 強(qiáng)制的意思,如果目標(biāo)文件已經(jīng)存在,不會詢問而直接覆蓋;
-i :若目標(biāo)文件 (destination) 已經(jīng)存在時,就會詢問是否覆蓋!
mv test.log test1.txt:相當(dāng)于修改文件名
cat more less head tail
cat 是一次性顯示整個文件的內(nèi)容,還可以將多個文件連接起來顯示,它常與重定向符號配合使用,適用于文件內(nèi)容少的情況;
cat file1 file2 > file 這是它的特殊能力 cat file1 file2 表示一次性顯示兩個文件的內(nèi)容
cat -n a.txt:-n參數(shù),會在輸出前面加上行號 效果等同于 nl a.txt
more和less一般用于顯示文件內(nèi)容超過一屏的內(nèi)容,并且提供翻頁的功能。more比cat強(qiáng)大,提供分頁顯示的功能,
less比more更強(qiáng)大,提供翻頁,跳轉(zhuǎn),查找等命令。而且more和less都支持:用空格顯示下一頁,按鍵b顯示上一頁。
more
+num 從第num行開始顯示;
我們查看一個內(nèi)容較大的文件時,要用到more的動作指令,比如ctrl+f(或空格鍵) 是向下顯示一屏,ctrl+b是返回上一屏;
常用命令:
Enter 向下n行 一般慢慢滾動這樣用
Ctrl+f / 空格鍵 向下滾動一屏
Ctrl+b 返回上一屏
:f 輸出文件名和當(dāng)前行的行號;
集合管道符使用
比如我們列一個目錄下的文件,由于內(nèi)容太多,我們應(yīng)該學(xué)會用more來分頁顯示。這得和管道 | 結(jié)合起來,比如:
ls -l /etc |moremore默認(rèn)會顯示文件百分比。而less需要加參數(shù)-m / -M
less
less幾乎可以完全代替more命令,并且功能更加強(qiáng)大。
-M 顯法讀取文件的百分比、行號及總行數(shù);
-p pattern 搜索pattern;比如在/etc/profile搜索單詞MAIL,就用 less -p MAIL /etc/profile
less中的命令
Enter 向下移動一行;
y 向上移動一行;
空格鍵 / b 向下滾動一屏;
b 向上滾動一屏;
w 可以指定顯示哪行開始顯示,是從指定數(shù)字的下一行顯示;比如指定的是6,那就從第7行顯示;
g 跳到第一行;
G 跳到最后一行;
/pattern 搜索pattern ,比如 /MAIL表示在文件中搜索MAIL單詞;
v 調(diào)用vi編輯器;
q 退出less
head
head 是顯示一個文件的內(nèi)容的前多少行; 用法比較簡單
head -n 行數(shù)值 文件名;
比如我們顯示/etc/profile的前10行內(nèi)容,應(yīng)該是:
tail(非常有用)
tail命令用途是依照要求將指定的文件的最后部分輸出到標(biāo)準(zhǔn)設(shè)備,通常是終端,通俗講來,就是把某個檔案文件的最后幾行顯示到終端上,假設(shè)該檔案有更新,tail會自己主動刷新,確保你看到最新的檔案內(nèi)容。
tail -n 行數(shù)值 文件名;
比如我們顯示/etc/profile的最后5行內(nèi)容,應(yīng)該是:
tail -n 5 /etc/profile備注:最后一條命令tail非常有用,尤其在監(jiān)控日志文件時,可以在屏幕上一直顯示新增的日志信息。
-f 該參數(shù)用于監(jiān)視File文件增長。(監(jiān)控日志需要加上此參數(shù)) 默認(rèn)顯示10行
-n Number:從 Number 行位置讀取指定文件。(使用較多)
二進(jìn)制顯示文件 od
od 文件名,就會以二進(jìn)制顯示內(nèi)容。全是0和1 使用較少
>和>>指令
重定向命令其實(shí)用得不少
> 是重定向到一個文件(會覆蓋原有的內(nèi)容),>>是追加內(nèi)容到文件。兩個命令都是如果文件不存在則創(chuàng)建文件。
查看命令歷史 history
可以按一下上\下方向鍵,命令行就會顯示相對于當(dāng)前命令的上一條或下一條歷史記錄.但如果太多了,那就得使用history了
history [n] n為數(shù)字,列出最近的n條命令 n不指定,默認(rèn)值為200條
所有命令記錄在這里:~/.bash_history
使用! 執(zhí)行歷史命令。
- ! number 執(zhí)行第幾條命令
- ! command 從最近的命令查到以command開頭的命令執(zhí)行
- !! 執(zhí)行上一條
查看系統(tǒng)時間、日期 date、cal
直接輸出date、cal能看到系統(tǒng)當(dāng)前時間、日期、日歷等等
格式化輸出:date +%Y-%m-%d 輸出為: 2018-12-28
cal 2018 :會把2018年12個月的日歷都打印出來
cal 12 2018:這查看的是2018年12月指定月的日歷
搜索查找 find、locate、grep、whereis、which
先說兩個最輕量級的查找whereis、which。
whereis命令只能用于程序名的搜索,而且只搜索二進(jìn)制文件(參數(shù)-b)、man說明文件(參數(shù)-m)和源代碼文件(參數(shù)-s)。如果省略參數(shù),則返回所有信息。
which命令的作用是,在PATH變量指定的路徑中,搜索某個系統(tǒng)命令的位置,并且返回第一個搜索結(jié)果。也就是說,使用which命令,就可以看到某個系統(tǒng)命令是否存在,以及執(zhí)行的到底是哪一個位置的命令。
which 查看可執(zhí)行文件的位置
whereis 查看文件的位置
locate 配 合數(shù)據(jù)庫查看文件位置
find 實(shí)際搜尋硬盤查詢文件名稱
find
-name 文件名查找
-user 文件所屬查找
-size 文件大小查找 +大于 -小于
find /usr -name a.txt 在目錄/usr下查找名字叫a.txt的文件
find /usr -user root 查找目錄下文件所屬為root的目錄和文件
find /usr -size +20M /usr目錄下所有大于20M的文件
多參數(shù)可以聯(lián)合使用
locate
使用locate數(shù)據(jù)庫快速查找,無需遍歷整個文件系統(tǒng),所以效率還是蠻高的。需要定期更新locate數(shù)據(jù)庫;第一次執(zhí)行時,updatedb創(chuàng)建locate數(shù)據(jù)庫。執(zhí)行前,可先執(zhí)行一遍updatedb命令。。。
缺點(diǎn):centos系統(tǒng)要使用此命令,請先安裝:
yum -y install mlocate然后執(zhí)行updatedb
locate命令要比find -name快得多
grep
Linux系統(tǒng)中g(shù)rep命令是一種強(qiáng)大的文本搜索工具,它能使用正則表達(dá)式搜索文本,并把匹 配的行打印出來。grep全稱是Global Regular Expression Print,表示全局正則表達(dá)式版本,它的使用權(quán)限是所有用戶。
常用參數(shù):
-w或–word-regexp 只顯示全字符合的列。
-c或–count 計算符合范本樣式的列數(shù)。
–color :將匹配到的內(nèi)容以顏色高亮顯示。 這個還挺好用的
pattern正則表達(dá)式主要參數(shù):
\: 忽略正則表達(dá)式中特殊字符的原有含義。
^:匹配正則表達(dá)式的開始行。
$: 匹配正則表達(dá)式的結(jié)束行。
<:從匹配正則表達(dá) 式的行開始。
>:到匹配正則表達(dá)式的行結(jié)束。
[ ]:單個字符,如[A]即A符合要求 。
[ - ]:范圍,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的單個字符。
* :所有字符,長度可以為0。
使用案例:
grep ‘test’ d* #顯示所有以d開頭的[文件中]包含 test的行。 grep ‘[a-z]\{5\}’ aa #顯示所有包含每個字符串至少有5個連續(xù)小寫字符的字符串的行。 grep man * #會匹配 ‘Batman’、’manic’、’man’等, grep ‘\<man’ * #匹配’manic’和’man’,但不是’Batman’, grep ‘\<man\>’ #只匹配’man’,而不是’Batman’或’manic’等其他的字符串。‘^’:指匹配的字符串在行首, ‘$’:指匹配的字符串在行 尾,grep -i pattern files :不區(qū)分大小寫地搜索。默認(rèn)情況區(qū)分大小寫, grep -l pattern files :只列出匹配的文件名, grep -w pattern files :只匹配整個單詞,而不是字符串的一部分(如匹配’magic’,而不是’magical’), grep -C number pattern files :匹配的上下文分別顯示[number]行, grep -n pattern files 即可顯示行號信息我常用的:grep -A(后面N行) -B(前面N行) -C(前后N行)過濾符。將前一個命令的結(jié)果,通過管道符進(jìn)行過濾
| 管道命令,將前面命令的處理結(jié)果傳遞給后一個處理
cat a.txt | grep -ni hello 把a(bǔ).txt的文件內(nèi)容傳遞給grep過濾,grep過濾出所有hello字段,-n表示顯示行號,-i表示不區(qū)分大小寫
也可以直接使用:
grep -n aaa /home/a.txt --在home文件下的a.txt查找含有aaa字符的行數(shù)(區(qū)分大小寫匹配aaa)
統(tǒng)計出現(xiàn)的次數(shù) |wc -l
如:
grep -n You README |wc -l輸出: 這樣只會輸出一個總次數(shù)數(shù)字了
6壓縮與解壓
習(xí)慣上以.tar后綴代表tar包,用xxx.tar.gz或.tgz代表gzip壓縮過的tar文件,用.tar.bz2代表bzip2壓縮過的tar文件。
tar
打包:將一大堆文件或目錄變成一個總的文件【tar命令】
壓縮:將一個大的文件通過一些壓縮算法變成一個小文件【gzip,bzip2等】
只是打包動作,相當(dāng)于歸檔處理,不做壓縮;解壓也一樣,只是把歸檔文件釋放出來。
tar [主選項(xiàng)+輔選項(xiàng)] 文件們或目錄
主選項(xiàng):【一條命令以下5個參數(shù)只能有一個】
-c: --create 新建一個壓縮文檔,即打包
-x: --extract,–get解壓文件(解壓的時候使用)
-t: --list,查看壓縮文檔里的所有內(nèi)容
-r:–append 向壓縮文檔里追加文件
-u:–update 更新原壓縮包中的文件
輔助選項(xiàng)(可多個):
-v:顯示操作過程!這個參數(shù)很常用
-f:使用文檔名,注意,在f之后要立即接文檔名,不要再加其他參數(shù)!
-z:是否同時具有g(shù)zip的屬性?即是否需要用gzip壓縮或解壓?一般格式為xxx.tar.gz或xx.tgz
-j:是否同時具有bzip2的屬性?即是否需要用bzip2壓縮或解壓?一般格式為xx.tar.bz2
常用組合為:
將img1和img2兩個文件夾打包成img.tar,僅打包不壓縮
將img1和img2兩個文件夾打包成img.tar.gz,打包后,以gzip壓縮
tar -zcvf img.tar.gz img1 img2解壓:tar -tf img.tar這個不解壓直接查看
tar -xvf file.tar //解壓 tar包
gzip、gunzip、zip、unzip
gzip 是linux中常見的壓縮/解壓工具,最常見的使用對象是*.gz格式的文件
System.out.println("寫得可還行?收藏再看吧,點(diǎn)個贊吧,分享下吧"); echo("關(guān)注公號【Java方向盤】 https://yourbatman.cn https://wangpan.yourbatman.cn"); console.log("私聊【方向盤】:fsx1056342982");我是方向盤(YourBatman、方哥):一個前25年還不會寫Hallo World、早已畢業(yè)的大齡程序員。網(wǎng)癮失足、清考、延期畢業(yè)、房產(chǎn)中介、保險銷售、送外賣…是我不可抹滅的黑標(biāo)簽
- 🎓2013.07 清考、畢業(yè)答辯3次未通過、延期畢業(yè)
- 🏷2013.08-2014.07 寧夏中介公司賣二手房1年,畢業(yè)后第1份工作
- ??🏷2014.07-2015.05 荊州/武漢,泰康人壽賣保險3月、餓了么送外賣2月,還有炸雞排、直銷等第2345份工作
- 🏷2015.08 開始從事Java開發(fā),闖過外包,呆過大廠!多年架構(gòu)經(jīng)驗(yàn),任基礎(chǔ)架構(gòu)/中間件團(tuán)隊負(fù)責(zé)人
- 🏷2021.08 因“雙減政策”失業(yè)!歷經(jīng)9面,終獲美團(tuán)外賣L8的offer
- 🙅🏻?♀?Java架構(gòu)師、Spring開源貢獻(xiàn)者、CSDN博客之星年度Top 10、領(lǐng)域建模專家、寫作大賽1/2屆評委
- 📚將出版書籍《Spring奇淫巧技》,致力于國內(nèi)zui好、zui具深度、zui實(shí)用的專欄,為市場貢獻(xiàn)微薄之力
- 現(xiàn)在寫純粹技術(shù)專欄(公號后臺回復(fù)專欄列表),不嘩眾取寵。如果你也有共鳴,可加我好友(fsx1056342982)一起進(jìn)步
總結(jié)
以上是生活随笔為你收集整理的【方向盘】达到Linux第三阶段的常用命令笔记记录---PartⅠ的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 导出 EXecl ,导出word,
- 下一篇: linux 配置局域网内部www服务器,