分配系统资源和协调计算机内部的所有详细信息的计算机程序被称为操作系统或内核。
hardware:硬件,比如屏幕显示,键盘输入等
kernel:内核,负责连接硬件和内核,只有通过内核才能操作硬件
shell:可以理解为一个框架(更多的翻译将其翻译为壳),通过这个框架外层的应用可以调用内核
application programs:应用程序,比如数据库(DBMS),邮件服务(mail)等,他们可能需要使用到硬件,这时候就要通过shell去调用内核,继而操作硬件。
内核:内核是操作系统的核心。它与硬件和大多数任务像内存管理任务调度和文件管理交互。
Shell:shell 是用于处理您的请求的实用程序。当您在您的终端键入命令时,Shell 将命令解释并调用你想要的程序。Shell 使用标准语法的所有命令。C Shell, Bourne Shell 和 Korn Shell 是最著名的 shell ,适用于大多数 UNIX 变体。
命令和实用程序:有各种各样的命令和实用程序可供您使用。cp, mv, cat 和 grep 等是命令和实用程序的几个例子。有超过 250 标准命令,再加上通过第三方软件提供的其他命令。所有的命令都跟着各种可选的选项。
文件和目录:在 UNIX 中的所有数据被都组织到文件中。所有文件被都组织到目录中。这些目录被组织成一个称为文件系统的树状结构。
图形模式与文字模式的切换方式
Linux预设提供了六个命令窗口终端机让我们来登录。
默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 来切换它们。
如果你安装了图形界面,默认情况下是进入图形界面的,此时你就可以按Ctrl + Alt + F1 ~ F6来进入其中一个命令窗口界面。
当你进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7 就回来了。
如果你用的vmware 虚拟机,命令窗口切换的快捷键为 Alt + Space + F1~F6. 如果你在图形界面下请按Alt + Shift + Ctrl + F1~F6 切换至命令窗口。
Linux 关机
sync 将数据由内存同步到硬盘中。
shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令>关机:
shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在>10分钟后关机,并且会显示在登陆用户的当前屏幕中。
Shutdown –h now 立马关机
Shutdown –h 20:25 系统会在今天20:25关机
Shutdown –h +10 十分钟后关机
Shutdown –r now 系统立马重启
Shutdown –r +10 系统十分钟后重启
reboot 就是重启,等同于 shutdown –r now
halt 关闭系统,等同于shutdown –h now 和 poweroff
Linux 系统中是通过 ssh 服务实现的远程登录功能,默认 ssh 服务端口号为 22。
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。
Linux 文件基本属性
ls- l #查看详细信息
从左至右用0-9这些数字来表示。
第0位确定文件类型,第1-3位确定属主(该文件的所有者)拥有该文件的权限。
第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该>文件的权限。
其中,第1、4、7位表示读权限,如果用"r"字符表示,则有读权限,如果用"-"字符表示,>则没有读权限;
第2、5、8位表示写权限,如果用"w"字符表示,则有写权限,如果用"-“字符表示没有写权>限;第3、6、9位表示可执行权限,如果用"x"字符表示,则有执行权限,如果用”-"字符表>示,则没有执行权限。
更改文件属性
chgrp [-R] 属组名文件名
# -R:递归更改文件属组,就是在更改某个目录文件的属组时,目录下的所有文件的属组都会更改。
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
九个权限分别是(1)user (2)group (3)others三种身份啦! 那么我们就可以藉由u, g, o来代表>三种身份的权限!
此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成r, w, x!也就是可以使用>底下的方式来看:
chmod u+x file
chmod u+[r/w/x] file
chmod g-[r/w/x] file
...
处理目录的常用命令
ls: 列出目录
cd:切换目录
pwd:显示目前的目录
mkdir:创建一个新的目录
rmdir:删除一个空的目录
cp: 复制文件或目录
rm: 移除文件或目录
mv: 移动文件与目录、文件重命名
你可以使用 man [命令] 来查看各个命令的使用文档,如 :man cp。
cp详解:
# mv [参数] 来源 目标
mv mvtest mvtest2
# cp [参数] 源头 目标
cp ~/.bashrc /tmp/bashrc
cp -i ~/.bashrc /tmp/bashrc
[root@www tmp]# rm -i bashrc
rm: remove regular file `bashrc'? y
** vi 文本编辑器**
vi 是老式的字处理器,使用vi [文件名]
进入编辑窗口,按键i
进入编辑模式。Esc
切换模式,有编辑模式和命令模式,按键Shift+:
进入命令模式。w
保存,q
退出,!
使命令强制执行。
vi
是系统自带的文本编辑器,用于写程序时并不方便。vim
用于程序开发的编辑器,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
不同Linux的发行版本时不一样的,如Ubuntu是apt-get install
,删除是apt-get remove
CentOS则是yum install
和yum -e
.
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
不同于gome桌面的GUI操作,shell是交互式的编程语言,用于操作Linux内核。Linux内核中都有shell解析器,因此可以直接解析shell命令或文本,文本需要声明。Linux shell脚本众多,Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数 Linux 系统默认的 Shell。
shell文本是一个可执行的程序,没有声明会被当作无效关键字。 运行Shell 脚本有两种方法:
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
# 必须带 / 是告诉系统路径下找.s的脚本并运行,必须带文件的后缀,不然会当路径处理
# 如果文件就在当前目录直接 ./ [文件名即可],不再当前目录文件路径要写对
# 最为解析器参数,就是告诉系统这就是个可执行的脚本
. test.sh
bash test.sh
source test.sh
sh test.sh
ls 查看目录,
ls -l 查看目录详细信息
cd 切换目录
vi 编辑文件
cat 查看文件内容
Shell 作为一种用户接口,它实际上是一个能够解释和分析用户键盘输入,执行输入中的命令,然后返回结果的一个解释程序(Interpreter,例如在 linux 下比较常用的 Bash)
编写好了一个 Shell 脚本,叫 test.sh (vi test.sh)
有以下几种方式去执行它
. test.sh
bash test.sh
source test.sh
就像pythonpython解析器解析.py文件一样 python test.py
但是普通用户没有运行权限,ls -l
可查看权限,可用chmod u+x [文件名]
增加权限。
chmod +x 和 chmod u+x的区别?
不同权限的文件有不同颜色:
蓝色表示目录;
绿色表示可执行文件,可执行的程序;
红色表示压缩文件或包文件;
浅蓝色表示链接文件;
灰色表示其它文件;
//赋予权限后自行编辑的文件变绿色就可以执行了
传递参数
$用于传递参数,注意作用域
test.sh
echo "paramter $0"
. test.sh zhansan
//执行命令行后传递参数
$1 $2 ...依次传递的位置
$# 为传递的参数的所有个数
$@ 为传递的所有参数的内容
$? 为最近一次计算结果
$* 传递的参数作为一个字符串显示
$自定义参数名 为内部传参
数组
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组)。
# Shell 数组用括号来表示,元素用"空格"符号分割开
array=(A B "C" D)
# 也可以使用下标来定义数组
array[0]=value0
array[1]=value1
array[2]=value2
# 通过下标读取数组元素值
array[0]
# 使用@ 或 * 可以获取数组中的所有元素
echo "数组的元素为: ${array[*]}"
echo "数组的元素为: ${array[@]}"
# 获取数组的长度
echo "数组元素个数为: ${#array[*]}"
echo "数组元素个数为: ${#array[@]}"
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
`...` 反单引号为调用系统工具,还有$()也是。
sum=`expr 2+3`
# 运算实例
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a 等于 b"
fi
if [ $a != $b ]
then
echo "a 不等于 b"
fi
乘号()前边必须加反斜杠()才能实现乘法运算;if…then…fi 是条件语句,后续将会讲解。在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 "" 不需要转义符号 “” 。
条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b]
是错误的,必须写成 [ $a == $b ]
。
逻辑运行算符
<=
或>=
开口或缺口对的地方要加空格,如果是字符串两边都不要空格。
if []
then
...
elif
then
...
else
...
fi
//then也可以和判断写在一行用;隔离开
if [] ; then
文件测试运算符
文件测试运算符用于检测 Unix 文件的各种属性。
输出命令
Shell echo命令用于字符串的输出:
# 显示普通字符串
echo "It is a test"
# 显示转义字符
echo "\"It is a test\""
# 显示结果定向至文件
echo "It is a test" > myfile # >覆盖 >> 追加
# 命令执行结果
echo `date`
echo $(date)
printf 命令模仿 C 程序库(library)里的 printf() 程序,printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。
printf format-string [arguments...]
printf "Hello, Shell\n"
# 类型个格式控制
# %s %c %d %f都是格式替代符
#%-10s 指一个宽度为 10 个字符(-表示左对齐,没有则表示右对齐),
#任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,
#超过也会将内容全部显示出来。
#%-4.2f 指格式化为小数,其中 .2 指保留 2 位小数。
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
#### 结果:
姓名 性别 体重kg
郭靖 男 66.12
杨过 男 48.65
郭芙 女 47.99
Shell test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
函数
//函数定义
[ function ] funname [()]
{
action;
[return int;]
}
# 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
# 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值
$0 shell本身文件名
$? 最后运行命令的返回值
$! shell最后运行的后台process的PID
$$ shell本身的pid
$# shell的参数个数
$@ 所有参数列表, 以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个
$* 所有参数列表, 以"$1" "$2" … "$n" 的形式输出所有参数
$()和 ` `
在 bash shell 中,$( ) 与` ` (反引号) 都可用做命令替换用。 ` ` 基本上可用在全部的 unix shell 中使用,若写成 shell script ,其移植性比较高,但反单引号容易打错或看错。
$()并不是所有shell都支持。
${ }
$[] $(()) $[]和$(())是一样的,都是进行数学运算的。
支持+ - * / %(“加、减、乘、除、取模”)。
但是注意,bash只能作整数运算,对于浮点数是当作字符串处理的。
[ ] 为test命令的另一种形式,但要注意:
1.必须在左括号的右侧和右括号的左侧各加一个空格,否则会报错。
2.test命令使用标准的数学比较符号来表示字符串的比较,而用文本符号来表示数值的比较。
3.大于符号或小于符号必须要转义,否则会被理解成重定向。
(( ))及[[ ]]
分别是[ ]的针对数学比较表达式和字符串表达式的加强版。
[[ ]]中增加模式匹配特效;
(( ))不需要再将表达式里面的大小于符号转义,除了可以使用标准的数学运算符外,还增加了以下符号: