Linux基礎篇(6)小白如何學習Linux?初識shell之系統命令基礎(上)

##Linux基礎篇

前言:

若盛開 清風自來 心若浮沉 淺笑安然 

這句話出自三毛的隨筆 原句是∶

歲月極美 在於它必然的流逝 春花 秋月 夏日 冬雪 你若盛開 清風自來 心若浮沉 淺笑安然 

譯文是如果你足夠優秀  一切都會好起來的 有平穩的心態 坦然面對世事 

心態是一種意境 得之坦然失之則淡然 

笑口常開 好彩自然來!

不要把失去當成理所應當 從自身找找原因 當你足夠優秀 擺正你的心態 一切問題也就不再是問題 好好提升自己 讓自己越來越優秀 成爲那朵散發魅力的花 

一、Shell介紹

Shell中文意思貝殼 寓意類似內核的殼 Shell是指一種應用程序 這個應用程序提供了一個界面 用戶通過這個界面訪問操作系統內核的服務 簡而言之就是隻要能夠操作應用程序的接口都能夠稱爲SHELL 狹義的shell指的是命令行方面的軟件 廣義的SHELL則包括圖形界面

1.png

Shell是一個用C語言編寫的程序 它是用戶使用Linux的橋樑 Shell既是一種命令語言 又是一種程序設計語言

所以說 shell可以指兩層意思:

1)命令解釋器

python語言 <================> shell命令

python解釋器 <==============>  shell解釋器

操作系統 <==================> 操作系統

計算機硬件 <=================> 計算機硬件

sh(Bourne Shell)是一個早期重要的shell 1978年由史蒂夫·伯恩編寫 並同Version 7 Unix一起發佈

bash(Bourne-Again Shell)是一個爲GNU計劃編寫的Unix shell 1987年由布萊恩·福克斯創造 主要目標是與POSIX標準保持一直 同時兼顧對sh的兼容 是各種Linux發行版本標準配置的Shell 在Linux系統上/bin/sh往往是指向/bin/bash的符號鏈接

dash(Debian Almquist shell)一種Unix shell 它比Bash小 只需要較少的磁盤空間 但是它的對話性功能也比較少 它由NetBSD版本的Almquist shell (ash)發展而來 於1997年由赫伯特·許(Herbert Xu)移植到Linux上 於2002年改名爲dash

//sh 遵循POSIX規範:“當某行代碼出錯時 不繼續往下解釋”bash就算出錯 也會繼續向下執行

//sh 跟bash的區別 實際上是bash有沒開啓POSIX模式的區別

//簡單說 sh是bash的一種特殊的模式 sh就是開啓了POSIX標準的bash /bin/sh 相當於/bin/bash --posix

//在Linux系統上/bin/sh往往是指向/bin/bash的符號鏈接

// ln -s /bin/bash /bin/sh

我們可以SHELL實現對Linux系統的管理例如:

1.文件管理      2.用戶與權限管理      3.進程管理      4.磁盤管理      5.網絡管理      6.軟件管理

2)shell腳本

Shell腳本(shell script)是一種爲shell編寫的腳本程序 常說的shell通常是指 shell腳本 但shell合shell script是兩個不同的概念 通常說“shell變成”都是指shell腳本編程 不是指開發shell自身

GNU bash

Bash(GNU Bourne-Again Shell)是許多Linux平臺的內定Shell 事實上 還有許多傳統UNIX上用的Shell 像tcsh、csh、ash、bsh、ksh等等 Shell Script大致都類同 即命令大都通用 當您學會一種Shell以後 其它的Shell會很快上手 大多數的時候 一個Shell Script通常可以在很多種Shell上使用

bash是大多數Linux系統以及Mac OS X v10.4默認的shell bash具有極強的可移植性 它能運行於大多數Unix風格的操作系統之上 甚至被移植到了Microsoft Windows上的Cygwin系統中 以實現windows的POSIX虛擬接口 此外 它也被DJGPP項目移植到了MS-DOS上 bash的命令語法是Bourne shell命令語法的超集 數量龐大的Bourne shell腳本大多不經修改即可在bash執行 只有那些引用了Bourne特殊變量或使用了Bourne的內置命令的腳本才需要修改

bash的命令語法很多來自Korn shell (ksh)和 C shell(csh) 例如命令行編譯 命令歷史 目錄棧 ¥RANDOM和$PPID變量 以及POSIX的命令置換語法:$(...) GNU bash 作爲一個交互式的shell 按下TAB鍵即可自動補全已經部分輸入的程序名 文件名 變量名等等

POSIX

1)概念

POSIX(Portable Operating System Interface 可移植操作系統接口)是操作系統爲應用程序提供的接口標準

簡單來說 POSIX(主要是解決了應用程序在各個操作系統上兼容性這樣一個普遍的存在的問題 只要一個應用程序的開發是爲了在一個實現了POSIX模式的操作系統上運行 那麼這個應用程序就可以在所用實現了POSIX模式的操作系統上運行

2)POSIX定義

POSIX:(Portable Operating System Interface of Unix. 可移植操作系統接口)X表示其是對Unix API的傳承

POSIX標準由IEEE(電氣和電子工程師協會)發佈 定義了操作系統應該爲應用程序提供的接口標準 是IEEE爲要在各種UNIX操作系統上運行軟件而定義的一系列API標準的總稱

簡單可以理解POSIX標準是爲操作系統設計API時遵循的規範 一套規範的系統調用集

3)POSIX的誕生/解決的問題

POSIX的誕生和Unix的發展是密不可分的 當年最早的Unix 源代碼流傳出去了 加上早期的Unix不夠完善 於是之後出現了好些獨立開發的與Unix基本兼容但又不完全兼容的OS 通稱Unix-like OS 這樣的版本混亂的情況導致相互之間的競爭和不兼容之處越來越多 給軟件的可移植性帶來很大困難 對Unix的發展極爲不利

爲了提高兼容性和應用程序的可移植性 結束混亂局面 IEEE提出了POSIX標準 POSIX在源代碼級別上定義了一組最小的Unix(類unix)操作系統接口 這套標準涵蓋了很多方面 比如Unix系統調用的C語言接口 shell程序和工具、線程和網絡編程等 POSIX標準意在期望獲得源代碼級別的軟件可移植性 爲一個POSIX兼容的操作系統編寫的程序 可以在任何其他POSIX操作系統上編譯執行

POSIX現在已經發展成爲一個非常龐大的標準族 並不侷限於Unix 一些其他的操作系統如Microsoft windows NT Linux等都支持或者部分支持POSIX標準

4)POSIX標準的思路

問題:不同操作系統內核爲同一功能提供的系統調用(函數)是不同的 例如創建進程 Linux下是fork函數 windows下是createprocess函數 如果在Linux下寫了一個程序用到了fork函數 要往windows上移植就得把源代碼裏面得fork通通改成createprocess然後重新編譯

解決方法:定義POSIX標準 linux和windows實現基於POSIX標準 提供同樣的接口 例如定義創建進程的接口爲posix_fork(是咧名/非真實名字)且linux和windows都把各自創建進程的調用封裝稱posix_fork 都聲明在unistd.h裏 這樣程序員編寫應用時 只需要包含unistd .h 調用這個POSIX標準中定義的API接口 posix_fork函數 即可實現源代碼級別的可移植

二、shell交互式環境

登錄用戶後進入解釋器bash的交互式環境 可以敲命令 交互式環境的命令提示符如下

[root@xxx ~]#               #號代表超級管理員用戶對應的命令行

[root@xxx ~]$               $號代表普通用戶對應的命令行

解析

root===》當前登錄的用戶

@===》分隔符

xxx===》主機名

~===》當前所在的路徑


創建普通系統用戶

[root@xxx ~]# useradd fly

交互式設置密碼

[root@xxx ~]# passwd fly

Changing password for user fly.

New password: 123

BAD PASSWORD: The password is shorter than 8 characters

Retype new password: 123

passwd: all authentication tokens updated successfully.

非交互式設置密碼

[root@xxx ~]# echo "123" | passwd --stdin fly

三、shell命令語法

命令語法的3部分

   1、命令:要執行的操作(必選)

   2、選項:如何具體執行操作 通常以-,--,+開頭(可選)

   3、參數:具體操作的對象(可選)

示例1

ls

ls /root

ls -l /root

示例2

[root@web02 ~]# date

Wed Nov 25 16:27:16 CST 2020

[root@web02 ~]# date +%F

2020-11-25

[root@web02 ~]# date -s "2022-11-11 11:11:11"

Fri Nov 11 11:11:11 CST 2022


示例3

[root@web02 ~]# cat /etc/redhat-release 

CentOS Linux release 7.8.2003 (Core)

[root@web02 ~]# uname -r

3.10.0-1127.el7.x86_64

[root@web02 ~]# uname -m

x86_64

[root@web02 ~]# uname -a

Linux web02 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章