Linux教学项——基础环境及命令教学(包括实用shell脚本)
前期准备(默认已安装好Linux系统)
演示系统:
- Ubuntu独立系统
Linux The-Land-Like-as-A-Picture 5.8.0-59-generic #66~20.04.1-Ubuntu SMP Thu Jun 17 11:14:10 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
- 虚拟机 Vmware 15
CentOS 7
1.网络配置:
独立系统
安装完成即配置完成
虚拟机环境vmware:
网络配置
- 右键==网络适配器==选择VMware Network 8,开启
- 选择配置IPv4,对应IP为==192.168.1.1==,子网掩码为==255.255.255.0==
- 开启vmware,修改虚拟网络编辑器,对应Vmnet8为NAT模式(默认)开启或关闭DHCP服务均可
- 修改虚拟机对应设置,网络适配器为NAT,且为==已连接==状态
- 进入系统修改网络即可:
连接外网:设置 虚拟机的==虚拟网络适配器==VM8的==DHCP==开启;系统网络设置为DHCP自动获取 不连接外网:系统网络设置为静态,如192.168.1.==200==,其==200==可自行修改,子网掩码为255.255.255.0
2.前期软件获取:以typora为例
==前提:网络可连接外网==
官网链接
安装教程
wget -qO - https://typora.io/linux/public-key.asc | sudo apt-key add -
sudo add-apt-repository 'deb https://typora.io/linux ./'
sudo apt-get update
sudo apt-get install typora
3.快捷键的使用(Ubuntu)
可视化界面快捷键
- Ctrl+ALT+T:打开终端(CentOS 需要先打开一个终端)
- Tab:补全命令
- Ctrl+C:中断命令
linux初始之常见命令学习
部分参考:Linux常用命令
1. 何为命令
命令名称 [选项] [参数] [对象]
// 注意,命令名称、选项、参数和对象中间为空格
2. 基础命令之目录命令
pwd(print working directory)
pwd用于显示用户当前所处的工作目录
cd(change directory)
cd用于切换工作路径,格式为“ cd [目录名称 ]”
. 目录中 ==.== 表示在当前目录 .. 目录中 ==..== 表示当前目录的前一目录
ls(list files )
ls用于显示目录中的文件信息,格式为“ ls [选项 ] [文件 ] ”
ls -al
// 用于查看当前目录中所有文件并输出对应属性信息
mkdir(make directory )
mkdir用于文件夹的创建,格式为 “mkdir [待创建目录名称]"
mkdir -p test1/test2
// mkdir -p 用于在文件夹中继续创建文件夹
rmdir(remove directory )
rmdir用于文件夹的删除(不常用)
3. 常用命令之文件操作命令
touch
touch用于创建文件(可多个)如:
touch file1 file2 。。。
mv(move file )
mv用于将现有文件或文件夹移动(一般为重命名)
如下命令:将创建的file1文件重命名为file3:
mv file1 file3
rm(remove file )
rm (最常用),作为删除命令,可用于删除文件或文件夹
rm file2
// 此时并不会报错——原因:删除单个文件
mkdir -p test\123\
rm test\
// 此时报错:删除的是目录
rm -rf test
// 删除成功
cp(copy file)
cp用于文件或文件夹的复制,在linux中对文件的修改建议先cp作为原文件的备份。
常用命令:
cp file2 [路径]/[文件名]
cp -R test1 ../
// 将之间新建的test1文件夹复制到上一级目录
// 对文件夹的复制需要加 -p
cp -a file3 ../
// 将之前新建的file3文件复制到上一级目录
// -a 用于不修改文件的属性,包括文件所有者,权限和创建时间等
ln(link files )软连接
ln -s file2 [路径]/[链接名]
cat(concatenate )查看
less 文件高级查看命令(推荐使用)
less [文件名]
相关键的使用
f:向下翻页 b:向上翻页 /:查找字符 n:向下继续查找结果 q:退出文件查看界面
tar(tape archive)压缩
tar -xvf xxx.tar -C [路径]
tar -zxvf xxx.tar.gz
tar -cvf xxx.tar [要压缩的文件]
tar -czvf xxx.tar.gz [要压缩的文件]
4. 常用命令之权限修改命令
linux权限:rwx
- r代表可读read
- w代表可写write
- x代表该文件是一个可执行文件 如果rwx任意位置变为-则代表不可读或不可写或不可执行文件
权限说明:
- 第一位:-就代表是文件,d代表是文件夹
- 第一段(3位):代表拥有者的权限
- 第二段(3位):代表拥有者所在的组,组员的权限
- 第三段(最后3位):代表的是其他用户的权限
chown(change owner )
chown用于修改文件或文件夹的拥有者,只有文件(夹)==拥有者==和==root==可对文件权限作修改
chgrp(change group )
chgrp用于修改文件或文件夹的组
chmod(change mode )
chmod用于修改文件或文件夹的对应权限
mkdir sample
ls -l | grep sample
chown jsj sample
// 将root主目录下sample的拥有者改为jsj
ls -l | grep sample
chmod u-x,g-r,o+w sample
// 将sample文件夹拥有者对应权限修改为没有执行权限x,组内成员没有可读权限r,其他用户拥有可写权限r
ls -l | grep sample
chmod 765 sample
// 修改权限为 rwx rw- r-x (111 110 101)
5. 常用命令之用户登录命令
su(swith user)
su用于用户之间的切换。但是切换前的用户依然保持登录状态。如果是root 向普通或虚拟用户切换不需要密码,反之普通用户切换到其它任何用户都需要密码验证。
su test:切换到test用户,但是路径还是/root目录
su - test : 切换到test用户,路径变成了/home/test
passwd
在==root用户==下执行 用于对应用户的密码修改
用法:
passwd [对应用户]
who
who用于查看当前登入主机的用户终端信息,格式为“ who [参数 ]”。
last
last用于查看所有系统的登录记录,格式为“ last [参数 ]”
history
history用于显示当前用户历史执行过的1000条命令
history -c
// 清空当前用户执行linux命令历史信息记录
6. 常用命令之系统工作命令
echo
echo用于在终端输出字符串或对应变量(以 ==$== 为首)
echo -e "tab:\t回车:\n"
// echo -e 为解析正则表达,如\t和\n等均可表达
echo -n "echo -n 表示不回车输出"
echo经典案例:倒计时:
for i in 9 8 7 6 5 4 3 2 1 0
do
echo -ne "$i\b"
# -n表示不回车显示,\b在正则表达为删除\b前一个字符
# 显示效果即每次数字闪烁并消失,不回车
sleep 1
# 等待1s
done
echo "发射!"
date
date用于显示当前时间
按年-月-日 小时:分钟:秒来显示当前时间
date "+%Y-%m-%d %H:%M:%S"
设置时间为2030年4月5日,6点7分8秒
date -s "20300405 6:07:08"
date经典案例:将此时时间作为文件夹名称
getDate=`date +"%Y%m%d-%H.%M"`
# 将当前时间以年月日-小时.分钟的形式获取并传入给变量getDate
# 注意能实现的机制是 `` 的使用
# 以下命令也可:
GetDATE=$(date +"%Y-%m-%d %H.%M")
mkdir $getDate
mkdir $GetDATE
# 创建对应的文件夹
reboot
reboot用于重启系统
reboot
即可
shutdown
shutdown用于指定对应时间关机或重启
shutdown -h now
// 立即关机
shutdown -h 5
// 5分钟后关机
shutdown -r now
// 立即重启
ps(process status)
ps用于查看系统中的进程状态,格式为“ ps [参数 ] ”
查看当前系统所运行进程
ps aux
ps -ef
top
top(相当于win的任务管理器)用于动态地监视进程活动与系统负载等信息,默认每10秒刷新一次
pidof
pidof用于查询某个指定服务进程的 PID值,格式为“ pidof [参数 ] [服务名称 ]”
kill
kill用于终止某个指定 PID的服务进程,格式为“ kill [参数 ] [进程 PID]”
killall
killall用于批量结束某个服务对应的全部进程,如关闭sshd服务程序(即xshell服务)
pidof sshd
killall sshd
pidof sshd
7. 常用命令之其他命令
find 查找
find . -name "*.log" -ls
// 在当前目录查找以.log结尾的文件,并显示详细信息。
find /root/ -perm 600
// 查找/root/目录下权限为600的文件
find . -type f -name "*.log"
// 查找当目录,以.log结尾的普通文件
find . -type d | sort
// 查找当前所有目录并排序
find . -size +100M
// 查找当前目录大于100M的文件
grep
ps -ef | grep sshd
//查找指定ssh服务进程
ps -ef | grep sshd | grep -v grep
// 查找指定服务进程,排除gerp身
ps -ef | grep sshd -c
// 查找指定进程个数
cal(calendar )
cal [月份] [年份]
显示日历
dd(disk dump)
dd用于创建指定大小的文件
dd if=/dev/zero of=file count=3 bs=100M
# 在当前目录创建一个3*100M=300M大小的文件file
ls -l file
man 手册
man [对应有效指令]
vim(有参考)
vim 三种状态
基本上vim可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
- 命令行模式command mode) 控制屏幕光标的移动,字符、字或行的删除,查找,移动复制某区段及进入Insert mode下,或者到 last line mode。
- 命令行模式下的常用命令:
- 控制光标移动:↑,↓,j
- 删除当前行:dd
- 查找:/字符
- 进入编辑模式:i o a
- 进入底行模式:
- 编辑模式(Insert mode) 只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。
- 编辑模式下常用命令: ESC 退出编辑模式到命令行模式
- 底行模式(last line mode) 将文件保存或退出vim,也可以设置编辑环境,如寻找字符串、列出行号……等。
- 底行模式下常用命令:
- 退出编辑: :q
- 强制退出: :q!
- 保存并退出: :wq
打开文件
命令:vim 文件名 示例:打开当前目录下的aa.txt文件 vim aa.txt 或者 vim aa.txt
注意:使用vim编辑器打开文件后,并不能编辑,因为此时处于命令模式,点击键盘i/a/o进入编辑模式。
编辑文件
使用vim编辑器打开文件后点击按键:i ,a或者o即可进入编辑模式。
i:在光标所在字符前开始插入(I: 在后) a:在光标所在字符后开始插入(A:在前) o:在光标所在行的下面另起一新行插入(O:在上)
保存或者取消编辑
- 保存文件:
- ESC 进入命令行模式
- : 进入底行模式
- wq 保存并退出编辑
- 取消编辑:
- ESC 进入命令行模式
- : 进入底行模式
- q! 撤销本次修改并退出编辑
linux高阶之shell脚本学习
1. 何为脚本(即shell脚本的简称)
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
linux中可用shell编辑
对应位置为 /etc/shells
包括 sh、bash 等。Bash,即 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。对以 ==.sh== 结尾的文件,以 bash xx.sh
来进行脚本的执行。
2. 编写对应脚本
对于脚本的编写,需要进行规范说明,包括
- 第一行说明用那个编译器编译
- 下面说明脚本创建时间、对应作者和对应用途
xshell 连接
Xshell 创建新连接,主机填写虚拟机系统IP,如192.168.1.==200==,用户名设置为==root==,密码为登录密码。
使用 xshell 的原因
通常情况下linux系统均为服务器,而服务器大多无法接触实体,即只可通过网络来进行远程连接与控制管理.在常见的远程连接软件中,Xshell最为常用. 而Vim作为linux自带编辑器,在省略了鼠标的使用下,可更快的实现文件内容的编辑过程.
vim 编写脚本
vim 配置文件.vimrc
vim ~/.vimrc
将以下内容填入:
set nu
# 设置行号,取消行号为 :set nonu
syntax on
# 设置自动修补
map <F1> :call AddInfo() <CR>
# 对于一个.sh文件,按F1键即可
function AddInfo()
if &filetype == 'sh'
call append(0,"#!/bin/bash")
endif
call append(1,"clear")
call append(2,"#############################")
call append(3,"### Author: 此处为作者名称 ###")
call append(4,"#############################")
call append(5,"#time :".strftime("%Y-%m-%d %H:%M"))
call append(6,"#############################")
call append(7,"#### Descrption ############")
echo
endfunction
Esc :wq
保存退出即可
创建实用shell脚本文件
相关资源:linux_shell.tar.gz
使用方法:下载或ftp至linux系统后解压:
tar -zxvf linux_shell.tar.gz
内包括博客对应脚本文件,和md教程,按博客对应教程使用即可
test1.sh 两个数的大小比较
vim test1.sh
创建test1.sh 脚本文件
先 F1 键写入脚本信息:
i
按 ==i== 键进入输入模式开始脚本编写:
clear
read -p "请输入两个数用于判断其大小,第一个数:" num1
read -p "第二个数:" num2
echo "第一个数是: $num1, 第二个数是:$num2"
echo "开始判断:"
if [ $num1 = $num2 ];then
echo "$num1 等于 $num2"
elif (($num1 > $num2));then
echo "$num1 大于 $num2"
else
echo "$num1 小于 $num2"
fi
按 ==ZZ== 保存文件退出
最终内容如下:
bash test1.sh
输入两个数即可判断:
test2.sh 计算 输入年份是否是润年
vim test2.sh
创建test2.sh 脚本
按==F1==进行信息添加,按 ==i== 键进行编辑:
clear
read -p "请输入一个大于1000的四位数的年份: " year
count=`echo $year | awk '{print length($0)}'`
if [ $count -eq 4 ];then
echo "year 是 $year"
if (( $year % 100 != 0 ));then
if (( $year %4 != 0 ));then
echo "$yaer 不是闰年"
else
echo "$year 是闰年"
fi
elif (( $year % 400 != 0 ));then
echo "$year 不是闰年"
else
echo "$year 是闰年"
fi
else
echo "输入位数不对"
fi
按 ==ZZ== 保存文件退出
最终内容如下:
bash test2.sh
输入四位数即可判断:
test3.sh 小游戏-猜数字
vim test3.sh
创建test3.sh 脚本
按==F1==进行信息添加,按 ==i== 键进行编辑:
Random=$(($RANDOM % 100))
read -p "请输入一个100以内的整数:" num
if [ $num -gt 100 -o $num -lt 1 ];then
read -p "请输入从1到100内的整数:" num
fi
count=1;
while [ $num -ne $Random ]
do
count=$(($count+1))
if [ $num -gt $Random ];then
read -p "输入的 $num 大了,请输入小一点的:" num
else
read -p "输入的 $num 小了,请输入大一点的:" num
fi
done
echo "游戏结束!所猜次数:$count ,最终结果:$Random = $num"
按 ==ZZ== 保存文件退出
最终内容如下:
bash test3.sh
输入100以内的数即可开始:
test4.sh 计算还有多久过生日(有点复杂)
vim test4.sh
创建test4.sh 脚本
按==F1==进行信息添加,按 ==i== 键进行编辑:
read -p "输入您的出生日期(yyyymmdd):" birthday
# 判断输入是否合法
birth=`echo $birthday | grep '[0-9]\{4\}[0-9]\{2\}[0-9]\{2\}'`
if [ "$birth" != "0" ];then
echo "您的出生日期是:"
date --date="$birthday" +"%Y年%m月%d日"
TrueDay=`echo $?`
if [ $TrueDay -ne 0 ];then
echo "输入时间不正确"
exit 1
else
year=`date --date="$birthday" +"%Y"`
mouth=`date --date="$birthday" +"%m"`
day=`date --date="$birthday" +"%d"`
echo "您的生日是:$mouth月$day日"
fi
else
echo "输入时间不正确或格式有误,正确格式为20210703"
exit 1
fi
# 判断距离过生日还有多久
NowYear=`date +%Y`
NowBirth=$NowYear-$mouth-$day
NowBirthday=`date --date="$NowBirth" +%s`
Nowday=`date +%s`
if [ $NowBirthday -ge $Nowday ];then
FromDay=$(($(($NowBirthday-$Nowday))/60/60/24))
FromHour=$(($(($NowBirthday-$Nowday))/60/60%24))
FromYear=$(($NowYear-$year))
echo "还有$FromDay天$FromHour时就可以过$FromYear岁生日"
else
NowB=$(($NowYear+1))-$mouth-$day
NowBD=`date --date="$NowB" +%s`
NextDay=$(($(($NowBD-$Nowday))/60/60/24))
NextHour=$(($(($NowBD-$Nowday))/60/60%24))
NextYear=$(($NowYear+1-$year))
echo "还有$NextDay天$NextHour时就可以过$NextYear岁生日"
fi
按 ==ZZ== 保存文件退出
最终内容如下:
bash test4.sh
输入yyyymmdd对应格式即可判断:
test5.sh 输入数字并从1累加求和
vim test5.sh
创建test5.sh 脚本
按==F1==进行信息添加,按 ==i== 键进行编辑:
clear
read -p "请输入一个正整数: " num
if [ $num -gt 0 ];then
sum=0
for ((i=1;i<=$num;i++))
do
sum=$(($sum+$i))
done
echo "其累加求和为$sum"
else
echo "$num 应该大于0"
fi
按 ==ZZ== 保存文件退出
最终内容如下:
bash test5.sh
输入正整数即可计算:
test6.sh 判断文件及文件夹存在等基础操作
vim test6.sh
创建test6.sh 脚本
按==F1==进行信息添加,按 ==i== 键进行编辑:
read -p "请输入你想去的目录: 格式为 /xx/xx/ :" dir
read -p "请输入你想创建的文件名: " filename
echo "即将在$dir中创建$filename文件"
mkdir -p $dir && cd $dir || cd $dir
pwd
# 文件不存在,则创建
if [ ! -e $filename ];then
touch $filename
# 文件存在,则删除,并新建文件夹
elif [ -f $filename ];then
rm -rf $filename
mkdir $filename
# 存在,为文件夹等其他类型,则删除
else
rm -rf $filename
fi
ls -l
按 ==ZZ== 保存文件退出
最终内容如下:
bash test6.sh
输入对应路径和文件名即可进行创建:
test7.sh 获取当前网段下存活主机信息
vim test7.sh
创建test7.sh 脚本
按==F1==进行信息添加,按 ==i== 键进行编辑:
read -p "请输入您的主机ip,如192.168.1.200:" ip
# 获取对应网段
getIP=`echo $ip | cut -d . -f 1,2,3`
endIp=255
startIp=0
while [ $startIp -ne $endIp ]
do
FinalIp=$getIP.$startIp
echo "ping $FinalIp"
# ping ip,c 1次,i 1s,s 1024大小,t 255TTL
ping -c 1 -i 1 -s 1024 -t 255 $FinalIp &> /dev/null
result=`echo $?`
if [ $result -eq 0 ];then
echo "$FinalIp 存活" >> activePC.txt
else
echo "$FinalIp 对应PC关闭" >> closePC.txt
fi
startIp=$(($startIp+1))
done
按 ==ZZ== 保存文件退出
最终内容如下:
脚本执行:
bash test7.sh
输入主机IP即可判断:
test8.sh 添加用户并配置对应登录密码(root权限)
vim test8.sh
创建test8.sh 脚本
按==F1==进行信息添加,按 ==i== 键进行编辑:
# 必须在root用户下
echo "请确保在root用户下:"
quit=1
while [ $quit -ne 0 ]
do
read -p "输入您要添加的用户:" username
useradd -d /home/$username -m $username -s /bin/bash
read -p "输入 $username 的密码:" passwd
echo "$username:$passwd" | chpasswd
read -p "是否继续添加?继续请输入1,退出输入0:" quit
done
按 ==ZZ== 保存文件退出
最终内容如下:
bash test8.sh
输入用户和对应密码即可添加并切换: