Linux教学项——基础环境及命令教学(包括实用shell脚本)

Linux相关学习——命令及其他

前期准备(默认已安装好Linux系统)

演示系统:

  1. 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
  2. 虚拟机 Vmware 15
    CentOS 7

1.网络配置:

独立系统

安装完成即配置完成

虚拟机环境vmware:

网络配置

  1. 右键网络适配器选择VMware Network 8,开启
    VMnet8
  2. 选择配置IPv4,对应IP为192.168.1.1,子网掩码为255.255.255.0
  3. 开启vmware,修改虚拟网络编辑器,对应Vmnet8为NAT模式(默认)开启或关闭DHCP服务均可
    Vmware 虚拟网络编辑器
    对应IP配置
  4. 修改虚拟机对应设置,网络适配器为NAT,且为已连接状态
    虚拟机设备网络设置
  5. 进入系统修改网络即可:

连接外网:设置 虚拟机的虚拟网络适配器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 [目录名称 ]”

.
目录中 . 表示在当前目录
..
目录中 .. 表示当前目录的前一目录
cd 和 pwd

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。
  • 命令行模式下的常用命令:
  1. 控制光标移动:↑,↓,j
  2. 删除当前行:dd
  3. 查找:/字符
  4. 进入编辑模式:i o a
  5. 进入底行模式:
  • 编辑模式(Insert mode)
    只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。
  • 编辑模式下常用命令:
    ESC 退出编辑模式到命令行模式
  • 底行模式(last line mode)
    将文件保存或退出vim,也可以设置编辑环境,如寻找字符串、列出行号……等。
  • 底行模式下常用命令:
  1. 退出编辑: :q
  2. 强制退出: :q!
  3. 保存并退出: :wq

打开文件

命令:vim 文件名
示例:打开当前目录下的aa.txt文件 vim aa.txt 或者 vim aa.txt

注意:使用vim编辑器打开文件后,并不能编辑,因为此时处于命令模式,点击键盘i/a/o进入编辑模式。

编辑文件

使用vim编辑器打开文件后点击按键:i ,a或者o即可进入编辑模式。

i:在光标所在字符前开始插入(I: 在后)
a:在光标所在字符后开始插入(A:在前)
o:在光标所在行的下面另起一新行插入(O:在上)

保存或者取消编辑

  • 保存文件:
  1. ESC 进入命令行模式
  2. : 进入底行模式
  3. wq 保存并退出编辑
  • 取消编辑:
  1. ESC 进入命令行模式
  2. : 进入底行模式
  3. 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 来进行脚本的执行。
/etc/shells

2. 编写对应脚本

对于脚本的编写,需要进行规范说明,包括

  1. 第一行说明用那个编译器编译
  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 键写入脚本信息:
当前脚本内容
ii 键进入输入模式开始脚本编写:

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 保存文件退出
最终内容如下:
test1.sh
脚本执行:
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 保存文件退出
最终内容如下:
ping对应IP

脚本执行:
bash test7.sh 输入主机IP即可判断:
对应Ip通信情况
获取可通信PC的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 输入用户和对应密码即可添加并切换:
添加用户成功


猜你喜欢

转载自blog.csdn.net/jack_zj123/article/details/118386838