linux笔记

远程

scp全称(secure cp)远程copy

  • 安装:yum -y install openssh-clients

  • 用法:scp 文件 用户名@主机:远端文件夹

  • 示例

    scp test.txt root@192.168.0.11:/root  #将文件test.txt拷贝到192.168.0.11的root文件夹下
    scp -r test root@linux01:/usr #将test文件夹拷贝到主机名为linux01机器上,文件夹需要加上-r参数
    scp /etc/sysconfig/network-script/ifcfg-etc0 root@192.168.0.12:$PWD #将本地文件ifcfg-etc0拷贝到远程同级目录下 
    

    注意:如果不输入用户名(root),即使用本地当前用户名

ssh(secure shell)远程执行指令

  • 用法:ssh 用户名@主机 需要执行的命令

  • 示例

    ssh root@192.168.0.11 "mkdir /usr/local/apps" #在192.168.0.12上面创建apps文件夹
    ssh root@linux01 #远程登录linux01这台主机,使用exist退出
    

日期

date设置服务器时间

  • 用法:

    date 查看当前日期

    date -s HH:mm:ss 设置时分秒

    date -s yyyy-MM-dd 设置年/月/日

  • 示例:

    date  #Mon May 14 03:38:57 CST 2018 当前日期
    date -s 15:33:25 #设置时间
    date -s 2018-05-13 #设置年月日,但是时间会清空
    
    

ntpdate同步服务器时间

  • 安装: yum -y install ntpdate

  • 用法: ntpdate 服务器

  • 常用的时间服务器

    ntpdate us.pool.ntp.org

    1.cn.pool.ntp.org

    2.cn.pool.ntp.org

    3.cn.pool.ntp.org

    0.cn.pool.ntp.org

    cn.pool.ntp.org

    tw.pool.ntp.org

    0.tw.pool.ntp.org

    1.tw.pool.ntp.org

    2.tw.pool.ntp.org

    3.tw.pool.ntp.org

yum源永久挂载(虚拟机)

  • 查看:yum repolist
  • 清除yum源缓存:yum clean all
  • 挂载:mount /etc/cdrom /mnt/dvd
  • 永久生效:
    • vi /etc/fatab
    • 添加/dev/sr0 /mnt/dvd iso9660 ro 0 0(空格全为Tab)

shell

shell是一门编程语言, 解释执行。不需要编译,直接运行

注意:为了能在当前目录下执行脚本,需要将当前目录加入到环境变量中,即PATH=.:$PATH

位置

cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash

变量

定义

  1. 数字+ 字母 + 下划线 数字不能作为开头
  2. 变量都是字符串类型 num1=100 num2=1 num1+num2 = 100 + 1
  3. 变量名=变量值 等号两边不能有空格

获取

$name "$name" ${name}

set 获取系统中的所有变量

readonly B=2 定义一个不可删除的变量B

删除

unset 变量名

不可删除readonly变量

$()和${}和$(())

  • $() 的用途和反引号``一样,用来表示优先执行的命令
  • ${ } 就是取变量,如$
  • $(()) 适用于数值运算
A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
A=$(ls -la) 等价于反引号
aa=$((4+5))
bb=`expr 4 + 5 `

参数

$n n为数字,$0代表命令本身,$1-$9代表第一到第9个参数,十以上的参数需要用大括号包含,如${10}。
$* 代表命令行中所有的参数,把所有的参数看成一个整体。以"$1 $2 … $n"的形式输出所有参数
$@ 代表命令行中的所有参数,把每个参数区分对待。以"$1" "$2" … "$n" 的形式输出所有参数
$# 代表命令行中所有参数的个数。添加到shell的参数个数

shift指令:参数左移,每执行一次,参数序列顺次左移一个位置,$# 的值减1,用于分别处理每个参数,移出去的参数不再可用

  • $* 和 $@的区别

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以"$1" "$2" … "$n" 的形式输出所有参数

当它们被双引号" "包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数

预定义变量

$? 执行上一个命令的返回值 执行成功,返回0,执行失败,返回非0(具体数字由命令决定)
$$ 当前进程的进程号(PID),即当前脚本执行时生成的进程号
$! 后台运行的最后一个进程的进程号(PID),最近一个被放入后台执行的进程 &

read命令

参数:

  • -n可输入的字符个数
  • -t等待时长,单位为秒
  • -s隐藏输入(如:密码)
  • -p提示语,一般作为最后一个参数
read –t 30 –p “please input your name: ” NAME
echo $NAME
read –s –p “please input your age : ” AGE
echo $AGE
read –n 1 –p “please input your sex  [M/F]: ” GENDER
echo $GENDER

test条件

  • expression首尾都有个空格
  • 测试范围:整数、字符串、文件
  • 表达式的结果为真,则test的返回值为0,否则为非0。
  • 当表达式的结果为真时,则变量$?的值就为0,否则为非0
test str1 == str2 测试字符串是否相等
test str1 != str2 测试字符串是否不相等
test str1 测试字符串是否不为空,不为空,true 0,false 1
test -z str1 测试字符串是否为空

条件控制

if/else

if [ 条件判断式 ]

    then
        #程序1
elif  [ 条件判断式2 ]  
   then
        #程序2

fi    

或者

if [ 条件判断式 ] ; then 
    #程序
fi

for循环

#第一种:
for N in 1 2 3 
do
	echo $N
done
#或
for N in 1 2 3; do echo $N; done
或
for N in {1..3}; do echo $N; done
#第二种:
for ((i = 0; i <= 5; i++))
do
	echo "welcome $i times"
done
#或
for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done

while循环

while expression
do
#command
done

#例如:求1到10的和
i=1
sum=0
while((i<=10))
do
 sum=$((i + sum))
 i=$((i + 1))
done

定时器

crontab –e

  • 用法:

分< >时< >日< >月< >星期< >要运行的命令 < >表示空格

其中
​ Minute 一小时中的哪一分钟 [0~59]
​ hour 一天中的哪个小时 [0~23]
​ day-of-month 一月中的哪一天 [1~31]
​ month-of-year 一年中的哪一月 [1~12]
​ day-of-week 一周中的哪一天 [0~6] 0表示星期天
​ commands 执行的命令

  • 示例

    45  4  1,10,22  *  * /apps/bin/backup.sh #每月 1、1 0、2 2日的4:45运行/apps/bin目录下的backup.sh
    

调试

  • sh -x script这将执行该脚本并显示所有变量的值
  • sh -n script不执行脚本只是检查语法的模式,将返回所有语法错误
  • sh –v script执行并显示脚本内容