我在此使用的是VMware虚拟机安装的Ubuntu 20.04 LTS。
Shell是linux系统的用户界面。Shell即是一个命令解释器,它解释由用户输入的命令并且把它们送到内核去执行。又是一种程序设计语言,具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,允许用户编写由shell命令组成的程序。
在ubuntu系统桌面中按下Ctrl+Alt+T组合键,可打开shell(Terminal窗口),参见下图:
其中$是终端命令提示符
@和:是分隔符号,#或$是命令提示符,如果是超级用户(root 用户),提示符就是#;如果是普通用户,提示符就是$。
@前面是用户名,这里是wang
@后至:之间是表示当前系统的主机名(计算机名),这里是wang-virtual-machine
:至#或$之间是用户当前所在的目录,这里是~,~代表home 目录。
顺便指明,终端下默认的复制(copy)粘贴(viscidity,paste)快捷键是 Ctrl+Shift+C,Ctrl+Shift+V。
Linux中文件扩展名
windows里通过扩展名来区分文件类型的。linux里文件扩展名和文件类型没有关系。但为了容易区分和兼容用户使用windows的习惯,我们还是会用扩展名来表示文件类型。举例如下:
☆ 源码.tar、.tar.gz、.tgz、.zip、.tar.bz表示压缩文件,创建命令一般为tar,gzip,zip等。
☆ .sh表示shell脚本文件,通过shell语言开发的程序。
☆ .pl表示perl语言文件,通过perl语言开发的程序。
☆ .py表示python语言文件,通过python语言开发的程序。
☆ .html、.htm、.php、.jsp、.do表示网页语言的文件。
☆ .conf表示系统服务的配置文件。
☆ .rpm表示rpm安装包文件。
linux下文件的一些文件颜色的含义
☆绿色-->代表可执行文件,(绿色代表通行证的意思)呵呵
☆红色-->代表压缩文件
☆深蓝色-->代表目录
☆浅蓝色-->代表链接文件
☆灰色-->代表其它的一些文件
查看当前 Linux 的默认 Shell
echo $SHELL
可以通过 cat /etc/shells 来查看 linux 支持的 shell。
☆sh
sh 的全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。sh 是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 Shell。
☆bash
这是默认的 shell,,本教程也基于 bash 编写。bash 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。
在现代的 Linux 上,sh 已经被 bash 代替,bash是sh的增强版本。
☆dash
Debian Almquist Shell(dash),从NetBSD移植到Linux。Dash Shell 比 Bash Shell 小的多。
☆rbash
受限shell是LinuxShell限制一些bash shell中的功能,该限制很好地实现了命令以及脚本在受限shell中运行。 它为Linux中的bash shell提供了一个额外的安全层。
Ubuntu 20.04 LTS之shell的切换
可以在shell解释器中直接输入shell名称进行切换
输入exit退出
参见下图:
在终端命令行界面中可以使用与文件管理相关的命令
root用户具有系统中的最高权限。由于Ubuntu系统默认是没有激活root用户的,需要我们手工进行操作,在命令行界面下,或者在终端中输入如下命令:
sudo passwd 或者sudo passwd root
输入当前登录电脑上的密码。然后设置root密码,重复密码。参见下图
提示:sudo是Ubuntu系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。
可以使用”sudo adduser 用户名”新建用户。
删除用户使用“userdel 用户名”命令,最好将它留在系统上的文件也删除掉,可以使用“userdel -r 用户名”来实现。
重新设置普通用户密码
passwd 用户名
重新设置root用户密码
sudo passwd root
详细查看Ubuntu版本号:
lsb_release -a
参见下图:
简洁查看ubuntu版本
cat /etc/issue
注意cat后有空格,参见下图:
显示linux的内核版本和系统是多少位的:X86_64代表系统是64位的
uname -a
参见下图:
显示linux的内核版本和gcc编译器版本号及linux变种的版本
cat /proc/version
参见下图:
linux中cat是 concatenate 的缩写,此令用以将文件、标准输入内容打印至标准输出,常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。
注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清显示的内容。因此,一般用more等命令分屏显示。为了控制滚屏,可以按Ctrl+S停止滚屏;Ctrl+QQ回复滚屏;Ctrl+C终止该命令,并回到Shell提示符状态。
还能查看系统信息。
查看当前工作目录命令pwd
新建目录(文件夹)命令mkdir
例如、在当前工作目录中新建子目录test
mkdir test
列出文件夹下包含的文件信息命令ls
用cd命令进入/dev目录
列出文件的详细信息,如文件的类型、读写权限列表,创建者,创建时间,等,ls -l
其中drwxr-xr-x说明
第一个符号表明文件类型。在Linux系统中,一切皆文件。Linux系统中的文件类型:
文件类型 |
文件类型标识 |
普通文件 |
- |
目录文件 |
d |
块设备文件 |
b |
字符设备文件 |
c |
管道文件 |
p |
套接字(socket)文件 |
s |
符号链接文件 |
l |
后面9位标明文件权限,第一个三位,是所有者(user)拥有的权限,接着3位代表的是组群(group)拥有的权限,最后3位代表其他人(other)拥有的权限。r 读权限read ,w 写权限write ,x 操作权限execute。
更改当前的工作目录命令cd
例如、更改当前的工作目录为 test
cd test
删除文件或目录命令rm
例如、删除 test目录
rm -r test
例如、删除test01.c文件
rm test01.c
查看文件内容cat
例如、查看文件test01.c内容
cat test01.c
查看所有进程
ps -ef
实时显示进程状态
top
按ctrl+c可以退出显示进程状态
查看环境变量
Env
搜索文件
根据 文件或目录名称 搜索,格式如下:
find <指定目录> <指定条件> <指定动作>
<指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。
<指定条件>: 所要搜索的文件的特征。-name或者-iname 搜索字符,-name区分大小写,-iname一个不区分大小写。通配符*、?,*代表0至多个任意字符,?代表1个任意字符。
<指定动作>: 对搜索结果进行特定的处理。 如-ls 表示显示它们的详细信息,
如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件)
例如
find . -name "*.txt" -ls
搜索当前目录中,所有.txt的文件,并显示它们的详细信息。参见下图:
又如find . -name "*.txt" -size +100c
其中-size 大小描述
+n 表示大于,-n 表示小于,n 表示等于;c 表示字节,k表示千字节,M表示兆字节。
清屏
clear
清屏后,提示符移到左上角。
命令帮助的查看
按内置(builtin、内建)命令和非内置命令有所不同。可以使用type 命令名 分辨之:
如
type cd
type su
内置(builtin、内建)命令帮助的查看:
help 命令名
或
命令名 --help
如
help cd
非内置命令帮助的查看:
命令名 --help
如
su –help
【特别提示、对于非内置命令查看帮助,可用 命令名 --help,而用 help 命令名,无效果,参见下图:
】
压缩与解压
首先要了解两个基础概念
打包:将一堆文件或目录什么的变成一个总的文件。
压缩:将一个大的文件经过某种压缩算法变成一个小文件。
为什么要区分这两个概念呢?因为Linux中的很多压缩程序只能针对一个文件进行压缩,所以当你想要压缩一大堆文件时,首先需要打个包,然后压缩。
最常用的打包命令是 tar,使用 tar 程序打出来的包我们常称为 tar 包,tar 包文件的命令通常都是以 .tar 结尾的。生成 tar 包后,就可以用其它的程序来进行压缩了,该命令的基本格式为:
tar [选项] 源文件或目录
常用选项及含义
选项 |
含义 |
-c |
产生新的包。 |
-f 包名 |
指定包的文件名。包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名; |
-v |
显示处理(打包)的过程; |
-u |
更新原压缩包中的文件,仅将较新的文件附加到存档中; |
-r |
向压缩归档文件末尾追加文件; |
在使用 tar 命令指定选项时可以不在选项前面输入“-”。例如,使用“cvf”选项和 “-cvf”起到的作用一样。
当 tar 命令用于对 tar 包做解打包操作时,该命令的基本格式如下:
tar [选项] 压缩包
解打包常用选项及含义
选项 |
含义 |
-x |
对 tar 包做解打包操作。 |
-f 包名 |
指定要解压的 tar 包的包名。 |
-t |
只查看 tar 包中有哪些文件或目录,不对 tar 包做解打包操作。 |
-C 目录 |
指定解打包位置。 |
-v |
显示处理(解包)的过程。 |
例
tar -cf all.tar *.jpg
这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
tar -rf all.tar *.gif
这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
tar -uf all.tar logo.gif
这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
tar -tf all.tar
这条命令是列出all.tar包中所有文件,-t是列出文件的意思
tar -xf all.tar
这条命令是解出all.tar包中所有文件,-x是解开的意思
tar -cvf ana.tar anaconda-ks.cfg /tmp/
把anaconda-ks.cfg文件和/tmp目录打包成ana.tar文件包。tar命令也可以打包多个文件或目录,只要用空格分开即可。
tar -xvf ana.tar
解打包到当前目录下。
tar -xvf ana.tar -C /tmp
把文件包ana.tar解打包到/tmp/目录下,如果想要指定解压位置,则需要使用 "-C(大写)" 选项。
Linux用户身份切换
在日常工作中,尽量使用普通用户账号操作,当需要root权限的时候再通过身份切换的方式切换至root管理员,这样能保证系统的安全性。使用普通账号的安全性主要体现在两个方面:
防止因误操作而删除了系统重要文件;
创建一些系统账户专门用来启动某些服务,这样即使该服务被攻陷,系统仍然是安全的。
方式一:su
该命令可以将身份切换至指定账户,但需要输入该账户的密码。
命令格式
su [-lm] [-c 命令] username
若不加username则表示切换至root
使用su和su -均能切换至root账户,但不加-会使很多变量仍然保持切换前用户的变量,而加了-之后则参数将会完全变成root的参数,尤其是环境变量PATH,从而能够直接使用某些命令,而无需指定绝对路径。
若只想执行一个root权限才能执行的命令的时候,可以将命令直接写在-c的后面,这样无需切换身份,如:
su -c vim /etc/shadow
方式二:sudo
使用su切换身份需要直到root账号的密码,这样并不安全。为了提高安全性,我们可以使用sudo来执行需要root权限的功能。
sudo由root指定,指定后用户只需输入自己账号的密码就能申请到root权限,而无需告诉任何人root密码,因此安全了不少。
命令格式
sudo [-b] [-u username] 需要执行的命令
-b:使后续的命令自行执行,而不与目前的shell产生影响。
shell脚本编程
注释符号#
放在需注释内容的前面。注意#!不要和混淆,#!用于指明脚本的解释器程序的路径,如#!/bin/bash、#!/bin/sh。
Shell变量
Linux Shell中的变量分为用户自定义变量,环境变量,位置参数变量和预定义变量。可以通过set命令查看系统中存在的所有变量。
返回变量 ${变量名}
删除变量用 unset 变量名
shell中默认把变量值当作字符串
age=19
age=${age}+1
echo ${age}
输出结果为19+1,而不是20,因为shell将其解释为字符串,而不是数学运算。参见下图:
可以用let命令使其进行数学运算,例如:
age2=19
let age2=${age2}+1
echo ${age2}
参见下图:
也可以用declare把变量定义为整型。例如:
declare -i age3=25
age3=${age3}+1
echo ${age3}
这里就用 -i 选项把age定义为整型的了。参见下图:
在shell中可以使用数组,例如:
array[0]=0
array[1]=1
array[2]=2
则array就是一个数组,也可以这样给数组初始化:
array=(0 1 2)
元素之间以空格分隔。
可以通过 ${array[$i]}来访问array中某个元素,${array[*]} 的返回值即数组的所有元素组成的串,${#array[*]} 的返回值即数组的元素个数,${array[*]:0:2} 返回第一个和第二个元素组成的串。0表示开始的位置,2表示要返回的元素个数,开始位置可以为0-2(0减去2)之类的,表示从倒数第二个元素开始。
Shell脚本通常都是以.sh 为后缀名的
编写一个Shell脚本文件,内容如下
#!/bin/bash
for ((i=0; i<10; i++))
do
arr[$i]=$i
done
for ((i=0; i<10; i++))
do
echo ${arr[$i]}
done
其中,脚本开头#!/bin/bash指定解析器。第一行的内容指定了shell脚本解释器的路径,而且这个指定路径只能放在文件的第一行。第一行写错或者不写时,系统会有一个默认的解释器进行解释。
我在此,保存名为test.sh
执行Shell脚本文件
使用指定的解释器程序执行脚本内容:例如:bash test.sh 、sh test.sh,这种不需要写解析器,并且不需要给脚本设置执行权限
脚本文件名前可以带绝对路径或相对路径。
如
bash /home/wang/test/test.sh
bash test/test.sh
参见下图:
shell脚本编程语法基础参见:
https://blog.csdn.net/qq_42322103/article/details/105205938
gedit 编辑器
在Linux下,很多程序员都推崇使用vi/vim、Emacs等命令行模式的编辑器,它们功能强大,不管有没有桌面环境都能使用,但需要使用者需要记忆很多命令和快捷键,熟练才能生巧。
gedit是一款简单实用的文本编辑器,界面优雅,支持语法高亮,它和Windows下的编辑器类似。Ubuntu(乌班图)可以使用以下方法启动编辑器:
☆在终端命令行中输入“gedit”,可打开一个空的文本编辑器。gedit命令格式,参见下图:
☆单击左下角的“显示应用程序”图标 ,找到文本编辑器图标 单击,也可打开一个空的文本编辑器。
在Linux操作系统中,有很多的文本编辑器,除上面介绍的gedit,又如nano,它一个简单的文本编辑器,nano命令格式,参见下图:
nano启动后,如下图:
其中^代表Ctrl,^x代表Ctrl+x组合键。