最全的Linux教程,Linux从入门到精通
======================
-
linux从入门到精通(第2版)
-
Linux系统移植
-
Linux驱动开发入门与实战
-
LINUX 系统移植 第2版
-
Linux开源网络全栈详解 从DPDK到OpenFlow
第一份《Linux从入门到精通》466页
====================
内容简介
====
本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
例一:运算符的写法
a=1
let a++
let ‘a+=2’
b=expr $a + 3
#注意=号两边不要有空格,还有+号两边要有空格
c=
(
(
a
+
5
)
)
d
=
((a+5)) d=
((a+5))d=[a+7]
echo $a
echo $b
echo $c
echo $d
*
/
%
**
–常用的bash内部命令
echo exit continue break
例二:循环 (使用sh $0)
echo ‘aaaaa’
sleep 3
sh $0 --这一句是代表再重新执行上面的代码
exit 10 --这个定义退出整个脚本,但是在这个脚本里永远也到不了这一步
for 循环语句
for var in 1 2 3 4 5
do
command
done
for (( var=1 ; var < 6 ; var++ ))
do
command
done
for (( var=5; var >0 ; var–))
do
command
done
例三: for循环举例
for i in 1 2 3 4 5
do
echo -ne “$i\n”–如果不使用-n参数,默认会一个数字打印一行,-e参数代表后面如果使用\n(换行),\t(制表符)等这种字符时会生效,所以这句和echo $i效果一样
done
for i in seq 100
--产生1到100的序列
do
echo -n $i
done
for i in {50…100}
do
echo -n $i
done
echo
for i in $(seq 100) --也是产生1到100的序列,这是另一种写法
do
echo -n $i
done
for i in /etc/* --也可以把一个目录下面所有文件和目录循环赋值给变量i,常用于批量改名或改权限
do
echo $i
done
for i in /etc/*
do
[ -f $i ] && echo $i --加一个判断,只要里面的文件
done
思考:
要把/etc/下所有的文件包括子目录下的文件也找出来,并echo出来
for i in find /etc/ -type f
do
echo $i
done
find /etc/ -type f | while read i --把前面find的结果通过管道read给i变量
do
echo $i
done
批量加10个用户,以student1到student10命名,并统一加一个新组,组名为class,统一改密码为123(统一把密码改成就是自己的用户名,使用passwd命令和EOF结合?)
groupadd class
for i in seq 10
do
useradd -G class “student
i
"
e
c
h
o
123
∣
p
a
s
s
w
d
−
−
s
t
d
i
n
"
s
t
u
d
e
n
t
i" echo 123 | passwd --stdin "student
i" echo123∣passwd−−stdin"studenti” > /dev/null 2>&1
done
----------------
groupadd class
for i in seq 10
do
useradd -G class “student
i
"
p
a
s
s
w
d
"
s
t
u
d
e
n
t
i" passwd "student
i"passwd"studenti” < /dev/null 2>&1
student
i
s
t
u
d
e
n
t
i student
istudenti
EOF --注意这几行要顶格写
done
批量删除刚才建立的10个用户(包括把用户的家目录和邮件目录给删除干净)
for i in seq 10
do
userdel -r “student$i”
done
groupdel class
计算1到100的奇数之和
total=0
for (( i=1 ;i <101 ;i+=2 ))
do
total=
[
[
[total+$i]
done
echo $total
total=0
for i in seq 100
do
[
[
[
[i%2] -ne 0 ] && total=
[
[
[total+$i]
done
echo $total
写一个脚本,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里(如果例举整个网段的254个IP花的时间比较长,可以只分类2.2.2.1到2.2.2.10这十个IP)
[ -e /tmp/upip ] && rm -rf /tmp/upip
[ -e /tmp/downip ] && rm -rf /tmp/downip
for i in seq 10
do
ip=“2.2.2.$i”
a=ping -c 1 $ip |grep transmitted |cut -d" " -f4
[ KaTeX parse error: Expected 'EOF', got '&' at position 11: a -eq 0 ] &̲& echo "ip" >> /tmp/downip || echo “$ip” >> /tmp/upip
done
echo “能ping通的ip有:”
cat /tmp/upip
echo “#################”
echo “不能ping通的ip有:”
cat /tmp/downip
read输入一个目录,找出目录下为死链接的文件(同步也要判断子目录下的所有文件又如何写?)
read -p “输入一个目录:” dir
for i in $dir/*
do
[ -h $i -a ! -e KaTeX parse error: Expected 'EOF', got '&' at position 5: i ] &̲& echo "i是死链接"
done
------------------------
read -p “输入一个目录:” dir
for i in find $dir -type l
do
[ ! -e KaTeX parse error: Expected 'EOF', got '&' at position 5: i ] &̲& echo "i是死链接"
done
用read输入一个目录,使用脚本判断目录里每个文件的权限(是否可读,是否可写,是否可执行)
#!/bin/bash
read -p “输入一个目录:” dir
[ -d $dir ] && echo “是一个目录,继续执行” || echo “不是一个目录,请重新运行脚本”
for i in find $dir -type f
do
[ -r $i ] && r=yes || r=no
[ -w $i ] && w=yes || w=no
[ -x $i ] && x=yes || x=no
echo “当前用户对$i的权限为:”
echo $r
echo $w
echo $x
done
用read输入一个用户,再用read输入一个目录,使用脚本判断目录里每个文件的权限(read输入的用户对其是否可读,是否可写,是否可执行)
–提示:如何去用root用户去变成一个普通用户身份去执行脚本? man su 查看-c参数
–第一个脚本
[root@dns shell02]# cat example10.sh
#!/bin/bash
read -p “输入你要判断的用户名:” name
id $name > /dev/null 2>&1
if [ $? -eq 0 ];then
echo “用户名存在,继续执行”
else
echo “用户名不存在,请重新运行脚本,输入正确的用户名”
exit 1
fi
su - $name -c “sh /tmp/example102.sh”
第二个脚本: --此脚本最后放到/tmp下,让所有用户可以执行
[root@dns shell02]# cat example102.sh
#!/bin/bash
user=id | cut -d"(" -f2 |cut -d ")" -f1
--查找自己的用户名,可以用whoami替代
read -p “输入一个目录:” dir
if [ -d $dir ];then
echo “是一个目录,继续执行”
else
echo “不是一个目录或目录不存在,请重新运行脚本”
exit 1
fi
for i in find $dir -type f
do
[ -r $i ] && r=yes || r=no
[ -w $i ] && w=yes || w=no
[ -x $i ] && x=yes || x=no
echo “
u
s
e
r
对
user对
user对i的权限为:”
echo “read=
r
"
e
c
h
o
"
w
r
i
t
e
=
r" echo "write=
r"echo"write=w”
echo “execute=$x”
done
=================================
until 循环 --直到满足条件就退出循环
例十二:用until实现打印1到5
a=1
until [ $a -gt 5 ] for ((a=1;a>5;a++))
do
echo $a
let a++
done
练习:
使用unitl去改写上面的批量加用户的脚本
groupadd class
i=1
until [ $i -gt 10 ]
do
useradd -G class “student
i
"
p
a
s
s
w
d
"
s
t
u
d
e
n
t
i" passwd "student
i"passwd"studenti” < /dev/null 2>&1
student
i
s
t
u
d
e
n
t
i student
istudenti
EOF
let i++
done
=====================================================
while 用于不定次数的循环,或死循环
while [条件]
do
command
done
死循环两种:
while true
do
command
done
while :
do
command
done
写一个30秒就时间同步2.2.2.35一次的脚本
while true
do
rdate -s 2.2.2.35
sleep 30
done
–不定次数循环,当满足一定条件,就退出循环
while true
do
rdate -s 2.2.2.35 > /dev/null 2>&1
[ $? -ne 0 ] && echo “rdate failed” | mail root && exit 100
sleep 30
done
写一个小闹钟的程序 (每秒都显示时间,当到了时间,就循环打印5个*,间隔一秒)
while true
do
now=date +%H:%M:%S
echo $now
sleep 1
clear
if [ “
1
"
=
=
"
1" == "
1"=="now” ];then
for (( i=0;i<10;i++))
do
echo -n “*”
sleep 1
done
break --在这里是表示打完*后,跳出循环,继续执行循环体后面的代码;如果换成exit则表示直接退出脚本
fi
done
echo
echo ‘it is time’
#!/bin/bash
read -p “输入你定时的时间(格式为时:分:秒):” ntime
while true
do
now=date +%H:%M:%S
echo
n
o
w
s
l
e
e
p
1
c
l
e
a
r
i
f
[
"
now sleep 1 clear if [ "
now sleep1 clear if["ntime" == “$now” ];then
for (( i=0;i<10;i++))
do
echo -n “*”
sleep 1
done
break
fi
done
echo
echo “时间到了”
break continue exit
–continue表示循环体内下面的代码不执行,重新开始循环
–break表示跳出循环体,执行循环体外的下面的代码
–exit表示直接跳出程序
写一个简单的猜数字的脚本
#!/bin/bash
num=74
while true
do
read -p “guess your number:” guess
[ $guess -gt $num ] && echo “大了” && continue
[ $guess -lt $num ] && echo “小了” && continue
[ $guess -eq $num ] && echo “对了” && break
done
echo “砸蛋”
找出/etc/的所有以conf结尾的文件,拷到/tmp/conf目录下,然后全部把conf结尾换成以html结尾
[ -d /tmp/conf ] && rm /tmp/conf -rf && mkdir /tmp/conf
find /etc/ -name “*.conf” -exec cp {} /tmp/conf ;
cd /tmp/conf
rename .conf .html *
#!/bin/bash
if [ -d /tmp/conf ];then
rm -rf /tmp/conf
mkdir /tmp/conf
else
mkdir /tmp/conf
fi
find /etc/ -name “*.conf” -exec cp {} /tmp/conf ;
cd /tmp/conf
for i in ./*
do
head=echo $i |awk -F".conf" '{print $1}'
mv $i $head.html
done
找出/usr/share/doc目录下所有文件名为index.html的文件,把他们拷到/tmp/index目录下,文件名按找到的先后更改,第一个找到的为index.html.1,第二个找到的为index.html.2。。。。类推
[ -e /tmp/index -a -d /tmp/index ] && rm -rf /tmp/index && mkdir /tmp/index
i=1
find /usr/share/doc/ -name index.html | while read a
do
cp
a
/
t
m
p
/
i
n
d
e
x
/
i
n
d
e
x
.
h
t
m
l
.
a /tmp/index/index.html.
a/tmp/index/index.html.i
let i++
done
==============================================================
===========================
循环嵌套
打印出
1
为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!
这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。
本份面试集锦涵盖了
- 174 道运维工程师面试题
- 128道k8s面试题
- 108道shell脚本面试题
- 200道Linux面试题
- 51道docker面试题
- 35道Jenkis面试题
- 78道MongoDB面试题
- 17道ansible面试题
- 60道dubbo面试题
- 53道kafka面试
- 18道mysql面试题
- 40道nginx面试题
- 77道redis面试题
- 28道zookeeper
总计 1000+ 道面试题, 内容 又全含金量又高
- 174道运维工程师面试题
1、什么是运维?
2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
3、现在给你三百台服务器,你怎么对他们进行管理?
4、简述raid0 raid1raid5二种工作模式的工作原理及特点
5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
7、Tomcat和Resin有什么区别,工作中你怎么选择?
8、什么是中间件?什么是jdk?
9、讲述一下Tomcat8005、8009、8080三个端口的含义?
10、什么叫CDN?
11、什么叫网站灰度发布?
12、简述DNS进行域名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
又全含金量又高**
- 174道运维工程师面试题
1、什么是运维?
2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
3、现在给你三百台服务器,你怎么对他们进行管理?
4、简述raid0 raid1raid5二种工作模式的工作原理及特点
5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
7、Tomcat和Resin有什么区别,工作中你怎么选择?
8、什么是中间件?什么是jdk?
9、讲述一下Tomcat8005、8009、8080三个端口的含义?
10、什么叫CDN?
11、什么叫网站灰度发布?
12、简述DNS进行域名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!