本文將為大家詳細介紹Linux常用的指令、示範以及一些基礎知識的講解
語法:ls [選項] [目錄]
功能:ls有多個選項,對於目錄,該指令列出該目錄下的所有子目錄與檔案。對於文件,將列出文件名以及其他資訊
ls不帶選項預設顯示目前目錄下的文件
選項:
#-l
:以清單的形式列出文件詳細資訊
在Linux系統中,不以檔案後綴區分檔案類型,而是以第一個字元標識檔案類型,不管是檔案後綴是.c
還是.txt
或是其他後綴,只有是以-開頭的就是普通檔案
我們今天重點放在前面的兩類檔案
單一普通檔案就可以分很多種,為了相容windows同時便於我們大多數linux的使用者區分檔案的不同,我們還是習慣透過後綴來表示不同檔案的類型。但有的文件必須加後綴,例如用c語言寫的
.c
文件,需要特殊處理,以後綴區分類型
還有一些其他的選項就不示範了,大家下去可以嘗試一下
功能:檢視檔案類型
語法:file [檔案]
[king@VM-12-11-centos ~]$ file cat.txt cat.txt: UTF-8 Unicode text #类型是文本文件 [king@VM-12-11-centos ~]$ file ret #类型是目录文件 ret: directory
語法:pwd
功能:顯示目前路徑
功能:顯示目前使用者
兩種寫法
功能:切換路徑
用法:cd [想要切換的路徑]
Linux是以多叉樹的結構管理檔案的,磁碟上的檔案和目錄被組成一棵目錄樹,每個節點都是目錄或檔案。根目錄:/
當我們需要找一個檔案時,就必須知道文件所在路徑和文件名,例如尋找text.c
文件,因為每個節點只有一個父親節點,從根目錄出發到text.c
文件的路徑是唯一的。完整的描述文件位置的路徑就是絕對路徑,絕對路徑能唯一標識一個文件,上面的pwd指令顯示的就是絕對路徑
而相對路徑是:自己相對於目標位置而言的路徑,不具有唯一性,我們可以從不同的位置找到檔案
#絕對路徑:從跟目錄出發到指定檔案的路徑,能唯一標識一個檔案
#相對路徑:從某個檔案出發到指定檔案的路徑,不能唯一標識一個檔案
#cd指令就可以透過相對路徑和絕對路徑的方式進行路徑切換
可以透過絕對路徑切換到指定目錄
也可以通过相对路径切换,点点表示上一级路径,cd ..
切换到上一级目录,cd ../../
切换到上上级路径
[king@VM-12-11-centos Linuxclass]$ pwd /home/king/Linuxclass [king@VM-12-11-centos Linuxclass]$ cd classcode [king@VM-12-11-centos classcode]$ ls a.out ret.txt test test.c [king@VM-12-11-centos classcode]$ cd test [king@VM-12-11-centos test]$ cd ../../p1 #切换到上上级目录的p1路径下 [king@VM-12-11-centos p1]$ pwd /home/king/Linuxclass/p1
有的小伙伴可能就有疑问了,cd ..
可以切换到上一级路径,那么cd .
有什么用呢?我们本来就在当前目录下,不需要切换啊。
这里我们用vim编写一个
hello Linux
的代码,通过gcc编译,生成a.out的可执行程序,而我们要运行可执行程序就需要路径和文件名,用点就可以表示它的路径了,相比于下面用绝对路径方便很多
cd还有两个选项
[king@VM-12-11-centos Linuxclass]$ pwd /home/king/Linuxclass [king@VM-12-11-centos Linuxclass]$ cd ~ #cd ~进入工作目录,就是用户的路径下 [king@VM-12-11-centos ~]$ pwd /home/king [king@VM-12-11-centos ~]$ cd - #cd -返回最近一次访问的路径 /home/king/Linuxclass
语法:which [指令]
功能:查看指令的系统路径和相关信息
[king@VM-12-11-centos Linuxclass]$ which ls alias ls='ls --color=auto' #alias:给指令取别名 /usr/bin/ls #我们的指令都是系统简化过的 [king@VM-12-11-centos Linuxclass]$ which ll alias ll='ls -l --color=auto' #ll可以代替ls -l /usr/bin/ls [king@VM-12-11-centos Linuxclass]$ which cd #同时我们发现指令都是在bin目录下的 /usr/bin/cd
指令本质上就是程序,Linux中,指令、命令、工具都是可执行程序 ,都存放在普通文件中,linux下一切皆文件,我们的指令都在bin目录下
功能:新建文件,更改文档或目录的日期,包括存取时间和更改时间,我们先了解新建文件,关于更改目录日期我们在文章的最后介绍
需要注意的是touch创建的是普通文件,不是目录文件,所以不能cd进入
[king@VM-12-11-centos test]$ touch file1 file2 file3 #touch可以连续创建多个文件 [king@VM-12-11-centos test]$ touch file4 #创建单个文件 [king@VM-12-11-centos test]$ ls file1 file2 file3 file4
功能:新建目录文件
mkdir也可以同时创建多个目录文件,cd可以进入,但是不能在一个目录文件下再创建多个子目录,这里就显示无法创建
选项-p:递归建立多个子目录
这里的tree指令是以树状显示文件,需要用yum下载
yum intsall -y tree
如果我们是普通用户,需要在前面加sudo, sudo可以短暂提升权限,以root的身份执行相应指令
单独su表示切换为root用户,需要输入root用户的密码
[ret@VM-12-11-centos ~]$ su Password: #输入root用户密码 [root@VM-12-11-centos ret]# whoami #切换为root用户 root [root@VM-12-11-centos ret]# su ret #root用户可以直接切换成指定用户,不需要输入用户密码 [ret@VM-12-11-centos ~]$ whoami #现在我们就切换到用户ret了 ret
如果我们sudo yum install -y tree
显示类似如下的指令,表示当前用户没有添加信任关系
需要以root的身份帮用户添加信任关系,我们将身份切换为root用户,执行如下指令即可添加信任关系,之后我们就可以sudo 了
echo 'xxx ALL=(ALL) ALL' >> /etc/sudoers (其中xxx代表用户名)
功能:删除空目录 ,也就是不存放其他文件的目录
这里p1不为空,所以无法删除,如要借助rm指令
我们删除文件一般都用rm指令,rmdir有点鸡肋
功能:删除目录或文件
选项:
删除目录要带r选项,此时我们的p1/p2/p3就删除了
如果我们想删除目录中的所以文件而不想删除目录,直接加通配符*
切记别把根目录给删除
rm -rf / #切记不要使用,递归强制删除根目录,可能会把系统干崩
linux中有很多的指令,如果我们不记得某个指令的使用,可以man一下,问问那个男人
选项:
1 是普通的命令
2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文 件)
3 是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件
5 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6 是给游戏留的,由各个游戏自己定义
7 是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8 是系统管理用的命令,这些命令只能由root使用,如ifconfig
9 内核例程
同样man需要我们下载 ,普通用户加sudo
yum install -y man-pages
man不加选项,默认解释指令
[king@VM-12-11-centos file11]$ man ls
q退出当前界面
[king@VM-12-11-centos file11]$ man 3 printf #我们可以查看printf库函数
语法:cp [选项] [源文件] [目标文件] [指定目录]
功能:复制文件或目录
常用选项:
-f 强行复制文件或目录, 不论目的文件或目录是否已经存在
-r 递归处理,将指定目录下的文件与子目录一并处理。
我們複製檔案file11,同時命名為file
#預設複製到目前目錄下,也可以最後指定目錄
功能:移動檔案或重新命名檔案
#用法:mv [選項] [原始檔案] [目標檔案]
選項:
-f :force 強制的意思,如果目標檔案已經存在,不會詢問而直接覆寫
-i :若目標檔案 (destination) 已經存在時,就會詢問是否覆寫!
這裡我們將文件file11移到file目錄下
#如果mv後面跟的不是文件,而是檔案名,就會將檔案重新命名。另外,搜尋公眾號Linux就該這樣學後台回覆“猴子”,獲取一份驚喜禮包。
例如將檔案file11重新命名為change
功能:查看檔案內容
語法:cat [選項] [檔案]
選項:
-b :對非空白輸出行編號
#-n :對輸出的所有行編號
-s :不輸出多行空白行
功能:將字串顯示到標準輸出,也就是螢幕上,echo預設換行
那我們可以將字串寫入檔案嗎?
答案是可以的,透過重定向,字串後面加上> 符號和檔案名,就可以將本該顯示到標準輸出的字串,寫入檔案中,如果檔案不存在,就會自動建立文件,這就是輸出重定向
將本該顯示到螢幕上的字串寫入目標檔案中,同時輸出重定向會清空檔案原始內容再重新寫入
在此寫入時,之前的hello Linux已近被清空了
#想要保留之前的內容並寫入就需要追加重定向> 符號變成>> 符號
#cat指令後面不加文件,預設從鍵盤讀取內容並回顯到顯示器上,也就是螢幕上
之前cat显示文件内容就是通过输入重定向显示的
[king@VM-12-11-centos ~]$ cat < file #这个 < 符号可以省略 AAAAAAA BBBBBBB CCCCCCC
功能:和cat类似,一般用于查看日志,内容比较长的文件
选项:
-n :对行编号
q :退出more
比如这里我写一个内容从0-1000行的文件
关注公众号:【Linux就该这样学】,在公众号中回复:Linux
count=0; while [ $count -le 1000 ]; do echo "hello ${count}"; let count++; done > cat.txt
more会先显示一部分内容,按回车就可以继续读取内容,按q退出,但more有一个弊端,只能往下翻,不能往上翻,所以我们一般不用more指令
功能:查看文件内容,less用法比more更具有弹性,可以使用 [pageup][pagedown]
(前后按键)等按键的功能来往前往后翻看文件,而且less在查看之前不会加载整个文件。
选项:
-i :忽略大小写
-N :顯示行號
#/字串:向上搜尋字串的內容
?字串:向下搜尋字串的內容
#n :重複前一個搜尋(與/ 或?有關)
N:返向重複前一個搜尋(與/ 或?有關)
#q:退出less
#[king@VM-12-11-centos ~]$ less cat.txt
我们输入 /3向上搜索字符3,less就会帮我们标记字符3的内容
还有其它选项大家可以直接尝试,这里就不在演示了,我们q退出less界面
牛逼啊!接私活必备的 N 个开源项目!赶快收藏吧
功能:显示文件内容的开头到标准输出,也就是屏幕上,head不加参数默认显示前10行
选项:
-n1dcc53fc8cc7b2478796660caa67152b
[king@VM-12-11-centos ~]$ head cat.txt #默认输出前10行 hello 0 hello 1 hello 2 hello 3 hello 4 hello 5 hello 6 hello 7 hello 8 hello 9 [king@VM-12-11-centos ~]$ head -n5 cat.txt #指定输出前5行 hello 0 hello 1 hello 2 hello 3 hello 4 [king@VM-12-11-centos ~]$ head -5 cat.txt # n可以省略 hello 0 hello 1 hello 2 hello 3 hello 4
功能:用于显示指定文件末尾内容,我们一般查看日志时肯定是查看最新的内容,也就是从尾部开始查看,tail就能很好的帮助我们查看最近的内容
选项:
-f :循环读取
-nbdaa72d45a486872e32cf8bb600e37b8
:显示行数
tail - f filename
会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容,非常适合查看日志
[king@VM-12-11-centos ~]$ tail cat.txt #tail不加行号默认显示尾10行 hello 991 hello 992 hello 993 hello 994 hello 995 hello 996 hello 997 hello 998 hello 999 hello 1000 [king@VM-12-11-centos ~]$ tail -n5 cat.txt #指定显示尾5行 hello 996 hello 997 hello 998 hello 999 hello 1000 [king@VM-12-11-centos ~]$ tail -5 cat.txt #n可以省略 hello 996 hello 997 hello 998 hello 999 hello 1000
那我们可以显示文件的头和尾,如果要显示文件中间的内容怎么办呢?
比如我们要显示第100行到110行,有两种方法:
通过重定向将前110行写入一个tmp临时文件,然后在读取尾10行,不过这种方法需要重新创建文件,不进浪费空间效率也低
答案是有的,第二种方法借助管道操作
使用管道时,默认隐式发生了重定向
# 符号 | 表示管道,通过管道将执行的结果传给下一条指令 [king@VM-12-11-centos ~]$ head -110 cat.txt | tail -10 hello 100 hello 101 hello 102 hello 103 hello 104 hello 105 hello 106 hello 107 hello 108 hello 109
格式
[king@VM-12-11-centos ~]$ date #date默认显示 Fri Jan 28 16:55:54 CST 2022 [king@VM-12-11-centos ~]$ date +%s #date +%s显示时间戳 1643360162 [king@VM-12-11-centos ~]$ date +%F%X #按年月日 时分秒的格式显示当前时间 2022-01-2804:56:08 PM [king@VM-12-11-centos ~]$ date +%F%X@1643360162 # @时间戳,将时间戳转换成标准时间 2022-01-2804:56:27 PM@1643360162
我们可以加_以示区分,但不能是空格,这种写法是错误的
功能:檢視行事曆
選項:
-3 顯示系統前一個月,當月,下個月的月曆
#-y 顯示目前年份的年曆
cal預設顯示目前月的月曆
[king@VM-12-11-centos ~]$ cal -y 2021 #也可以指定年份显示2021的年历
功能:在文件数中查找文件,并做出相应的处理(可能会访问磁盘),find指令会帮我们在当前目录以及所有该目录的所以子目录下查找相应的文件,当我们遍历一个大的文件系统时,可能会花费一点时间,然后显示相应的文件信息,但当我们下一次再用find查找时,就会快很多
find的选项非常多,这里列举一个,想了解更多可以man find
选项:-name :按照文件名查找
我们在根目录下查找文件名为text的文件,不过这里很多都是permission denied
,因为普通用户的权限不够,有很多文件都不能读取。另外,搜索公众号后端架构师后台回复“架构整洁”,获取一份惊喜礼包。
我们在自己的目录下查找文件名为file的文件,就会把该目录下的所以子文件名为file的显示出来
指定目錄
語法:find [起始目錄位置] [-name][filename]
功能:文字行過濾,搜尋字串
常用選項:
-i:忽略大小寫,大小寫視為相同
-n:輸出行號
-v:反向選擇
#還是拿那個檔案內容為0-1000行的檔案cat.txt
範例
#我們在顯示檔案內容時,將帶'90'的字元都顯示出來
我們利用輸出重定向再往文件內寫入兩行,-i忽略大小寫,就可以將這兩行都搜尋出來
同时grep指令也支持正则表达式,可以搜索 任意我们想要搜索的字符,大家下去可以自行尝试
我们先追加两行到cat.txt
中,用正则表达式就可以将这两行搜索出来
[king@VM-12-11-centos ~]$ echo "he9999" >> cat.txt [king@VM-12-11-centos ~]$ echo "he9290" >> cat.txt [king@VM-12-11-centos ~]$ cat cat.txt | grep 'he[0-9]*$' he9290 he9999
zip语法:zip [压缩后的文件名.zip] [目标文件]
功能:将文件压缩成.zip格式
常用选项:
-r :將指定目錄下的所有檔案和子目錄一併處理,按遞歸方式
unzip語法:unzip [壓縮檔案.zip]
#-d:壓縮到指定路徑下
如果我們不加-r選項,直接壓縮檔案
我們以壓縮test檔為例,其中test還有3個子目錄file,file22和file33,壓縮後的file.zip大小只有160
解壓縮後發現test檔是空目錄,沒幫我們將所以檔案都壓縮過來
所以我們需要帶選項-r,解壓縮後我們發現cur.zip的大小為774,明顯大於之前的160
加上選項-d,將cur.zip解壓縮到指定路徑ret檔中
和zip/unzip
類似,不過解壓縮後的檔案字尾為.tgz
#功能:完成打包,壓縮,解壓縮
選項:
#通常將-czf
和-xzf
配合使用,用來壓縮和解壓,這裡我們同樣將壓縮後的檔案cur.tgz
移到test目錄下進行解壓縮
cur.tgz透過
-C選項指定路徑,將檔案解壓縮到ret目錄中
前面的操作都是解壓縮和壓縮,而打包是將需要壓縮的所以文件都打包在一起,可以理解將文件都整理起來,文件的大小沒有改變
功能:可以理解為計算器
#直接將計算結果顯示到螢幕上,Ctrl c
退出
功能:取得電腦與作業系統相關資訊
選項:
-a :輸出詳細信息,依序為核心名稱,主機名,核心版本號,核心版本,硬體名,處理器類型,硬體平台類型,作業系統名稱
-r :輸出核心版本號碼
#uname預設輸出核心名稱,hostname預設輸出主機名,實際上我們只需要-a選項就夠了
核心版本號:3表示主版本號,10表示副版本號,其中副版本號為偶數:穩定版內核為奇數:測試版內核,我們伺服器的使用的內核版本一般都不是最新的,而是一些已經使用過多年的經典版本,對全新的版本,需要經過歲月的考驗,證明內核是穩定,安全,高效的才可能使用
#選項:
-h:將系統的服務停掉後立即關機
-r:將系統服務停掉後來重新啟動
- -t second:-t [秒數]
,即過幾秒鐘後關機
對於伺服器呢我們就不需要關機了
這裡我們補充touch指令的更改時間
在介紹touch修改檔時間前我們先介紹一個指令
功能:檢視檔案詳細資訊
用法:stat [檔案]
File
:顯示檔案名稱#Size
:顯示檔案大小#Blocks
:檔案使用的資料塊總數#IO Block
:IO區塊大小regular file
:檔案類型(常規檔案)#Device
:裝置編號Inode
:Inode號Links
:連結數Access
:檔案的權限#Gid、Uid
:檔案所有權的Gid和UidLinux下的三個時間
Access Time
:簡寫為atime,表示檔案最近一次被存取時間。 Modify Time
:簡寫為mtime,表示檔案內容最近一次被修改時間Change Time
:簡寫為ctime,表示檔案屬性最近一次被修改的時間atime:當我們過一段時間cat查看檔案後,stat再次查看就會發先atime時間發生變化,當然對於2.6之後的內核,對atime的刷新時間重設了規則,atime不會立即被更新,而是一定時間間隔後OS才會自動更新時間。因為相較於修改文件內容和屬性,查看文件是最高頻的,如果頻繁刷新atime會導致效率降低
對mtime:我們寫入hell後,它的三個時間都發生變化,mtime的改變不一定會影響atime,但是ctime可能會隨之改變,因為修改文件內容時,有可能會修改檔案的屬性,例如寫入資料時檔案的大小屬性會被修改
ctime:更改檔案屬性的最近時間,這一行表示的就是檔案屬性
chgmod指令可以改變檔案的存取權限,也就改變了檔案屬性
選項:
--no-create
沒有建立任何文件。 常用的就是-d,-a -m,而touch指令預設修改所有時間,這裡的touch是對已經建立的檔案操作
[Tab]
:指令補全,按一次或兩次,會將以wh開頭的指令顯示到螢幕上
[c]
:終止目前程序,例如螢幕上一直輸出字符,寫了一個死循環代碼,就可以Ctrl c
終止
[Ctrl d]
:取代exit切換身份,多次Ctrl d
直接退出
[Ctrl r]
:根據關鍵字尋找歷史指令。我們輸入r,自動轉換換成歷史指令
[page up page down]
:上和下,可以翻閱歷史指令,我們可以直接翻轉最近輸入過的指令,非常方便
安裝與登入指令:login、shutdown、halt、reboot、install、mount、umount、chsh、 exit、last
檔案處理指令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln
系統管理相關指令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab
網路操作指令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup
系統安全相關指令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who
#其它指令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode
以上是萬字詳解 Linux 常用指令(值得收藏)的詳細內容。更多資訊請關注PHP中文網其他相關文章!