文章目录
- 不知道考不考东西
- Linux 课堂知识点
- Linux 命令
- Linux Shell编程(课堂给出)
- 用户从键盘输入一个文件名,判断这一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下
- 定义函数 mul 用于计算两个参数的积,并在程序中调用此函数,计算从键盘动态输入的两个参数的积
- 编写shell程序,实现自动删除20个账号的功能,账号为 u1——u20
- 用户从键盘输入一个正整数N,变成统计从1加到N的值
- 编写一个shell程序,实现对成绩的等级判断,成绩以参数的形式输入,如果输入的参数大于等于90输出优秀,大于等于80输出良好,大于等于70输出中等,大于等于60输出及格,否则不及格
- 编写一个程序,输入1输出周一,输入2输出周二,输入其他数字输出other,使用case语句
- 从键盘输入一个数,若大于0则输出该数,若小于等于0,则输出零值
- 编写一个名为m的shell程序,格式为m \ \,如果y不存在给出提示,否则将y移至f中
- 输出斐波那契数列的前20个数
- Linux Shell编程(可忽略)
不知道考不考东西
前置内容
- Linux属于网络操作系统
- 开源
- Linux是在GPL协议下发行的遵循POSIX标准的操作系统内核
Linux体系架构
- Linux 内核
- Linux Shell
- Linux 文件系统
- Linux 应用程序
Linux系统特点
Linux源于Unix
- 开放性
- 多任务和多用户
- 支持多种硬件平台
- 可靠的安全系统
- 良好的用户界面
- 强大的网络功能
- 设备独立
- 支持多种文件系统
- 良好的可移植性
Linux的发行版本
- Red Hat (红帽)
- CentOS
- Ubuntu
- ……
Linux 课堂知识点
- vim的3种工作模式:
- 命令模式
- 插入模式
- 末行模式
- 前一个命令的标准输出作为后一个命令的标准输入:
- 管道
- IPV4地址由( )二进制位数组成:
- 32位
- 条件表达式与[ ]之间两边都要有:
- 空格 (如:if [ $1 -eq 0 ])
- 快速切换到家目录的命令:
- cd ~
- 两种路径:
- 相对路径 (“…/”表示当前所在目录的上一级目录;“./”表示当前所在目录;”.“和”…“只会在相对路径中出现)
- 绝对路径
- 统计文件中内容(如字符的个数、单词的个数等)的命令:
- wc
- 确定是否安装了apache服务(对应httpd),查看的命令:
- rpm -qa | grep httpd
- Linux结束进程的命令:
- kill
- 用数字635表示的权限对应的字母表示形式:
- rw-,-wx,r-x
- Linux有哪些用户:
- root用户(超级用户):ID为0,拥有最高权限
- 系统用户:CentOS7中ID为1~999
- 普通用户:CentOS7中ID为1000以上
- Linux以( )方式访问设备:
- 文件 (Linux中一切皆文件)
- 唯一标识用户的是:
- uid
- 某文件的组外成员权限为只读,所有者有全部权限,组内权限为读写,用数字表示:
- 764
- 在CentOS7种如果使用匿名用户登录ftp: ?
- 匿名用户名:anonymous
- 在给定文件中查找预设定条件符合的字符串的命令:
- grep
- smb服务器服务配置文件:
- smb.conf
- ftp服务器服务配置文件:
- vsftpd.conf
- 在CentOS7中启动某一个一个服务:
- systemctl start 什么什么.service 启动
- systemctl restart 什么什么.service 重启/刷新
- systemctl stop 什么什么.service 停止
- 启动ftp服务的命令、启动dns服务的命令、启动samba服务的命令:
- systemctl start vsftpd.service
- systemctl start named.service
- systemctl start smb.service
- dns作用:
- 把域名解析为IP地址
- dhcp作用:
- 为客户及分配IP地址
- ftp的配置文件(想修改ftp):
- vsftpd.conf
- Linux文件系统的文件,对于外部文件一般放在( )目录中:
- /dev
- Linux文件系统的文件,对于配置文件一般放在( )目录中:
- /etc
- vim编辑器在末行模式下保存退出的命令:
- wq
- 普通用户切换到超级用户:
- su root
- Linux的内核管理包括:
- 内存管理器
- 进程管理器
- 设备驱动程序
- 虚拟文件系统
- 网络管理
- ( )文件保存用户的uid信息:
- /etc/passwd
- 命令ls t*.?代表的意义:
- 查看文件名以t开头,扩展名值为一个字符的文件
- 查找以#开头的文件名的命令:
- find
- useradd命令指定主目录的参数:
- -d
- root组群默认的组号:
- 0
- Linux系统的各部分组成中,最核心、最基础的部分:
- 内核
- Linux操作系统的主要具有的特点:
- 开放性
- 多任务和多用户
- 支持多种硬件平台
- 可靠的安全系统
- 良好的用户界面
- 强大的网络功能
- 设备独立
- 支持多种文件系统
- 良好的可执行性
- Linux系统的核心模块:
- Linux文件系统 (在Linux中,任何软件和I/O设备都被视为文件)
- 引导目录,主要防止开机时会使用到的文档的目录:
- /boot
- 家目录,即用户的主目录的目录:
- /home
- 系统存放程序的目录:
- /usr
- 查看“当前工作目录”的完整路径的命令:
- pwd
- 文件名称:
- 最多可以使用25个字符,除了正斜线“/”外,都是有效字符
- Linux是一个多用户多任务的操作系统,可以同时执行多个用户的多个程序
- 进程,是一个具有一定独立功能的程序或程序段在一组数据集合上的一次动态执行过程,同时也是程序能够并发执行的基础机制
Linux 命令
-
启动Linux系统,进入默认的目录(/home),在当前的路径下,添加新用户 student,并设置该用户的登录密码
cd /home
useradd student
passwd student -
在用户 s 下创建两个新目录 d1、d2,然后将 d2 目录移动到 d1 目录中,再删除 d2 目录
mkdir d1 d2
mv d2 d1
cd d1
rm -rf d2 -
创建用户 d1,设置用户主目录为根下的 d1,密码为空,且其附加组群为 t
useradd -d /d1
groupadd t
usermod -g t d1 -
配置网卡 e0 的IP地址为 192.168.1.1,子网掩码为 255.255.255.0
ifconfig 192.168.1.1
netmask 255.255.255.0 -
修改 student.txt 的所有者权限为读写许可,其他用户只能进行只读访问
chmod u+r+w,o+r student.txt 或者 chmod 644 student.txt
-
增加两个组账号 g1 和 g2 并制定主账号 ID 分别为 2002 2003,增加两个用户账号 u1(UID 为 2047 并属于组 g1) u2(UID 为 2048 并属于组 g2)
groupadd -g 2002 g1
groupadd -g 2003 g2
useradd -u 2047 -g g1 u1
useradd -u 2048 -g g2 u2 -
在当前用户的家目录下创建名为 test1 的目录,并 test1 目录下 创建文件 ,向 gs.txt 输入内容 Hello Worldgs.txt
cd ~
mkdir test1
cd test1
touch gs.txt
echo Hello World > gs.txt -
在用户 t1 个人目录下已有目录 test,完成以下要求的操作:
搜索路径 /etc 下所有以 p 开头的文件和目录,拷贝到 test 中,把目录 test 下所有内容建立 tar 包,并命名为 test.tar.gzcp -r /etc/p*.* /home/t1/test
tar -zcvf test.tar.gz /home/test/* -
已在当前目录创建新文件 p 完成以下要求的的操作:
查看文件的读写执行权限,并指定文件的所有者拥有读、写、执行三种权限ll
chmod u+r+w+x p -
在当前目录下新建一个目录 t,在 t 下新建两个文件 t1 和 t2,把 t2 移动到其父目录中,并改名为 f2
mkdir t
cd t
touch t1 t2
mv t2 …/f2
Linux Shell编程(课堂给出)
用户从键盘输入一个文件名,判断这一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下
#!/bin/bash
read file
if [ -f $file ]
then
cp ./$file /dev
fi
定义函数 mul 用于计算两个参数的积,并在程序中调用此函数,计算从键盘动态输入的两个参数的积
#!/bin/bash
mul() {
echo "$1*$2=$[$1*$2]"
}
read m
read n
mul $m $n
编写shell程序,实现自动删除20个账号的功能,账号为 u1——u20
#!/bin/bash
i=1
while [ $i -le 20 ]
do
userdel -r u{$i}
let i++
done
用户从键盘输入一个正整数N,变成统计从1加到N的值
#!/bin/bash
read n
sum=0
for (( i=0;i<=n;i++ ))
do
sum=$[$sum+$i]
done
echo "从1加到$n的和为$sum"
编写一个shell程序,实现对成绩的等级判断,成绩以参数的形式输入,如果输入的参数大于等于90输出优秀,大于等于80输出良好,大于等于70输出中等,大于等于60输出及格,否则不及格
#!/bin/bash
if [ $1 -ge 90 ]
then
echo "优秀"
elif [ $1 -ge 80 ]
then
echo "良好"
elif [ $1 -ge 70 ]
then
echo "中等"
elif [ $1 -ge 60 ]
then
echo "及格"
else
echo "不及格"
fi
编写一个程序,输入1输出周一,输入2输出周二,输入其他数字输出other,使用case语句
#!/bin/bash
case $1 n
1)
echo "周一"
;;
2)
echo "周二"
;;
*)
echo "other"
esac
从键盘输入一个数,若大于0则输出该数,若小于等于0,则输出零值
#!/bin/bash
read n
if [ $n -gt 0 ]
then
echo $n
else
echo 0
fi
编写一个名为m的shell程序,格式为m <y> <f>,如果y不存在给出提示,否则将y移至f中
#!/bin/bash
if [ -f $y ]
then
mv $y $f
else
echo "不存在"
fi
输出斐波那契数列的前20个数
#!/bin/bash
t1=1
t2=1
echo $t1
echo $t2
for (( i=3;i<=20;i++ ))
do
t3=$[$t1+$t2]
t1=$t2
$t2=$t3
echo "$t3 "
done
Linux Shell编程(可忽略)
- 对于shell编程的文件我们通常在终端中使用命令vim file_name.sh创建
- 执行sh文件有两种方式,一种是用路径直接调用,如当调用前路径下的demo.sh即,./demo.sh(需要注意的是,这种方法需要这个文件的拥有者有执行权限,我们通常通过ll命令查看权限,使用chmod u+x file_name.sh命令加入执行权限);另外一种便是sh file_name.sh命令,我们通常选用后者
定义变量和静态变量赋值并输出的程序
# 定义变量和静态变量赋值并输出的程序
vim test.sh
#!/bin/bash
a=200
echo $a
unset a # 撤销变量a
readonly B=100
echo $B
unset B # 这条语句会报错,静态变量不可撤销
命令行传参做两个数的加法
# 定义变量和静态变量赋值并输出的程序
vim test.sh
#!/bin/bash
res=$[$1+$2]
echo "$1+$2=$res"
sh test.sh 2 6
2+6=8
命令行传参判断两字符串是否相等
# 命令行传参判断两字符串是否相等
vim test.sh
#!/bin/bash
if [ $! = $2 ]
then
echo "这两个字符串相等"
else
echo "这两个字符串不相等"
fi
sh test.sh abc abc
这两个字符串相等
sh test.sh abc ABC
这两个字符串不相等
命令行传参判断一个数是否小于零
# 命令行传参判断一个数是否小于零
vim test.sh
#!/bin/bash
if [ $1 -lt 0 ]
then
echo "$1小于0"
else
echo "$1大于等于0"
fi
sh test.sh -2
-3小于0
sh test.sh 6
6大于等于0
命令行传参判断一个成绩是什么水平
# 命令行传参判断一个成绩是什么水平
vim test.sh
#!/bin/bash
if [ $1 -lt 0 || $1 -gt 100 ]
then
echo "请输入百分制成绩"
else if [ $1 -ge 90 ]
then
echo "优秀"
else if [ $1 -ge 80 ]
then
echo "良好"
else if [ $1 -ge 90 ]
then
echo "优秀"
else if [ $1 -ge 70 ]
then
echo "中等"
else if [ $1 -ge 60 ]
then
echo "及格"
else
echo "不及格"
fi
sh test.sh 96
优秀
命令行传参一个数字打印对应的星期
# 命令行传参一个数字打印对应的星期
vim test.sh
#!/bin/bash
if [ $1 -eq 1 ]
then
echo "星期一"
else if [ $1 -eq 2 ]
then
echo "星期二"
else if [ $1 -eq 3 ]
then
echo "星期三"
else if [ $1 -eq 4 ]
then
echo "星期四"
else if [ $1 -eq 5 ]
then
echo "星期五"
else if [ $1 -eq 6 ]
then
echo "星期六"
else if [ $1 -eq 7 ]
then
echo "星期日"
else
echo "输入不合法"
fi
sh test.sh 2
星期二
case语句实现星期几的打印
# case语句实现星期几的打印
vim test.sh
#!/bin/bash
case $1 in
"1")
echo "星期一"
;;
"2")
echo "星期二"
;;
"3")
echo "星期三"
;;
"4")
echo "星期四"
;;
"5")
echo "星期五"
;;
"6")
echo "星期六"
;;
"7")
echo "星期日"
;;
*)
echo "输入不合法"
esac
sh test.sh 5
星期五
$@和$*的区别
# $@和$*的区别
vim test.sh
#!/bin/bash
for i in "$@" # 区分每个参数
do
echo $i
done
for i in "$*" # 作为一个参数整体
do
echo $i
done
sh test.sh 1 2 3 4 5
1
2
3
4
5
1 2 3 4 5
求和
# 求和
vim test.sh
#!/bin/bash
sum=0
for i in "$@"
do
sum=$[$sum+$1]
done
echo "sum=$sum"
sh test.sh 1 2 3 4 5 6
sum=21
求从1加到n的和
# 求从1加到n的和 for
vim test.sh
#!/bin/bash
sum=0
for (( i=1; i<=$1; i++ ))
do
sum=$[$sum+$i]
done
echo "从1加到$1的和为$sum"
sh test.sh 100
从1加到100的和为5050
# 求从1加到n的和 while
vim test.sh
#!/bin/bash
sum=0
i=0
while [ $i -le $1 ]
do
sum=$[$sum+$i]
let i++
done
echo "从1加到$1的和为$sum"
sh test.sh 10
从1加到10的和为55
打印1到10中的偶数(用continue)
# 打印1到10中的偶数(用continue)
vim test.sh
#!/bin/bash
for (( i=0; i<=10; i++ ))
do
if [ $[$i%2] -eq 1 ]
then
continue
fi
echo $i
done
sh test.sh
2
4
6
8
10
read语句获取输入练习
# read语句获取输入练习
vim test.sh
#!/bin/bash
read -p "请输入:" m
echo $m
read -t 6 -p "请输入:" n # 获取输入,只等待6s
echo $n
sh test.sh
请输入:1
1
请输入:2
2
sh test.sh
请输入:1
1
请输入: # 6s内未输入
判断一个数是否为素数
# 判断一个数是否为素数
vim prime.sh
#!/bin/bash
read -p "请输入一个数,将返回其是否为素数:" n
for (( i=2; i<n; i++ ))
do
if [ $[$n%$i] -eq 0 ]
then
break
fi
done
if [ $i -eq $n ]
then
echo "$n是素数"
else
echo "$n不是素数"
fi
sh prime.sh
请输入一个数,将返回其是否为素数:6
6不是素数
sh prime.sh
请输入一个数,将返回其是否为素数:7
7是素数
打印1到100间的素数
# 打印1到100间的素数
vim prime.sh
#!/bin/bash
for (( n=2; n<=100; n++ ))
do
for (( i=2; i<n; i++ ))
do
if [ $[$n%i$] -eq 0 ]
then
break
fi
done
if [ $i -eq $n ]
then
echo "$n
fi
done
# 运行结果略
统计某一路径下文件的个数
# 统计某一路径下文件的个数
vim cnt_of_files.sh
#!/bin/bash
dir=/var/log # 这里以/var/log下的文件个数为例
cnt=0
for i in $dir/*
do
if [ -f $i ]
then
let cnt++
fi
done
echo "$dir下共有$cnt个文件"
sh cnt_of_files.sh
/var/log下共有28个文件
利用数组打印首项为1公比为2的等比数列前10项
# 利用数组打印首项为1公比为2的等比数列前10项
vim demo.sh
#!/bin/bash
arr[0]=1
for (( i=1; i<10; i++ ))
do
arr[$i]=$[${arr[$i-1]}*2]
done
# 遍历打印数组元素
i=0
until [ -z ${arr[$i]} ]
do
echo ${arr[$i]}
let i++
done
# 运行结果略
求一个无序数组内的最大元素
# 求一个无序数组内的最大元素
vim max.sh
#!/bin/bash
arr=(10 2 5 -9 6 15 3 7 8)
max=${arr[0]}
i=0
until [ -z ${arr[$i]} ]
do
if [ $max -lt ${arr[$i]} ]
then
max=${arr[$i]}
fi
let i++
done
echo "最大值是$max"
sh max.sh
最大值是15
自定义对两个数求和
# 自定义对两个数求和
vim test.sh
#!/bin/bash
add() {
if [ $# -ne 2 ] # 检查参数长度是否为2
then
echo "参数需要2个,现在你传入的参数不是2个!"
return # 直接退出函数
fi
echo "$1+$2=$[$1+$2]"
}
add 2 4
sh test.sh
2+4=6