(1)shell :负责完成用户与内核之间的交流
(2)shell命令:用户相系统内核发出空中请求,与之交互的文本流
(3)shell脚本:一堆命令集合。
(1)命令 [选项] [参数]
选项:功能
参数:要操作的对象
注意:
(1)方式1:
su - 用户名 ==>su -
注意:这样切换用户的工作路径以及环境变量会发生改变。
方式2:
su root
注意:路径不会发生改变
top:动态显示系统中运行的程序
ps:显示该用户运行的进程列表
ps -ef:查看所有的进程以及PID(进程号)
ps -aux:除了-ef功能外,还可以显示CPU及内存占用率
kill:输出指定的信号给指定的进程
kill -l :列出所有可用的信号名称
free:查看当前系统的内存的使用情况
df:查看文件系统的磁盘控件占用情况
du:统计目录或者文件所占磁盘空间的大小
fdisk -l:列出文件系统的分区情况
格式:cd [路径]
cd -:可以回到前次工作目录
“./”表示当前目录,“../”表示上级目录
格式: ls [选项] [文件]
格式:mkdir [选项] 路径
-p :mkdir 创建的目录可以是一个路径名称。可以一次多创建几个目录。
格式:cat [选项]文件1、文件2...
cat:适合查看比较短的文档
cat命令常见参数
-n :由第一行开始对所有输出的行数编号
-b :和 -n 相似,只是对于空白行不编号。
more:适合查看比较长的文档(按回车向下翻一行,空格向下翻一页,按q退出)
less:加强版的more,适合查看比较长的文档(按回车向下翻一行,空额向下翻一页,按q退出,支持上下箭头)
cp :拷贝
例如:将一个目录文件下的文件和目录拷贝到不同的目录里面并打印复制的文件和目录个数:用shell脚本实现
cp常见参数
-a :保留连接、文件属性,并复制其子目录,其作用等于dpr选项的结合
-d :复制时保留连接
-f :删除已经存在的目标文件而不提示
-i :再删除目标文件给出提示,要求用户确认
-p :出复制源文件外,将其时间和访问权限也一起复制
-r :将文件中的内容全部复制给另一个文件
mv :为文件或目录改名,或将文件由一个目录移入另一个目录中
格式:mv [选项]源文件或目录 目标文件或目录
-i :若 mv 操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写。 将当前目录下文件移动到目标目录文件下,则原文件下文件被自动删除
-f :有 -i 担任功能,强制删除,不会提醒
rm :删除一个目录中的一个或多个文件或目录
格式:rm [选项]文件或目录
-i :进行交互式删除
-f :忽略不存在的文件,但不给提示
-r :将rm 列出的目录文件全部递归的删除。 删除不会恢复,所以最好使用 -i 参数。
作用:
chown:修改文件所有者和组别
chgrp: 改变文件的组的所有权
格式:
chown: chown [选项]... 文件所有者[所有者组名]文件
注意:其中的文件所有者为修改后的文件所有者
chgrp: chgrp[选项]... 文件所有组文件
注意:其中的文件所有组为修改后的文件组拥有者
chown 和chgrp命令常见参数
-c ,-changes :详尽的描述每个file实际改变了哪些所有权
-f ,--silent ,--quiet :显示全部错误信息
作用:改变文件的访问权限
格式:可以使用符号标记和八进制数指定两种方式进行修改
参数
-c :若该文件权限确实已经更改,才显示其更改动作
-f :若该文件权限无法被更改也不要显示错误信息
-v :显示权限变更的详细资料
文件访问权限可以更改成:- rwx rwx rwx
a、3各不同的用户级别:文件拥有者(u)、所属的用户组(g)、系统里的其他用户(o)。
列如:可使用o+w==>给用户添加写的权限
b、八进制修改文件权限:有权限用1表示,-表示无权限用0表示
列如:rw- r-w r-- ==>110、101、100也就是654
注意:使用chmod必须具有root 权限
作用:在指定文件中搜素特定的内容,并将含有这些内容的行标准输出。
格式:grep 字符串 文件
-n :显示行号
-I :不区分大小写
代码实现:
作用:在指定目录中搜素文件,它的使用权限是所有用户。
格式:find 路径 选项 描述
常见参数:
-name :支持通配符“*” 和“?”,根据名字
-print :输出搜素结果,并且打印
ln 作用:用于在文件之间建立链接
硬链接:利用Linux中为每个文件分配的物理编号--inode建立链接
格式:ln [选项]源文件或目录、目标文件或目录
软链接:利用文件的路径名建立链接
格式:ln -s [选项]源文件或目录、目标文件或目录
区别:
(1)软链接会在用户选定的位置生成一个文件的镜像,不会重复占用磁盘空间,平时使用最多的就是软链接
(2)硬链接会在用户选定的位置上生成一个和源文件大小相同的文件
共同点:
无论是软链接还是硬链接都会保持同步性,不论修改哪一处,其它文件都会发生相同的变化
压缩工具:gzip、bzip2
注意:gzip、bzip2只能压缩文件
压缩格式:
gzip 文件名,后缀为.gz
bzip2 文件名,后缀为.bz2
解压:方式1:
gzip -d 文件名
bzip2 -d 文件名
方式2:
gunzip 文件名
bunzip2 文件名
tar:对文件目录进行打包或解包,后缀为.tar
-c:打包
-x:解包
-v:显示详细过程
-f:指定包文件名(该参数必须放在最后)
-z:调用gzip 或者gunzip
-j:调用bzip2或者bunzip2
作用:比较两个不同的文件或不同目录下的两个同名文件功能,并生成补丁文件。
格式:
diff [选项] 文件1 文件2
-r :对目录进行递归处理
-q :只报告文件是否有不同,不输出结果
-e , -ed :命令格式
-c , --context :旧版上下文格式
-u , --unified :新版上下文格式
通过pwd可以查看可执行所添加程序 的路径。
(1)sudo vim /etc/profile
(2)在文件末尾添加:export PATH=$PATH:/home/linux/22121/day2(要添加的路径)
(3)source /etc/profile 或者 重启
sudo adduser 用户名
sudo passwd 用户名
注意:删除的时候连同用户的主目录一起删除
sudo deluser --remove-home 用户名
sudo groupadd 组名
sudo usermod -g 目标组 要修改的用户
sudo groupdel 组名
ifconfig)查看ip地址
安装软件包:
卸载:
sudo apt-get remove 包名
作用:反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。反引号可以用()代替。
例如:$ TestString="`echo $HOME ` ` sy[n]*`"
可以替换成:$ TestString="$(echo $HOME) $(sy [n]*)"
作用:将前一个命令的输出作为后一个命令的输入
*:匹配任意长度的字符串
?:匹配一个长度的字符串
[]:匹配其中指定的一个字符
[-]:匹配指定的一个字符范围
[^...]:除了其中指定的字符外均可匹配
注意:除了*和?,其它均是匹配一个字符
>:输出重定向,如果文件不存在则新建,如果文件存在则清空文件中的内容
>>:追加重定向,如果文件不存在则新建,如果文件存在则追加在文件的末尾
wc -c:统计文件有多少个字符
wc -l:统计文件有多少行
2>或&>:将错误信息输出到指定的文件中
(1)touch 1.sh
(2)编辑 vim 1.sh
(3)执行的时候没有权限,需要人为的去添加 chmod 777 1.sh
(4)运行 ./1.sh
注意:任何赋值给变量的值都被shell解释为一串字符
命名规范:
注意:
(1)要取用变量的值,只需要在变量前面加一个$
(2)等号的左右两侧不能有空格
$#:包含命令行参数的个数
$@: 包含所有命令行参数
$*: 包含所有命令行参数
$?:包含前一个命令的退出状态,正常退出返回0,返回返回非0(shell中0为真,非0为假)
$$:包含正在执行进程的ID号
案例:在用户的主目录下创建一个mydir的文件夹,在该文件夹中创建一个1.txt,然后向1.txt中写入”hello shell”
输出:echo自带换行 不换行:添加-n参数
输入:read 变量 想要添加提示语:添加-p参数 注意:双引号后面必须添加空格
作用: expr主要用于简单的整数运算,包括加(+)、减(-)、乘(\*)、整除(/)和求模(%)
注意:expr与变量以及变量与运算符之间必须加空格
//shell脚本程序实现
#!/bin/bash
#告诉计算机使用那个版本的shell来解析我们的代码
read -p "请输入INT
" A B string
[ $A -gt $B ] //比较两个数的大小
echo $? //返回上一个比较值,输出为0则正确,其它值则表示错误
[ $string = "hello" ] //比较字符串大小是否相同
echo $?
NUM=`expr $A \* $B` //两数相乘
mkdir $HOME/22121/mydir //在家目录下新建一个文件夹
cd $HOME/22121/mydir //进入新建的文件夹
echo "hello shell">1.txt //在新建的文件夹内的文件写入“hello shell”
echo $?
echo "NUM=$NUM" //取两数相乘的结果 $用于取值
echo "this is the ${NUM}" //加中括号一般用于字符转换
s1 = s2 测试两个字符串的内容是否一致
s1 != s2 测试两个字符串的内容是否不一致
-z s1 测试s1 字符串的长度是否为0
-n s1 测试s1 字符串的长度是否不为0
注意:”[“的右侧以及 “]”的左侧必须有空格
-e name 测试name是否存在
-d name 测试name 是否为一个目录
-f name 测试name 是否为普通文件
-L name 测试name 是否为符号链接
-r name 测试name 文件是否存在且为可读
-w name 测试name 文件是否存在且为可写
-x name 测试name 文件是否存在且为可执行
-s name 测试name 文件是否存在且其长度不为0
f1 -nt f2 测试文件f1 是否比文件f2 更新
f1 -ot f2 测试文件f1 是否比文件f2 更旧
(1)单分支选择语句
if [ 表达式 ]
then
语句
fi
(2)双分支选择
if [ 表达式 ]
then
语句1
else
语句2
fi
if [表达式1]
then
语句1
elif[表达式2]
then
语句2
....
elif [表达式n]
then
语句n
else
语句n+1
fi
case 字符串变量 in
模式1)
语句1
;;
模式2)
语句2
;;
.....
模式n)
语句n
;;
*)
语句n + 1
;;
esac
注意:最后一个双分号可以省略,其它不能省略
案例:请输入你想下载文件的名字,让用户确认,用户输入是否下载这个软件,[Y/N/Q],Y:正在下载 N:用户取消下载 Q:退出
for 变量 in 单词表
do
语句
done
打印乘法口诀:
while [表达式]
do
语句
done
(1)break:跳出循环
(2)continue:结束本次循环,开始下一次循环
6.1 函数的定义
方式1:
函数名()
{
}
方式2:
function 函数名()
{
}
方式1:
变量=`函数名 参数列表`
方式2:
函数名 参数列表
注意:平时使用最多的是方式2