馬哥教育網絡班18期+第10周課程練習

博客作業10周.md—E:\Documents

CentOS啟動流程

CentOS啟動流程

1. 加電自檢

通電后主板CMOS中的BIOS(基本輸入輸出系統)將進行硬件自檢并簡單設置,根據硬盤等相關設備情況進入下一步

2. 引導加載次序:BOOT Sequence

按次序查找各引導設備,第一個有引導程序的設備即為本次啟動用到設備

3. bootloader:

引導加載器,用來引導系統加載的程序

  • windows: ntloader

  • Linux:

    • LILO:LInux LOader

    • GRUB: GRand Uniform Bootloader

    • GRUB 0.X: GRUB Legacy

    • GRUB 1.x: GRUB2

功能:提供一個菜單,允許用戶選擇要啟動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,并把系統控制權移交給內核。

4. GRUB引導加載器

GRUB 是bootloader階段的引導程序,CentOS主要通過GRUB(GRand Unified Bootloader)引導。

GRUB引導步驟:grub legacy

  • stage1: mbr(磁盤分區表)

  • stage1_5: mbr之后的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統;

  • stage2:磁盤分區(/boot/grub/)

    配置文件:/boot/grub/grub.conf <– /etc/grub.conf

stage2內核等通常放置于一個基本磁盤分區;

GRUB的功用

1. 提供菜單、并提供交互式接口  
    e: 編輯模式,用于編輯菜單;  
    c: 命令模式,交互式接口;  
2. 加載用戶選擇的內核或操作系統  
    允許傳遞參數給內核  
    可隱藏此菜單  
3. 為菜單提供了保護機制  
    為編輯菜單進行認證  
    為啟用內核或操作系統進行認證

常用命令

#help: 獲取幫助列表
#help KEYWORD: 詳細幫助信息
#find (hd#,#)/PATH/TO/SOMEFILE:
#root (hd#,#)設定grub的根設備
#kernel /PATH/TO/KERNEL_FILE: 設定本次啟動時用到的內核文件;額外還可以添加許多內核支持使用的cmdline參數;
#例如:init=/path/to/init, selinux=0
#initrd /PATH/TO/INITRAMFS_FILE: 設定為選定的內核提供額外文件的ramdisk;
#boot: 引導啟動選定的內核;

配置文件

[root@node1 ~]# cat /boot/grub/grub.conf 
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/vg_node1-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-642.1.1.el6.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-642.1.1.el6.x86_64 ro root=/dev/mapper/vg_node1-lv_root rd_NO_LUKS rd_LVM_LV=vg_node1/lv_swap rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=vg_node1/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-642.1.1.el6.x86_64.img

常用配置項

default=?: 設定默認啟動的菜單項;落單項(title)編號從0開始;
timeout=?:指定菜單項等待選項選擇的時長;
splashimage=(hd?,?)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑;
hiddenmenu:隱藏菜單;
password [--md5] STRING: 菜單編輯認證;
title TITLE:定義菜單項“標題”, 可出現多次;
root (hd?,?):grub查找stage2及kernel文件所在設備分區;為grub的“根”;
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啟動的內核
initrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件;
password [--md5] STRING: 啟動選定的內核或操作系統時進行認證;

5. 進入Kernel

在GRUB中選擇對應的kernel后,kernel會對自身進行初始化

自身初始化

  1. 探測可識別到的所有硬件設備;

  2. 加載硬件驅動程序;(有可能會借助于ramdisk加載驅動)

    ramdisk:內核中的特性之一:使用緩沖和緩存來實現對磁盤上的文件訪問

  3. 以只讀方式掛載根文件系統;

  4. 運行用戶空間的第一個應用程序:/sbin/init

init程序的類型

  • SysV: init, CentOS 5
       配置文件:/etc/inittab

  • Upstart: init, CentOS 6
       配置文件:/etc/inittab, /etc/init/*.conf

  • Systemd:systemd, CentOS 7
       配置文件:/usr/lib/systemd/system, /etc/systemd/system

至此,可以總結為:

POST --> BootSequence (BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只讀) --> init

6. 運行init

CentOS6的init位置為/sbin/init,共分7個級別

運行級別:為了系統的運行或維護等應用目的而設定

0:關機
1:單用戶模式(root, 無須登錄), single, 維護模式;
2: 多用戶模式,會啟動網絡功能,但不會啟動NFS;維護模式;
3:多用戶模式,正常模式;文本界面;
4:預留級別;可同3級別;
5:多用戶模式,正常模式;圖形界面;
6:重啟

默認級別:3, 5

切換級別:init ?
例如 init 0 表示關機

[root@node1 ~]# init 0

查看級別
runlevel
who -r

[root@node1 ~]# runlevel
N 3
[root@node1 ~]# who -r
         運行級別 3 2016-06-20 13:12

配置文件:/etc/inittab,CenOS 6的upstart程序配置文件還包括/etc/init/*.conf

配置文件格式為:id:runlevel:action:process
每行定義一個級別

id:指入口標識符,它是一個字符串,對于getty或mingetty等其他login程序項,要求id與tty的編號相同,否則getty程序將不能正常工作。
runlevel:init的系統運行級別
action:是用來定義后面process的運行方式,常用的有下面幾種
        wait: 切換至此級別運行一次;
        respawn:此process終止,就重新啟動之;
        initdefault:設定默認運行級別;process省略;
        sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit
process:為具體的執行程序

下例中,我的配置文件顯示為id:3:initdefault:,表示默認運行級別3,即多用戶模式的文本界面

[root@node1 ~]# cat /etc/inittab 

# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:3:initdefault:

設定系統初始化方式時,例如 l3:3:wait:/etc/rc.d/rc 3表示讀取 意味著讀取/etc/rc.d/rc3.d/下的配置文件

ls /etc/rc.d/rc3.d/
K10saslauthd    S02lvm2-monitor  S12rsyslog           S26udev-post       S99local
K15svnserve     S08ip6tables     S22messagebus        S55sshd
K50netconsole   S08iptables      S25blk-availability  S80postfix
K87restorecond  S10network       S25netfs             S90crond
K89rdisc        S11auditd        S26haldaemon         S99libvirt-guests

說明:

K開頭的文件,##運行次序;數字越小,越先運行;數字越小的服務,通常為依賴到別的服務;
S開頭的文件,##運行次序;數字越小,越先運行;數字越小的服務,通常為被依賴到的服務;

7. 運行初始化腳本

系統初始化腳本對應的文件是/etc/rc.d/rc.sysinit,會在系統啟動時運行一次

[root@node1 ~]# cat /etc/rc.d/rc.sysinit 
#!/bin/bash
#
# /etc/rc.d/rc.sysinit - run once at boot time
#
# Taken in part from Miquel van Smoorenburg's bcheckrc.
#

HOSTNAME=$(/bin/hostname)

set -m

if [ -f /etc/sysconfig/network ]; then
    . /etc/sysconfig/network
fi
if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then
    HOSTNAME=localhost
fi
#后面省略

主要作用

  1. 設置主機名;

  2. 設置歡迎信息;

  3. 激活udev和selinux;

  4. 掛載/etc/fstab文件中定義的文件系統;

  5. 檢測根文件系統,并以讀寫方式重新掛載根文件系統;

  6. 設置系統時鐘;

  7. 激活swap設備;

  8. 根據/etc/sysctl.conf文件設置內核參數;

  9. 激活lvm及software raid設備;

  10. 加載額外設備的驅動程序;

  11. 清理操作;

8.啟動系統服務

centos6下的系統服務腳本都放在/etc/rc.d/init.d或者/etc/init.d中,因為建立了鏈接,所以內容是一樣的

[root@node1 ~]ll /etc/init.d
lrwxrwxrwx 1 root root 11 6月  11 22:34 /etc/init.d -> rc.d/init.d
[root@node1 ~]# ls /etc/init.d/
auditd            halt            lvm2-lvmetad  network      sandbox    udev-post
blk-availability  ip6tables       lvm2-monitor  postfix      saslauthd
crond             iptables        messagebus    rdisc        single
functions         killall         netconsole    restorecond  sshd
haldaemon         libvirt-guests  netfs         rsyslog      svnserve

chkconfig命令可以用來查看服務在所有級別的啟動或關閉設定情形:chkconfig [--list] [name]

查看chkconfig –list

[root@node1 ~]# chkconfig --list
auditd          0:關閉    1:關閉    2:啟用    3:啟用    4:啟用    5:啟用    6:關閉
blk-availability    0:關閉    1:啟用    2:啟用    3:啟用    4:啟用    5:啟用    6:關閉
crond           0:關閉    1:關閉    2:啟用    3:啟用    4:啟用    5:啟用    6:關閉
haldaemon       0:關閉    1:關閉    2:關閉    3:啟用    4:啟用    5:啟用    6:關閉
ip6tables       0:關閉    1:關閉    2:啟用    3:啟用    4:啟用    5:啟用    6:關閉
iptables        0:關閉    1:關閉    2:啟用    3:啟用    4:啟用    5:啟用    6:關閉

9. 設置登陸終端

根據終端配置打印登陸提示符

初始化階段總結為

/sbin/init --> (/etc/inittab) --> 設置默認運行級別 --> 運行系統初始腳本、完成系統初始化 --> 關閉對應下需要關閉的服務,啟動需要啟動服務 --> 設置登錄終端

整體總結

POST --> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 設定默認運行級別 --> 系統初始化腳本 --> 關閉或啟動對應級別下的服務 --> 啟動終端

習題

習題1

為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;
 (1) 為硬盤新建兩個主分區;并為其安裝grub;
 (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;
 (3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;
 (4) 為grub提供配置文件;
 (5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;

查詢磁盤情況

    [root@node1 ~]# fdisk -l /dev/sd[a-z]
   
    Disk /dev/sdb: 21.5 GB, 21474836480 bytes
    255 heads, 63 sectors/track, 2610 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x00000000

磁盤分區并格式化

[root@node1 ~]# fdisk /dev/sdb


[root@node1 ~]# partx -a /dev/sdb
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
[root@node1 ~]# cat /proc/partitions 
major minor  #blocks  name

   8        0   20971520 sda
   8        1     512000 sda1
   8        2   20458496 sda2
   8       16   20971520 sdb
   8       17     112423 sdb1
   8       18    5253255 sdb2
 253        0    6144000 dm-0
 253        1    2031616 dm-1
 253        2    4087808 dm-2
 253        3    8192000 dm-3


[root@node1 ~]# mke2fs -t ext4 /dev/sdb1


[root@node1 ~]# mke2fs -t ext4 /dev/sdb2

創建目錄并掛載分區

[root@node1 ~]# mkdir /mnt/boot /mnt/sysroot
[root@node1 ~]# ls /mnt
boot  sysroot
[root@node1 ~]# mount /dev/sdb1 /mnt/boot/
[root@node1 ~]# mount /dev/sdb2 /mnt/sysroot/
[root@node1 ~]# ls /mnt/boot
lost+found
[root@node1 ~]# ls /mnt/sysroot/
lost+found

拷貝kernel和ramfs文件

[root@node1 ~]# cp /boot/initramfs-2.6.32-642.1.1.el6.x86_64.img /mnt/boot/initramfs.img
[root@node1 ~]# cp /boot/vmlinuz-2.6.32-642.1.1.el6.x86_64 /mnt/boot/vmlinuz
[root@node1 ~]# ls /mnt/boot/
initramfs.img  lost+found  vmlinuz

安裝grub

[root@node1 boot]# grub-install --root-directory=/mnt /dev/sdb
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /mnt/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb

創建根目錄并拷貝指定程序

[root@node1 ~]# cd /mnt/sysroot/
[root@node1 sysroot]# mkdir -pv bin sbin boot root home usr etc var tmp lib lib64 proc dev mnt media
[root@node1 sysroot]# ls
bin   dev  home  lib64       media  proc  sbin  usr
boot  etc  lib   lost+found  mnt    root  tmp   var
[root@node1 sysroot]# cp /bin/bash /bin/ls /bin/cat /mnt/sysroot/bin/

拷貝庫文件

[root@node1 bin]# ldd /bin/bash
    
[root@node1 bin]# cp /lib64/libtinfo.so.5 /mnt/sysroot/lib64/
[root@node1 bin]# cp /lib64/libdl.so.2 /mnt/sysroot/lib64/
[root@node1 bin]# cp /lib64/libc.so.6 /mnt/sysroot/lib64/
[root@node1 bin]# cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64/
[root@node1 bin]# ldd /bin/ls
[root@node1 bin]# cp /lib64/libselinux.so.1 /mnt/sysroot/lib64/
[root@node1 ~]# cp /lib64/librt.so.1 /mnt/sysroot/lib64/
[root@node1 bin]# cp /lib64/libcap.so.2 /mnt/sysroot/lib64/
[root@node1 bin]# cp /lib64/libacl.so.1 /mnt/sysroot/lib64/
[root@node1 bin]# cp /lib64/libpthread.so.0 /mnt/sysroot/lib64/
[root@node1 bin]# cp /lib64/libattr.so.1 /mnt/sysroot/lib64/
[root@node1 bin]# ldd /bin/cat

修改grub配置文件

[root@node1 ~]# vim /mnt/boot/grub/grub.conf 

default=0
timeout=5
title CentOS (Express)
    root (hd0,0)
    kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
    initrd /initramfs.img

關閉用來設置的虛擬機,將硬盤加載到新虛擬機后,正常啟動bash,并能執行ls和cat命令

習題2

制作一個kickstart文件以及一個引導鏡像。描述其過程。

anaconda的配置方式

(1) 交互式配置方式;
(2) 通過讀取事先給定的配置文件自動完成配置;
   按特定語法給出的配置選項;
       kickstart文件;

安裝引導選項

text: 文本安裝方式
method: 手動指定使用的安裝方法
與網絡相關的引導選項:

ip=IPADDR
netmask=MASK
gateway=GW
dns=DNS_SERVER_IP
ifname=NAME:MAC_ADDR

與遠程訪問功能相關的引導選項

vnc
vncpassword='PASSWORD'

指明kickstart文件的位置

ks=
    DVD drive: ks=cdrom:/PATH/TO/KICKSTART_FILE
    Hard drive: ks=hd:/device/drectory/KICKSTART_FILE
    HTTP server: ks=http://host:port/path/to/KICKSTART_FILE
    FTP server: ks=ftp://host:port/path/to/KICKSTART_FILE
    HTTPS server: ks=https://host:port/path/to/KICKSTART_FILE

啟動緊急救援模式

rescue

kickstart文件的格式
命令段:指明各種安裝前配置,如鍵盤類型等;
程序包段:指明要安裝的程序包組或程序包,不安裝的程序包等;

%packages
@group_name
package
-package
%end

腳本段

%pre: 安裝前腳本
    運行環境:運行于安裝介質上的微型Linux環境

%post: 安裝后腳本
    運行環境:安裝完成的系統;

命令段中的命令
必備命令

authconfig: 認證方式配置
    authconfig --useshadow  --passalgo=sha512
bootloader:bootloader的安裝位置及相關配置
    bootloader --location=mbr --driveorder=sda --append="crashkernel=auto crashkernel=auto rhgb rhgb quiet quiet"
keyboard: 設定鍵盤類型
lang: 語言類型
part: 創建分區
rootpw: 指明root的密碼
timezone: 時區

可選命令

install OR upgrade
text: 文本安裝界面
network
firewall
selinux
halt
poweroff
reboot
repo
user:安裝完成后為系統創建新用戶
url: 指明安裝源

創建kickstart文件的方式
   (1) 直接手動編輯;
       依據某模板修改;
   (2) 可使用創建工具:system-config-kickstart (CentOS 6)
       依據某模板修改并生成新配置;

檢查ks文件的語法錯誤:ksvalidator
   # ksvalidator /PATH/TO/KICKSTART_FILE

創建引導光盤
   # mkisofs -R -J -T -v &ndash;no-emul-boot &ndash;boot-load-size 4 &ndash;boot-info-table -V &ldquo;CentOS 6.8 x86_64 boot&rdquo; -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myiso/

習題3

寫一個腳本
 (1) 能接受四個參數:start, stop, restart, status
  start: 輸出“starting 腳本名 finished.”
  &hellip;
 (2) 其它任意參數,均報錯退出;

#!/bin/bash
#
# chkconfig: - 88 12
# description: test service script
#
prog=$(basename $0)
lockfile=/var/lock/subsys/$prog

start() {
    if [ -e $lockfile ]; then
    echo "$prog is aleady running."
    return 0
    else
    touch $lockfile
    [ $? -eq 0 ] && echo "Starting $prog finished."
    fi
}

stop() {
    if [ -e $lockfile ]; then
    rm -f $lockfile && echo "Stop $prog ok."
    else
    echo "$prog is stopped yet."
    fi
}

status() {
    if [ -e $lockfile ]; then
    echo "$prog is running."
    else
    echo "$prog is stopped."
    fi
}

usage() {
    echo "Usage: $prog {start|stop|restart|status}"
}

if [ $# -lt 1 ]; then
    usage
    exit 1
fi

if [ $1 != 'start' -a $1 !='stop' -a  $1 != 'restart' -a $1 != 'status' ];then
    usage
    exit 2
fi

case $1 in
start)
    start
    ;;
stop)
    stop
    ;;
restart)
    stop
    start
    ;;
status)
    status
    ;;
*)
    usage
esac

習題4

寫一個腳本,判斷給定的用戶是否登錄了當前系統;
 (1) 如果登錄了,則顯示用戶登錄,腳本終止;
 (2) 每3秒鐘,查看一次用戶是否登錄;

#!/bin/bash
#
read -p "Enter a user name: " username
while true; do
    if who | grep "^$username" &> /dev/null; then
        break
    fi
    sleep 3
done

echo "$username logged on."

習題5

寫一個腳本,顯示用戶選定要查看的信息;
  cpu) display cpu info
  mem) display memory info
  disk) display disk info
  quit) quit
  非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;

#!/bin/bash
#
cat << EOF
cpu) show cpu information;
mem) show memory information;
disk) show disk information;
quit) quit
============================
EOF

read -p "Enter a option: " option
while [ "$option" != 'cpu' -a "$option" != 'mem' -a "$option" != 'disk' -a "$option" != 'quit' ]; do
    read -p "Wrong option, Enter again: " option
done

case "$option" in
cpu)
    lscpu
    ;;
mem)
    cat /proc/meminfo
    ;;
disk)
    fdisk -l
    ;;
*)
    echo "Quit..."
    exit 0
    ;;
esac

習題6

寫一個腳本
 (1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來;
 (2) 提示用戶輸入一個用戶名或輸入“quit”退出;
   當輸入的是用戶名,則調用函數顯示用戶信息;
   當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:

#!/bin/bash
#
function getinfo {

if id $op &> /dev/null;then
    grep -E '^('$op')\>' /etc/passwd | cut -d: -f1,3,7;read -p "Enter a username or quit:" op
else 
    read -p  "wrong argument,plsease enter a username or quit:" op
fi
}

read -p "Enter a username or quit:" op
while [[ $op != "quit" ]];do
    getinfo $op
done

練習7

寫一個腳本,完成如下功能(使用函數)
  (1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;
  (2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;
  (3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求;

#!/bin/bash
read -p "Enter a exeable commond:" cmd
path() {
	 whereis $cmd | cut -d' ' -f2
}
ldd $(path $1)| sed '1d'| grep -Eo "/.*[0-9] " > path.txt
cp $(path $1) /mnt/sysroot$(path $1)
while read line;do
	cp $line /mnt/sysroot$line
	done < ./path.txt

原創文章,作者:sthwrong,如若轉載,請注明出處:http://www.www58058.com/19012

(0)
sthwrongsthwrong
上一篇 2016-06-23
下一篇 2016-06-23

相關推薦

  • Linux下編譯內核

                           Linux下編譯內核 內核編譯: 編譯內核就是把內核的相關文件重新生成。   內核編譯前期準備: Linux kernel下載網址:https://www.kernel.or…

    系統運維 2016-09-21
  • 馬哥教育網絡班22期+第11周課程練習

    1、詳細描述一次加密通訊的過程,結合圖示最佳。 Bob先利用單向加密算法提取當前數據的指紋(特征碼),再用自己的私鑰加密數據指紋并附加于數據尾部, 然后利用對稱加密將整個文件加密,之后用Alice的公鑰加密對稱加密密鑰附加于尾部。 Alice收到數據后,先用自己的私鑰解密,得到對稱加密密鑰,之后用對稱加密密鑰解密,然后用Bob的公鑰 解密得到數據指紋,并且驗…

    Linux干貨 2016-11-14
  • 閑玩Xen

    簡述理論 虛擬化的實現 模擬技術:模擬計算機的主要硬件硬件并協調工作,但是效率很低下,所以不常用 完全虛擬化:針對cpu的虛擬來分為,基于BT技術(Guset的特權指令在ring1,Host的特權指令在ring0,Guest的特權指令由Host的ring0來參與邊翻譯邊執行)的完全虛擬化,基于HVM(硬件輔助,Guest的特權指令在ring0,Host的特權…

    Linux干貨 2016-09-26
  • vim的簡單應用

    vim的簡單應用         之前我們學習過Linux的思想,其中有一條就是一切皆文本,所以在這里大部分配置文件都是文本模式存在的,那么使用簡單的文字編輯器就可以修改配置了,之前我們學習過nano文本編輯器,但是Vim會比nano使用的更為方便,也更強大。 基本現在所有的Li…

    2017-06-17
  • find查找

    find查找是生產中最常見的日志查找工具 下面看看它的用法 基本用法: find    查找路徑    查找標準    查找到以后的處理動作 查找路徑:需要被查找的文件所在的路徑,一定是個目錄,默認情況下為當前的目錄 查找的標準:查找的時候用什么方式去查找 處理動作:文件查找完畢后,需要對查找出來的…

    Linux干貨 2017-05-08
  • 第六周作業

    vim文本編輯器基本用法     基本模式:         編輯模式,命令模式    輸入模式        末行模式:    …

    Linux干貨 2016-09-19

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-06-23 14:15

    寫的很棒,但是有的腳本應該有點小瑕疵,有的還可以在完善一下

欧美性久久久久