1、编写脚本,接受二个位置参数,magedu和/www,判断系统是否有magedu,如果没有则自动创建magedu用户,并自动设置家目录为/www

[root@test qiuhom]#cat checkuser.sh
#!/bin/bash
user=$1
[ $UID -ne 0 ] && echo "this script must root run it" && exit 3
[ $# -ne 2 ] && echo "usage bash $0 user homedir" && exit 4
if [[ $2 =~ ^(\/.*) ]];then
homedir=$2
else
echo "input homedir must directory"
exit 6
fi
if getent passwd $user &> /dev/null ;then
echo "$user is exist"
exit 7
else
useradd $user -m -d $homedir
[ $? -eq 0 ] && echo $user is create successful
fi [root@test qiuhom]#sh checkuser.sh tom
usage bash checkuser.sh user homedir
[root@test qiuhom]#sh checkuser.sh qiuhom /home/qiuhom
qiuhom is exist
[root@test qiuhom]#sh checkuser.sh tom tom
input homedir must directory
[root@test qiuhom]#sh checkuser.sh magedu /www
magedu is create successful
[root@test qiuhom]#getent passwd magedu
magedu:x:1004:1004::/www:/bin/bash
[root@test qiuhom]#ll /www/ -d
drwx------ 3 magedu magedu 78 11月 26 22:13 /www/
[root@test qiuhom]#ll /www/ -a
总用量 16
drwx------ 3 magedu magedu 78 11月 26 22:13 .
dr-xr-xr-x. 22 root root 4096 11月 26 22:13 ..
-rw-r--r-- 1 magedu magedu 18 10月 31 2018 .bash_logout
-rw-r--r-- 1 magedu magedu 193 10月 31 2018 .bash_profile
-rw-r--r-- 1 magedu magedu 231 10月 31 2018 .bashrc
drwxr-xr-x 4 magedu magedu 39 11月 3 14:33 .mozilla
[root@test qiuhom]#

2、使用expect实现自动登录系统。

[root@ansible_centos6 ~]# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:41:ff:c0 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.128/24 brd 192.168.0.255 scope global eth1
inet6 fe80::20c:29ff:fe41:ffc0/64 scope link
valid_lft forever preferred_lft forever
[root@ansible_centos6 ~]# cat autologin.exp
#!/usr/bin/expect
set ip [lindex $argv 0]
set user [lindex $argv 1]
set port [lindex $argv 2]
set passwd [lindex $argv 3]
set timeout 10
spawn ssh $user@$ip -p $port expect {
"yes/no" {send "yes\n";exp_continue}
"password" {send "$passwd\n"}
} interact
[root@ansible_centos6 ~]# expect autologin.exp 192.168.0.99 qiuhom 41319 admin
spawn ssh qiuhom@192.168.0.99 -p 41319
qiuhom@192.168.0.99's password:
[qiuhom@test ~]$ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:30:18:51:af:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.99/24 brd 192.168.0.255 scope global noprefixroute enp2s0
valid_lft forever preferred_lft forever
inet 172.16.1.2/16 brd 172.16.255.255 scope global noprefixroute enp2s0:0
valid_lft forever preferred_lft forever
inet6 fe80::230:18ff:fe51:af3c/64 scope link
valid_lft forever preferred_lft forever
3: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 00:30:18:51:af:3d brd ff:ff:ff:ff:ff:ff
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:bd:55:ad:ff brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
[qiuhom@test ~]$

3、简述linux操作系统启动流程

此图片来自网络

  1) 计算机加电自检,当给计算机通电后,其主板上的coms芯片会执行bios上的程序,程序会对其硬件信息去检查是否存在以及是否能够正常工作,最后初始化硬件;
  2)bios启动引导,此阶段分两个步骤,第一步是查找引导设备,查找到第一个有引导程序的设备即为启动引导设备;第二步是找到了引导设备,读取引导设备上的mbr(第一扇区的前446字节数bootloader 中间64字节数分区表 最后两个字节是55aa共512字节);
  3)grub启动引导,grub提供给我们选择菜单,我们可以选择其不同内核版本的内核进行启动(如果是多内核的情况),然后把我们选择的内核装载到内存中解压展开,最后读取grub配置文件找到initrd.img(此文件存放各种硬件驱动以便后续切换根)
  4)内核初始化,此阶段主要是探测可识别的硬件,加载硬件驱动,切换根分区(挂载rootfs),运行系统第一个进程init进程初始化系统;
  5)系统初始化,此阶段主要是初始化软件运行环境,它会读取配文件/init/inittab(centos5和6)或者systemd(centos7)读取默认运行级别,然后运行该默认级别下的脚本,启停默认级别下定义的服务(centos7采用systemd来启停服务,centos6是采用init进程来启停服务),最后登录终端;

4、破解centos7 密码。

方式一:

  1)启动时按任意键停止启动,按e键进入编辑模式;

  2)将光标移动到linux16开始的行,添加内核参数rd.break

  3)按ctrl + x 启动

  4)以只读方式重新挂载根;mount -o remount,rw /sysroot

  说明:可以看到我们Ctrl + x 重新进入系统正在的根在/sysroot上,并且是只读挂载

  5)切换根chroot /sysroot

  6)更改密码 passwd root

  7) touch /.autorelabel ,并退出当前切换后的根分区

  说明:可以看到我们不退出当前切换后的根分区是不能重启的

  8) 重新启动系统;reboot

方式二:

  1)启动时按任意键暂停启动,并按e键进入编辑模式

  2)将光标移动至linux16开始的行,并在末尾追加 rw init=/sysroot/bin/sh

  3)Ctrl+x启动

  说明:用以上启动方式,我们可以省略重新以读写方式挂载/sysroot,后续直接切换根,更改密码

  4)切换根chroot /sysroot

  5)更改root密码 passwd root

  6)更新/.autorelabel文件的时间戳touch /.autorelabel  (此文件的作用是下次重新启动它会重新标记selinux的文件系统)

  7)exit   并重启

Linux shell脚本编程及系统启动实践的更多相关文章

  1. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  2. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  3. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  4. Linux Shell脚本编程--Linux特殊符号大全

    Linux Shell脚本编程--Linux特殊符号大全 linux_shell 特殊符号的介绍 2011

  5. Linux Shell脚本编程while语句

    Linux Shell脚本编程while语句案例 1,每隔3秒,打印一次系统负载 #!/bin/bash while truedo    uptime    sleep 3done 2,把监控结果保存 ...

  6. Linux Shell脚本编程-基础1

    概述:  shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...

  7. Linux shell脚本编程基础之练习篇

    shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...

  8. 【学习】Linux Shell脚本编程

    1.脚本的组成和执行 Linux shell脚本的结构并不复杂,其主要由变量.内部命令以及shell的语法结构和一些函数.其他命令行的程序等组成,以下是一个简单的shell脚本. #!/bin/bas ...

  9. [linux] shell脚本编程-xunsearch安装脚本学习

    安装脚本setup.sh #!/bin/sh # FULL fast install/upgrade script # See help message via `--help' # $Id$ # s ...

随机推荐

  1. Eclipse中如何添加相对路径的外部jar包

    在eclipse中进行java编程的时候,常常需要引用外部jar包.而采用相对路径引用jar包可以大大方便java工程的拷贝,这样使得java工程从一个路径转移到另一个路径时不用大费周章的修改外包ja ...

  2. Flask的session

    ### session:1. session的基本概念:session和cookie的作用有点类似,都是为了存储用户相关的信息.不同的是,cookie是存储在本地浏览器,session是一个思路.一个 ...

  3. python-参数化-(2)(数据库判断是否存在并返回满足条件的数据)

    1.根据python-参数化-(1),生成的数据号码 在数据库查询后判断是否存在若不存在返回手机号码,若存在返回该手机号码对应数据的信息,未封装成类或函数上代码 import pymysqlconn= ...

  4. 使用ClickOnce发布Windows应用程序

    前言 因本人工作需要,在一名非常非常好的老师的指导下,入门了C#,再次向老师表示感谢. 本人平时经常遇到的业务就是将数据下发给各部门,并让各部门再上报,此过程中经常会遇到数据格式不正确,数据错误等诸多 ...

  5. Python 教你识别淘宝刷单,买到称心如意的商品

    发际线堪忧的小 Q,为了守住头发最后的尊严,深入分析了几十款防脱洗发水的评价,最后综合选了一款他认为最完美的防脱洗发水. 一星期后,他没察觉到任何变化. 一个月后,他用卷尺量了量,发际线竟然后退了 0 ...

  6. SpringBoot:@Scope注解学习

    概述 先通过注解的javadoc,可以了解到,@Scope在和@Component注解一起修饰在类上,作为类级别注解时,@Scope表示该类实例的范围,在和@Bean一起修饰在方法上,作为方法级别注解 ...

  7. QAnet Encoder

    #!/usr/bin/python3# -*- coding: utf-8 -*-'''date: 2019/8/19mail: cally.maxiong@gmail.comblog: http:/ ...

  8. 使用cJSON库解析和构建JSON字符串

    使用cJSON库解析和构建JSON字符串 前言 其实之前的两篇博文已经介绍了json格式和如何使用cJSON库来解析JSON: 使用cJSON库解析JSON JSON简介 当时在MCU平台上使用时,会 ...

  9. js实现防抖函数和节流函数

    防抖函数(debounce) 含义:防抖函数指的是在特定的时间内没有再次触发,才得以进行接下来的函数运行: 用途:当window.onresize不断的调整大小的时候,为了避免不断的重排与重绘,可以用 ...

  10. oracle产销存的写法

    with TEMP as (select sum(MMT.TRANSACTION_QUANTITY) QTY_QC, MMT.INVENTORY_ITEM_ID --,CAH.Legal_Entity ...