Linux基础命令

88次阅读

共计 1135 个字符,预计需要花费 3 分钟才能阅读完成。

Linux 下的目录

目录 说明
/ 根目录,万物起源
/boot 包含 Linux 内核,初始化 RAM 磁盘映像(用于启动时所需的驱动),和启动加载程序
/dev 包含设备节点的特殊目录,一切皆文件
/home 普通用户只能在 home 目录下编写内容,系统用户保护用户误操作
/lib 包含系统核心的共享库
/media /mnt 用户挂在可移动介质
/opt 该目录被用来安装可选的软件,这个主要用来存储可能安装在系统中安装商业软件产品
/proc Linux 内核维护的虚拟文件系统,用来窥探 Linux 内核是如何监管文件系统的
/tmp 各种程序临时创建文件的地方
/sbin “ 系统 ” 二进制文件,完成系统重大任务的程序,通常为超级用户保留
/usr 包含普通用户所需的所有程序和文件
/usr/bin 包含系统安装的可执行程序
/usr/lib 程序所有的共享库
/usr/local 由源码编译的程序会安装在 /usr/local/bin 目录下
/usr/sbin/ 包含许多系统管理程序
/usr/share /usr/share 目录包含许多由 /usr/bin 目录中的程序使用的共享数据。其中包括像默认的配置文件、图标、桌面背景、音频文件等等。
/usr/share/doc 大多数安装在系统中的软件包会包含一些文档
/var 除了 /tmp 和 /home 目录除外,相对来说,目前我们看到的目录是静态的,它们的内容是不会改变的,/var 目录存放的是动态文件,各种数据库,假拖机文件都存在这里
/var/log 包含日志文件,各种系统活动的记录,其中最重要的一个文件是 /var/log/messages
/etc 该目录包含所有系统层面的配置,也包含一些 shell 脚本,在系统启东时,这些脚本会开启每个系统服务
/etc/crontab 定义了自动运行的任务 /etc/fstab 包含存储设备的列表,以及它们相关的挂载点

ls 列出目录内容

    ls -alhtrdSF
        -a 列出目录下的所有内容
        -l 以长格式显示内容
        -h 以可读方式显示文件大小,比如 2000 -> 2k
        -t 按照修改时间进行排序
        -r 翻转显示顺序
        -d 仅仅显示当前目录下的目录
        -S 以文件大小排序
        -F 显示内容会带一个标志,比如显示目录会加 /
    

file 确认文件类型

file logInfo.sh 输出该文件的一些简要信息
file tmpDir 输出 dictory 显示目录
...

less 浏览文件内容

less 属于”页面调度器”类程序,这些程序允许以逐页方式轻松浏览长文本文档。more 程序只能向前翻页,而 less 程序允许前后翻页,less 是 more 的改进版

less /etc/passwd
    -upper arrow 跳至上一行
    -lower arrow 跳至下一行
    -b  跳转上一页
    -space 跳转下一页
    -G 跳转文件末尾
    -g 跳转文件首行
     q 退出查看模式
     h 调出帮助文档 

正文完
 0

linux基础命令

88次阅读

共计 12020 个字符,预计需要花费 31 分钟才能阅读完成。

Linux 命令

解释:
    [root@linux01 Desktop]#
    root    用户,是超级用户
    linux01 主机(主机名:linux01.hadoop.com)
    Desktop    用户所在目录(工作目录)#         超级用户($ 代表普通用户)
常用操作
    历史命令(使用 ↑ ↓ , 获取历史命令)

    tab 补全(输入文件名补全或提示)

    clear (ctrl+l)

    pwd (print name of current/working directory)
        查看当前位置
        家目录    root 用户           /root
                普通用户 hadoop    /home/hadoop

    man    命令     按 q 退出
    命令 -help
1. ls (list directory contents)
2.  cd
./  当前目录
../  上一级目录
cd ~
cd  回到家目录
3. mkdir:创建目录
多级目录 -p
mkdir -p a/b/c
4. touch:改变文件属性
5. rmdir 删除空目录
rmdir test
6. rm 删除文件或目录
-r 迭代
-f 强制:不要问我直接删
7. cp:复制
-r:递归复制目录
8. mv(移动剪切、重命名)9. cat(查看较少内容)10. more
分页向下查看(空格)
逐行向下查看(回车)
按 q 或者 Ctrl+ C 终止退出查看的状态
11. less
12. head
13. tail -3 文件
查看文件后三行
-f 动态查看,跟文件描述符
-F 动态查看,跟随文件名
14. 关机
shutdown -h now
init 0
15. 重启
reboot
init 6

vi 编辑器

  1. 命令模式
    ndd 删除当前行开始的 n 行
    nyy 复制当前行开始的 n 行
    p 粘贴到当前行后面
    u 撤销
  2. 插入模式
    在命令行模式,按 a, i, o
    a:光标够
    i:光标位置
    o:光标下一行插入
  3. 底行模式
    在命令行模式下
    键入: 进入底行模式

    w 保存,q 退出,! 强制
    wq 保存并退出
    q! 强制退出,不保存修改

网络配置

su -  切换为超级用户
1) 主机名不能以数字,. 开头, 包含特殊字符(*@$)
    hostname            查看主机名
    hostname centos01    临时修改主机名, 重启失效
    vi /etc/sysconfig/network    永久修改, 重启生效
2) 修改 ip
    1) 界面修改
    2) # vi  /etc/sysconfig/network-scripts/ifcfg-eth0
        ONBOOT=yes         // 开机自动连接网络
        BOOTPROTO=static  // 设置为静态  dhcp 为动态, none 为不指定
        # service network restart
    3) 修改主机映射虚拟机
    # vi /etc/hosts
    192.168.247.110    centos01

    Windows
    C:\Windows\System32\drivers\etc\hosts


windows ping  服务器
    ping ip
    ping 主机名
服务器 ping 网关

用户和用户组

用户组: 方便管理用户, 举例: 学校为了方便管理学生, 对学生进行分班

  • 查看用户

cat /etc/passwd

root​ ​ ​:x:​0:0:root:/root:/bin/bash
​ root 用户名
​ x 密码
​ 0 用户 id
​ 0 用户组 id
​ root 用户描述
​ /root 用户家目录
​ /bin/bash 用户所用的 shell

  • 查看用户组

cat /etc/group

当创建一个用户,系统会默认创建一个和用户名相同的用户组

1. 用户类型

  1. root 用户, 超级用户, 最高权限, 在实际的生产环境中, 尽量不要使用 root 用户
    用户 UID 0
  2. 普通用户
    用户 UID 500 开始
  3. 伪用户 系统给一些进程, 分配 ID 号, 这部分为伪用户, 不能真正的登录, 也没有家目录
    UID 在 1~499

2. 创建删除用户

  1. 创建用户
    ​ # useradd xiefei
    ​ # passwd 密码 设置或修改密码
  2. 删除用户
    ​ # userdel -r xiefei 彻底删除用户

    - r 递归删除用户家目录

3. 创建用户组

​ #groupadd 用户组

4. 切换用户

​ #su – 切换为 root 用户
​ #su – hadoop 切换为 hadoop
​ su 和 su – 的区别: 前者切换用户, 后者切换用户及用户环境
​ # exit 退出用户

用户文件和目录权限

drwxr-x–x
​ d 代表目录
​ – 代表文件
​ rwx 所属用户(u) 的权限
​ r-x 所属用户组(g) 的权限
​ –x 其他用户(o) 的权限
​ (用户是学生, 所属组是班级, 其他学生 举例分析)

r 可读
​w 可写
​x 可执行
​rwx 可读可写可执行
​r-x 可读可执行

rwx 也可以表示为 111 7
rw- 110 6
r-x 101 5
r– 100 4

  1. 修改权限

​ # chmod 764 test.c 修改为可读可写可执行
​ # chmod u+x test.c 为所属用户添加执行权限
​ # chmod g+w test.c 为所属用户组添加写权限
​ # chmod o-x test 删除其他用户的执行权限
​ # chomd 777 -R test/ 递归修改 test 的所有文件权限

  1. 修改所属用户

​ # chown hadoop msg.txt 把 msg.txt 修改为 hadoop 所有

  1. 修改所属用户组

​ # chgrp hadoop msg.txt

  1. 修改所属用户及所属用户组

​ # chown hadoop:hadoop -R hadoop/

  1. 向用户组添加用户及删除用户, 查看用户所属用户组

    # gpasswd -a hadoop mygroup
    # gpasswd -d hadoop mygroup
    # groups hadoop

管道符 |, 追加 / 覆盖符号

  1. 管道符 |

把前一个命令的输出结果传递给后面的命令处理
​ # cat /etc/passwd | more

  1. 使用 grep 过滤

​ # cat /etc/passwd | grep ‘root’

  1. 过滤条件

​ # ll /etc/ | grep ‘sysconfig’
​ # ifconfig | grep ‘inet’ 查看 ip

  1. 添加 >>, 覆盖 >

​ # ll > test.txt
​ # ll >> test.txt

  1. wc (word count)

​ -l 统计行
​ -w 统计 word
​ # wc -l /etc/passwd
​ # wc -w test.c

  1. 统计文件或目录大小

​ # du -sh /lib

  1. 显示当前系统进程

​ # ps -ef
​ # ps -ef | grep ‘java’

搜索命令 find

​ 语法格式:

​ find 范围 条件

  1. 按文件名

​ # find / -name init
​ 模糊查询带有关键字的:$ find /etc/ -name *work
​ 查找关键字开头的文件:$ find /etc/ -name init*
​ 匹配单个字符 $ find /etc/ -name ???work
​ 不区分大小写匹配 $ find /etc/ -iname ???work

  1. 按文件大小

​ 选项:-size
​ 指定方式:+ 大于,- 小于,不加符号表示等于
​ $ # find /etc/ -size +2M

  1. 按所属用户, 用户组

​ # find /root -user hadoop
​ # find /root -group hadoop

  1. 按文件类型

​ # find /etc/ -name *work -type f 文件
​ # find /etc/ -name *s -type d 目录

sudo 权限(# visudo)

​ root ALL=(ALL) ALL
​ user01 ALL=(root) NOPASSWD: ALL

​ 第一个 ALL 是指网络中的主机,它指明 user01 用户可以在此主机上执行后面的命令。
​ 第二个括号里的 ALL 是指目标用户,也就是以谁的身份去执行命令。
​ 最后一个 ALL 是指命令。

压缩解压

​ windows 常见: .rar .zip
​ linux 常见: .tar .tar.gz .gz

  1. 压缩解压为.tar

​ tar cvf content.tar Main.java msg.txt 将 Main.java msg.txt 压缩为 context.tar
​ tar xvf content.tar -C test 将 content 解压到 test 文件夹下

  1. 压缩解压为 .tar.gz

​ # tar -zcvf test.tar.gz ./ 将当前目录压缩
​ # tar -zxvf test.tar.gz -C ./ 压缩文件加压到当前目录

  1. 压缩解压:.gz 不保留源文件

​ 压缩
​ $ gzip hello.mp4
​ 解压
​ $ gunzip hello.mp4.gz
​ 选项:
​ -z, –gzip, –gunzip, –ungzip filter the archive through gzip
​ -c, –create create a new archive
​ -x, –extract, –get extract files from an archive
​ -v, –verbose verbosely list files processed
​ -f, –file=ARCHIVE use archive file or device ARCHIVE
​ f 后面必须跟上要处理的文件名

rpm 包管理

  1. 查看安装软件

​ $ rpm -qa | grep jdk
​ 查看某个文件属于哪个 rpm 包安装的
​ # rpm -qf /etc/ntp.conf

  1. 安装卸载

​ a) 安装:
​ # rpm -ivh tree-1.5.3-3.el6.x86_64.rpm
​ 用法:rpm -ivh 软件名(.rpm)
​ 选项:-i install 代表安装
​ -vh 显示详细的进度
​ # rpm -ivh tree-1.5.3-3.el6.x86_64.rpm
​ b) 卸载
​ 选项:-e 代表卸载 –erase
​ 用法:rpm -e 软件名(.rpm) –nodeps (不验证依赖卸载)
​ # rpm -e tree-1.5.3-3.el6.x86_64 –nodeps
​ c) 卸载自带 jdk
​ $ sudo rpm -e java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64 –nodeps
​ $ sudo rpm -e java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64 –nodeps
​ // 重新生效
​ $ source /etc/profile

  1. 安装 jdk

    1. 创建两个目录

​ $ sudo mkdir /opt/software // 安装包的存放目录
​ $ sudo mkdir /opt/modules // 解压安装的目录

2. 修改目录的所属用户及所属用户组

​ $ sudo chown user01:user01 /opt/software/ /opt/modules/

3. 上传并解压 jdk

​ $ tar -zxf jdk-7u67-linux-x64.tar.gz -C ../modules/

4. 配置环境变量

​ # vi /etc/profile
​ 末尾添加
​ #JAVA_HOME
​ export JAVA_HOME=/opt/modules/jdk1.7.0_67
​ export PATH=$PATH:$JAVA_HOME/bin

5. 使生效

​ #source /etc/profile

6. 检查是否成功

​ java -version

yum

  • 前提是必须连接外网
  • 用来解决 rpm 依赖性问题
  • 方便、快捷、自动解析依赖
  1. 查询

​ # yum list // 查看 yum 源上拥有的软件
​ # yum list installed | more // 查看系统中已经安装好的 rpm 包 等同于 rpm -qa
​ $ sudo yum list installed | grep tree

  1. 安装

​ # yum install httpd-devel.x86_64
​ 选项:install 后缀不需要加.rpm 可以直接使用命令
​ 选项:-y , 表示直接自动确认
​ # yum -y install httpd-devel.x86_64
​ $ sudo yum install tree

  1. 卸载

​ # yum -y remove httpd-devel.x86_64
​ $ sudo rpm -qa | grep tree

  1. 常见问题

​ 不通外网, 网络质量不佳

系统管理命令

  1. top 查看系统资源 –> 相当于任务管理器

​ 每隔 3 秒更新一次
​ 按 q 退出浏览状态

  1. free 查看内存信息 –》yuan 可能会用到

​ 选项:-m, 就是以 MB 格式显示

  1. df -l 查看硬盘分区信息
  2. ps -ef 查看系统进程
    ps -ef | grep crond

​ jps 查看系统正在运行的 java 进程

  1. kill 杀死正在进行的进程 -》结合 jps 一起使用

​ 选项:-9
​ kill -9【pid】

  1. ifconfig
  2. ping 检测网络质量和网络连接

​ ping 主机名
​ ip 地址
​ 域名

  1. netstat 查看网络端口

​ 选项:
​ -t #监控 tcp 协议的进程
​ -l #listenning
​ -n #显示端口号信息
​ -p # 显示进程的 PID
​ netstat -antp

  1. jps 查看正在运行的 java 进程
  2. vmstat 2 5

​ 可以展现给定时间间隔的服务器的状态值, 包括服务器的 CPU 使用率,内存使用,虚拟内存交换情况,IO 读写情况
​ 2 表示间隔时间
​ 5 表示采集次数

关闭防火墙和安全子系统

​ –》在联机应用(分布式)中,一般会关闭防火墙。防火墙默认情况下,出于安全考虑会限制一些应用的网络访问(比如 rpc 通信端口),为了保证多机通信的稳定,可以选择关闭防火墙

  1. 关闭防火墙并且不开机启动 (/etc/inittab 启动级别)
    1. 关闭 Linux 防火墙

    # service iptables stop     ## 关闭防火墙
    # service iptables status   ## 查看防火墙状态
     iptables: Firewall is not running.

    2. 设置不开机启动防火墙
    #  chkconfig iptables off   ## 不随机启动  设置开机启动使用 on

    3. 查看防火墙的开机启动设置
    $ sudo chkconfig --list | grep iptables
  1. 关闭安全子系统
# vi /etc/sysconfig/selinux

​修改下面 SELINUX=enforcing 为 SELINUX=disabled

shell 编程

shell 脚本的规范

  1. 第一行:#!/bin/sh 开头 或 #!/bin/bash 开头

​ 声明是什么类型的 shell

  1. 注释:#
  2. shell 脚本以.sh 结尾
  3. 执行 shell 基本的两种方式:

​ 1)sh hello.sh #执行 shell 脚本
​ 2)./hello.sh #这种方式要求这个脚本拥有执行权限

​ shell 的变量 num=123;str=”hello world”
​ 定义变量没有数据类型
​ 引用变量需要在变量前面添加 $ 符号

shell 变量类型

环境变量

保存系统运行时使用的变量
》用户变量
​ .bash_profile 每个用户主目录下都有这么这个文件,用来保存每个用户的环境变量
》系统变量
/etc/profile: 系统全局生效的配置文件

位置变量

将传递给脚本的参数保存在位置变量中
以便于在脚本中引用这些变量
Bash 定义 9 个位置变量:$1 … $9
$0: 代表的是当前脚本的名称

#! /bin/sh

echo "这是第一个变量 $1"
echo "这是第一个变量 $2"
echo "这是第一个变量 $3"
echo "这是第一个变量 $4"
echo "这是第一个变量 $9"

预定义变量

​ $0:脚本名称
​ $!: 后台运行的最后一个进程的 PID 号
​ $$: 当前进程的 ID 号
​ $#: 当前 shell 的参数个数
​ $* 显示所有的参数内容(整体)
​ $@: 显示所有的参数内容(逐个读取)
​ $?: 判断,表示程序退出的代表(返回 0 代表成功,非 0 代表失败)

#! /bin/sh
echo "脚本名称:                $0"
echo "当前进程的 ID 号:              $$"
echo "当前 shell 的参数个数:$#"
echo "显示所有的参数内容(逐个读取:$@"

aaaaa
# 这里会打印一个非 0 的值,表示前一行命令执行出错
echo $?

自定义变量

  1. 语法格式:

​ name=value
​ 等号两边不能有空格
​ 变量对大小写敏感
​ 调用变量的值 $name

  1. 变量的赋值

​ 1. 直接赋值 tag1=112
​ 2. tag2=$tag1
​ 3. szie=ls ~/ 将命令赋值给变量 飘号或者反引号
​ shell 的字符串 / 命令(echo):

#! /bin/sh
# 赋值号前后不能有空格
# 变量没有类型
numOfPerson=100;
echo $numOfPerson


# 取变量 numOfPerson 赋值给 n
n=$numOfPerson
echo "n=$numOfPerson"

# 将 ls -l /etc 执行的内容赋值给 str
str=`ls /etc`

“” ” 的区别

​ echo 可以不加引号 #可以正常输出的输出变量
​ echo 加单引号 #单引号内容原样输出, 单引号将剥夺其中的所有字符的特殊含义
str=’hello $num’
​ echo 加双引号 #双引号可以输出变量, 输出 ” 等, 需转义
str=”hello $num”

​ shell 的字符串拼接
​ str=”hadoop”
​ a=” 你好 $str”

        a="你好"\$str

shell 运算

  1. 算术

​ 第一种写法 $(())
​ 第二种写法 $[]
​ 第三种写法 expr 表达式 只能接受数值,expr 本身是 shell 命令,输出的时使用反引号

​            a=6;b=5

​            echo $((a+b))

​            echo $(($a * $b))



​            echo $[a+b]

​            echo $[$a * $b]



​            expr $a - $b

​            expr $a \* $b

  1. 逻辑运算

​ -》&& 逻辑与(命令控制符)
​ cmd1 && cmd2 // 前面的命令执行成功才会执行后面的命令
​ -》|| 逻辑或
​ cmd1 || cmd2 // 前面的命令执行失败才会执行后面的命令
​ -》;无逻辑符号
​ cmd1;cmd2

内置测试判断

  1. 两种写法
​            a=6

​            b=9

​        #第一种     变量和比较符之间空格可省略

​            if test 6 -gt 9

​            then

​                echo bigger

​            fi

​        #第二种    变量和比较符之间的空格必须

​            if [$a -lt $b]

​            then

​                echo smaller

​            fi
  1. 数值比较

​ -eq #equal 等于
​ -ne #not equal 不等于
​ -gt #greater than 大于
​ -ge #greater equal 大于等于
​ -lt #little than 小于
​ -le #little equal 小于等于
​ 注意:在数值的比较中,不能使用”>““<“ 等符号来进行比较
​ 在 test 或 [] 进行测试的时候,必须要有空格

test $1 -gt 60* **-a** *$1 -lt 70 同一个条件内使用

[ $1 -ge 70* **-a** *$1 -lt 80 ]

elif [$1 -ge 60] && [$1 -lt 70]

​ $ [“990” -le “995”] && [“123” -gt “33”] 这里要用 &&

  1. 字符串的比较

​ = 等于
​ != 不等于
​ -z $str 长度为 0 则为真
​ -n “$str” 长度不为 0 则为真
​ $str 字符串不为空则为真

​            #!/bin/sh

​            str1="abc"

​            str2="abc"

​            str3="cde"

​            str4=

​            if [$str1 = $str2]

​            then

​                    echo  str1 和 str2 相等

​            fi

​            if [$str1 != $str3]

​            then

​                    echo str1 和 str3 不相等

​            fi



​            if [-z $str1]

​            then

​                    echo  str1 长度为 0

​            fi

​            if [-n "$str3"]

​            then

​                    echo  str3 长度不为 0

​            fi

​            if [$str1]

​            then

​                    echo  str1 不为空

​            fi

​            if [$str4]

​            then

​                    echo  str4 不为空

​            fi
  1. 文件的测试

​ -d(directory)如果是目录则为 true
​ -f(file)如果是文件则为 true
​ -r 如果是可读则为 true
​ -w 如果是可写则为 true
​ -x exec 如果是可执行则为 true
​ 注意:可读可写可执行是针对于执行脚本的用户而言的权限

​            #!/bin/sh

​            if [-d $1]

​            then

​                echo 是目录

​            fi

​            if [-f $1]

​            then

​                    echo 是文件

​            fi

​            if [-r $1]

​            then

​                    echo 是可读的

​            fi

​            if [-w $1]

​            then

​                    echo 是可写的

​            fi

​            if [-x $1]

​            then

​                    echo 是可执行

​            fi
  1. 逻辑连接符:

​ 三种:
​ 1. 非!
​ 2. 与 -a
​ 3. 或 -o

​            if [-f  $1 -a $2 -gt 5]

​            then

​                echo  \$2  is $2

​                echo  "\$2 is bigger than 5"

​             fi

流程控制

  1. if

​ if 条件判断
​ then
​ command
​ elif 条件判断
​ then
​ command
​ elif 条件判断
​ then
​ command
​ …
​ else
​ command
​ fi



​        #!/bin/sh

​        echo please type age

​        read age

​        if  test $age -ge 0 -a $age -lt 3

​        then

​            echo  baby

​        elif [$age -ge 3  -a $age -lt 7]

​        then

​            echo child

​        elif [$age -ge 7] && [$age -lt 18]

​        then

​            echo teenager

​        elif test $age -ge 18 && test $age -lt 40

​        then

​            echo youth

​        elif test $age -ge 40 && [$age -lt 60]

​        then

​            echo man

​        else

​            echo older

​        fi
​        #!/bin/sh

​        # read socre  and choose level

​        # read 相当于 Java 中的 scanner 是一种交互式命令,读取设备的输入

​        echo "请输入学生成绩 score:"

​        read score

​        if test $score -ge 90;

​        then

​                echo level A;

​        elif [$score -ge  80  -a  $score -lt 90]

​        then

​             echo "level B";

​        elif test  $score -ge  70  -a  $score -lt 80

​        then

​             echo "level C";

​        elif [$score -ge  60] && [$score -lt 70]

​        then

​             echo "level D";

​        else

​                echo 不及格;

​        fi
  1. 循环语句

​ 1)for 循环
​ I)
​ for((初始化变量值; 结束循环条件; 循环控制语句))
​ do
​ 循环体
​ done

​                #!/bin/sh

​                sum=0

​                for ((i=0;i<10;i++))

​                do

​                    echo $i

​                    sum=$[$sum + i]

​                done

​                echo $sum

2)第二种语法格式:

​ for 变量 in 值 1 值 2 … 值 N

​ do

​ 循环体

​ done

​                #!/bin/sh

​                for MONTH in Jan Feb Mar Apr May Jun July Aug Sep Oct Nov Dec

​                do

​                    echo $MONTH

​                done
​                #!/bin/sh

​                for file in `/bin/ls $1`;

​                do

​                echo $file;

​                done
  1. while 循环

    1.

​ while [condition #循环条件]
​ do
​ #statements
​ #【循环体】
​ #【循环控制】
​ done

​            #!/bin/sh

​            i=1

​            while [$i -le 10]

​            do

​                sum=$((sum+i))

​                i=$[i + 1]

​            done

​            echo $sum
​            #!/bin/sh

​            i=1

​            sum=0

​            while test $i -le 10

​            do

​                sum=$[$sum + $i]

​                i=`expr $i + 1`

​            done

​            echo $sum
  1. 第二种语法格式:

​ while read -r line

​ do

​ #【循环体】

​ done

​            #!/bin/sh

​            #Read /ect/sysconfig/network-scripts/ifcfg-eh0 and print out

​            FILE=/etc/sysconfig/network-scripts/ifcfg-eh0

​            while read -r line

​            do

​                echo $line

​            done < $FILE

read 中

参数 -r 屏蔽,

如果没有该选项,则作为一个转义字符,有的话 就是个正常的字符了。
command < file 将输入重定向到 file。

  1. case 类似于 java 中的 swich case

​ 第一种语法格式:

​            #!/bin/sh

​            echo '输入 1 到 4 之间的数字:'         echo '你输入的数字为:'         read aNum         case $aNum in             1)  echo '你选择了 1'              ;;             2)  echo '你选择了 2'              ;;              3)  echo '你选择了 3'              ;;              4)  echo '你选择了 4'              ;;              *)  echo '你没有输入 1 到 4 之间的数字'              r'm;;         esac

​ 第二种语法格式:

​            #!/bin/sh

​            echo "input from:one two three ....."

​            read input

​            case $input in

​                one | two) echo "your input is one or two"

​                ;;

​                three | four) echo "your input is three or four"

​                ;;

​                five) echo "your input is five"

​                ;;

​                *) echo your input is $input

​    ;;

​            esac


​ shell 脚本的调用(在一个脚本中去调用另外一脚本)

which touch # 查看 shell 位置

​            #!/bin/sh

​            source /home/hadoop/shell/hello.sh

date 命令

  1. 显示系统时间

​ 1.date CST 中央标准时间
​ Mon Jun 5 15:11:44 CST 2017
​ 2.date -R 带时区的时间
​ Mon, 05 Jun 2017 15:14:44 +0800

  1. 格式化日期

​ $ date ‘+%Y-%m-%d %H:%M:%S’
​ 2017-05-02 11:20:10

设置时间

​ 选项:-s
​ 用法:# date -s “2016-12-08 10:43:00”

ntpdate 命令

​ 用法:# ntpdate 网络时间服务器(182.92.12.11)

​ sudo ntpdate ntp.api.bz

Crontab 计划任务

  1. )–> 周期性执行计划任务
  2. 选项使用:

​ crontab -l (list) #查看目前的计划任务列表
​ crontab -r (remove) #删除计划任务
​ crontab -e (eidt) #编辑周期性计划任务

  1. 进程名称是 crond

​ ps -ef | grep crond $ 查看此进程是否开启
​ 默认进程是开启的,如果没有开启,可以使用命令手动开启
​ # service crond status
​ # service crond start
​ # service crond stop
​ # service crond restart

  1. Example of job definition:
​        # .---------------- minute (0 - 59)
​        # |  .------------- hour (0 - 23)
​        # |  |  .---------- day of month (1 - 31)
​        # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
​        # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
​        # |  |  |  |  |
​        # *  *  *  *  * user-name command to be executed
​         *    *      *            *             *
​        分钟 小时  天(of 月)月(of 年)星期(of 周)

特殊字符

“ 代表所有的取值范围内的数字,如月份字段为,则表示 1 到 12 个月;

“/” 代表每一定时间间隔的意思,如分钟字段为 */10,表示每 10 分钟执行 1 次。

“-“ 代表从某个区间范围,是闭区间。如“2-5”表示“2,3,4,5”,小时字段中 0 -23/ 2 表示在 0~23 点范围内每 2 个小时执行一次。

“,” 分散的数字(不一定连续),如 1,2,3,4,7,9。

注:由于各个地方每周第一天不一样,因此 Sunday=0(第一天)或 Sunday=7(最后 1 天)。

实例)

每一分钟执行一次 command(因 cron 默认每 1 分钟扫描一次,因此全为 * 即可)*/1 * * * * /bin/date  >> /root/Desktop/date.txt

每小时的第 3 和第 15 分钟执行 command
3,15 * * * * /bin/cp /root/Desktop/date.txt /root/date.log

每天上午 8 -11 点的第 3 和 15 分钟执行 command:3,15  8-11  *  *  *  command

每隔 2 天的上午 8 -11 点的第 3 和 15 分钟执行 command:3,15  8-11  */2  *   *  command

每个星期一的上午 8 点到 11 点的第 3 和第 15 分钟执行 command
3,15  8-11   *   *  1 command

每晚的 21:30 执行 command:30  21   *   *  * command

每天晚上 6 点到第二天早上 6 点 每 15 分钟记录一次时间到 /home/uer01/2.log 文件中
*/15  18-23,0-6 * * * /bin/date  >> /home/user01/2.log
0,15,30,45  18-23,0-6 * * * /bin/date  -R >> /home/user01/2.log

克隆虚拟机

1 拍快照

​ 右击虚拟机 -> 快照 -> 拍摄快照

2 克隆

​ 从快照中克隆

​ 从虚拟机中克隆

​ 管理 -> 克隆 -> 选择从快照(虚拟机当前状态)-> 完整克隆

3. 修改网卡信息

​ 克隆出来的虚拟机 要修改主机名, 映射, 还有 ip 地址,关键是要修改网卡信息

​ 1) 修改主机名

​ # vi /etc/sysconfig/network #修改主机名

​ 2) 修改映射

​ # vi /etc/hosts #修改主机映射(linux,windows 都要改)

​ 3) 修改 网卡

​ # vi /etc/udev/rules.d/70-persistent-net.rules # 网卡的信息(mac 地址 HWADD)

​ 删除原来的网卡信息(通过 mac 地址来区分)

​ 并将新的网卡的 name 信息改为 eth0

​ 修改后内容

​ # PCI device 0x8086:0x100f (e1000)

​ SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?“, ATTR{address}==”00:0c:29:b6:46:5d”, ATTR{type}==”1″, KERNEL==”eth“, NAME=”eth0”

​ 4) 修改 ip

​ # vi /etc/sysconfig/network-scripts/ifcfg-eth0

​ 删除 uuid, 修改 mac 地址,IPADDR,ONBOOT,BOOTPROTO

​ ONBOOT=yes

​ BOOTPROTO=static

​ HWADDR=00:0c:29:b6:46:5d

​ IPADDR=192.168.239.201

​ PREFIX=24

​ GATEWAY=192.168.239.2

​ DNS1=192.168.239.2

​ NAME=”System eth0″

​ # reboot 重启虚拟机(因为修改了主机名)

正文完
 0