您的位置:首页 > 运维架构 > Linux

Linux操作系统总结

2018-01-10 13:24 225 查看
Linux{

     Linux是一款广泛应用于服务器的操作系统 

     操作系统是硬件基础上的第一层软件 应用软件需要安装到操作系统上

     

Linux 的特点  

  安全    免费开源  

  多用户  完全的 一个用户的操作不会影响到其他用户  

  稳定,快速 设计 

  java 大数据环境都默认支持Linux 

 Linux的版本[

   内核版 就像手机的安卓系统一样 内核一般无法直接使用  

   发行 各个厂商针对Linux的内核会发布自己的发行版

   redHat  好 贵

   centos6.5  好 不花钱  

   Ubuntu  图形化 PC 针对Ubuntu软件多 

 查看Linux的内部{

     linux 万物皆文件 

     / 根目录 

     /下有个etc 存储配置文件 

     /home 家目录 每个用户有一个文件夹

}

 使用客户端来连接Linux{

     由于Linux在服务器上 一般不能直接在上面操作

     还有在上面操作也比较不方便

     所以有各式各样的客户端软件用来连接Linux

 

 连接方法[

       要知道Linux的ip地址 用户名 密码 

       虚拟机和本地机 要能ping通 

       虚拟机开机默认是不启网卡

 ]

 修改NAT 连接方式 [

   NAT方式是给虚拟机一个块独立的网卡 稳定 ip不变 

   鼠标在虚拟机上右键- 》设置-》网络适配器 -》右侧选 自定义 vmnet8 保存

   虚拟机-》编辑-》虚拟网络编辑器-》更改设置-》讲net8改成NAT模式  应用 确定退出

   很多情况下改为 并没有生效 可以先改成桥接或其他 -》保存 然后再改回 -》保存

 ]

}

Linux的命令{

   命令查询网址 http://man.linuxde.net/
cd ..回到上一层目录

cd ~回到家目录

cd / 回到根目录

绝对路径和相对路径

    绝对路径是完整的路径

    相对路径是相对与当前目录的路径

查看目录

     ls -a   查看目录包括隐藏的

     ls -R   级联显示文件

     ll 详细查询 显示文件时间等

     ll -h  显示具体的文件大小

创建文件夹

     mkdir 

     mkdir -p  创建多层文件夹

删除命令

     rm  删除文件

     rm -r 删除文件夹

复制命令

     cp    复制的路径按照当前所在层写  相对路径或者绝对路径

     cp -r复制目录

     cp -v复制文件到文件夹

移动命令 可以改名

     mv 

创建文件 Linux不分扩展名

     touch 可以更新已存在的文件名

 vim编辑器

     i 进入编辑模式写入 

     写完按esc返回上层

     :wq 保存并退出

     :q! 强制退出

     :set number 显示行号

查看文本内容

      cat  a>b  将a的内容给b

      cat  a>>b  将a的内容追加给b

      pwd 显示当前路径

归档压缩

       tar -c是压缩

       tar -x是解压缩

            -f 文件
    -v 显示
    包含z是压缩  不包含z是归档

       压缩  tar -czvf 压缩后的文件名 要压缩的文件

       解压缩  tar -xzvf 目标名

            tar -xzvf  目标名  -C 目标目录

命令可以一起使用  例如 -wq 保存并退出

                                     -cf  压缩文件
   

用户的操作{

 只有管理员才能创建用户

      useradd 用户名

      passwd 用户名  设置密码 

      userdel 用户名  删除用户   正在登陆的用户不能删

      userdel -f 用户名 强行删除 

      su 切换用户 默认切换到管理员

 虽然用户删除 但是家目录还在 

      -rf 强删一个用户  包括家目录也删除 相当于清空与此用户的一切

      会一步一步问你是否要删除 回答yes no确定是否删除

}

和用户组相关的文件{

 

  显示用户相关信息  500以后才是自己创建的

     /etc/passwd 密码

     /etc/group   组

     /etc/shadow 

  用以下的命令来搜索浏览用户

    cat  浏览全部的组

    tail  显示后十个组

    grep 用户名 要搜的路径(/etc/group) 搜索该用户的分组编号

    more  按百分比显示

}

组的操作{

   只有管理员才能创建组

      groupadd 组名 添

      groupdel 组名 删

      groupmod -n 改名

                             改后的名字  要改的组名 

                        -h 帮助

  将用户添加到组中 usermod -G 用户名 

}

权限{

  r  读  代表值为4

  w  写    代表值为2

  x   执行   代表值为1

  一共有十个 -  第一个代表文件类型 例如 d

  前三个- :文件所有者

  中间三个-:用户组

  最后三个-:其他者

   和反射中修饰符的代表值一样 固定的数字代表固定的组合

       可以使用三个数字来表示755

}

权限的调整{    change 

 1 调整文件所属用户/组  要有root权限 

 chgrp 组名 文件名

 chown 改用户 文件名 

 chown 用户:组 文件名 

 chmod 修改用户的权限

       [

         1 通过数字来修改权限
2 可以通过具体的文件所属和权限修改   
                     + 代表添加权限    -代表删除权限
   具体权限    x    w   r    
                  执行 写  读
  可执行文件变绿

           文件所属 u g o a
   u:user  文件所有者
   g:group   文件所属组用户
   o:other  其他用户
   a:all  所有用户

       ]

        如:  chmod u+r   xx.txt

              chmod 777   xx.txt

}

shell{

  Shell 用来和系统内部进行交互 可以理解为是一种语言 

  灵活 快捷 方便  

  Shell hello world[

    echo 用来输出语句 相当于syso

  ] 

  Shell文件[

    1 #!/bin/bash  什么shell版本 在文档第一行写 用来执行此文件

    2 # 符号是 注释

    3 ./文件名          执行文件中的脚本 必须有x权限才能执行

    4 bash 文件名    强行 执行脚本 

  ] 

  echo $PATH :显示全局变量路径

  shell中的变量 {   

      变量名变成青色 变量值为红色

    1直接使用字母为变量命令  

    2使用等号赋值 注意变量和等号之间不可以有空格  // str="aaa"

    3使用$变量名 ${变量名} 引用变量名     用$来引用变量

         echo $变量名

  array=(1 2 3 4)   //数组定义

  array[0]=32     //更改下标为0的元素

  echo ${#array[*]} // 输出数组的长度

  echo ${array[0]}"------"  //输出下标为0的元素

  echo ${array[*]}     // 输出所有的元素

  }

  test{

    -eq  相当于=  

    -ne  相当于!=

    -gt   相当于>

    -gte  相当于大于等于

    -lte 相当于小于等于

    -not 非

    -mod 求模

    -lt  相当于<

  }

例如:

      if test $a -eq $b

     if [ $a -gt 5 ];      #注意  []内部两端要有空格 if后面有分号 

        then  echo  要执行的语句

        else   echo  要执行的语句

     fi         以fi结尾if语句

     do{

     

     }

     done  结尾do语句

 if [];

     then echo

   elif [];  then  echo  // elif后面有分号 

   elif [];  then  echo

     ...

     else 

 fi

  read相当于java中的Scanner

      -p  相当于print  提示

    例如:read -p "input age"  age   //提示信息为input age 然后输入年龄

              echo $age

  case 变量 in 

  选项1) 要执行的语句;;  //注意  两个分号

  *) default //表示默认的

  esac //表示结束  case的反写

  例如:

          read -p "input type"  op
  case $op in
  "D") echo "for delete";;
  "U") echo "for update";;
  "S") echo "for select";;
  *) echo "for what";;
  e
c3fe
sac

}

shell{

 1 while 循环 :【

 

    while [ $i -lt 10 ]

    do

    done

    注意 在变量自增的时候 

         如果直接 $num+1 字符串拼接  

    num=$(($num+1))     #当数字计算
    num=$[$num+1]   //[]可以代替上面
  例如:
     num=1
     while (( $num<10 ))
     do
        echo $num
num=$(($num+1))

             done
    输出1-10

   】

   利用循环创建目录   mkdir  "dir"$num  

   利用循环删除目录   rm -r "dir"$num

   单行注释 #

   多行注释 <<!

                       ...

                  !

 2 for 语法【

       for n in a b c d 
     do 
echo $n
     done

     输出abcd

     for((i=0;i<100;i++))  或者  for i in {1..100}

         do 
   echo $i
done 

     输出0-99                   输出1-100

       

 】

 例子:删除文件 删除所有大小为0的文件

 分析:1 遍历文件 2 判断文件大小 如果为 0

 

 判断文件大小 cut -d ' ' -f 5   //按照空格截取  获取第五列属性

例如:

 ls -l var.sh | cut -d ' ' -f 5  

   

 在循环等位置执行命令的时候 有歧义 可以使用 `` 包含 表命令 tab 上面 1 左面的那个键

 

 以下代码删除空文件

  for fn in `ls`

    do

       if [ "`ls -l $fn | cut -d '' -f 5`" -eq 0 ];

       then 

            rm $fn

            echo "delete"$fn

       fi

    done

目录的大小为4096 不管是否为空

以下代码为删除空目录和空文件夹

for fn in `ls`

  do

    if test -d $fn           //test -d 是判断是否为目录

         if [ "`ls -A $fn`" == "" ];    //ls -A是显示目录中的文件 包括隐藏的
     rm -r $fn
     then echo "delete empty dir"$fn
fi

    else

         if[ "`ls -l $fn | cut -d '' -f 5`" -eq 0 ];
    then 
           rm $fn

                   echo delete empty file"$fn
fi

    fi

  done

 while:break【

  while :    是死循环

  完成了一个 直到某个条件才结束循环的功能

  exit!

 】

 例如:

       echo "haha" >> haha.log //5s一个写进去文件

输入文件名连续创建文件夹 直到输入exit!退出

      echo "input dir name for create,input 'exit!' for quit"

      while :    //死循环

      do

         read -p 'input name : ' fn //相当于scanner之前的提示
if[ "$fn" == "" ];  //注意这个变量要加引号 判断字符串是否为空
     then echo "illegal file name"

         elif [ $fn == "exit!" ]
      then
      echo "exit now! " 
      break;     //不要把break 写在echo后面  
else
       echo "mkdir dir"
       mkdir $fn
  fi

      done

}

函数{

 1 定义函数 

     function 函数名 () { 函数体 }

     例如:

     function first(){

        echo "hello world!"

     }   

     function add(){

       result=$[$1+$2] //两个变量相加

       echo $result

     }

 2 调用函数  函数名 参数1 参数2

       first //函数的调用  先声明后使用

       echo $(first)"sasasa"  //输出函数

           结果:hello worldsasasa

       add 1 2

           结果:3

 3 $1 取第一个参 

    echo 输出结果 $(函数名取结果)

}

日期命令

     date  能获得时间  没有毫秒级别的输出

  格式化时间

      date +"%m-%Y" //12-2017

      date +"%s"  //秒

      date +"%N" //当前时间的纳秒部分

}

编写一个随机数的函数{

     date   可以指定最大和最小

     funcation random(){

       min=$1

       max=$2

       time=$(date +%s%N)

       num=$[$max-$min+1]  //区间

       result=$[$time%$num+$min]   //对一个数取余肯定小于这个数

       echo $result

     }

     for i in {1..10}

     do

       random 5 10

     done

}

定时任务{

   系统按照指定的时间或者指定的时间段来完成相应的任务

   crontab -l    

   crontab -e   编辑器  创建定时任务

   crontab -r  删除所有的定时任务

   *  *  *  *  *  conmand

   第一个*:minute: 表示分钟,可以是从0到59之间的任何整数。

   第二个*: hour:表示小时,可以是从0到23之间的任何整数。

   第三个*:  day:表示日期,可以是从1到31之间的任何整数。

   第四个*:  month:表示月份,可以是从1到12之间的任何整数。

   第五个*:  week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

   第六个*: command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

   例如:

       * * * * * command   //每一分钟执行一次

       3,15 * * * * command   //每小时的第三分钟和第十五分钟执行一次

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

       星号(*)代表所以可能值;

       逗号(,)表示指定范围的值;

       中杠(-) 表示一个整数范围 例如2-6  2,3,4,5,6

       正斜线(/) 指定时间的间隔频率 可以和星号搭配使用

                          例如  0-23/2 每两个小时执行一次
           */6   代表对应字段 每6 (M/h/d/m)执行一次

      * * * * * sleep 10; echo haha1 >>log

      * * * * * sleep 20; echo haha1 >>log

      * * * * * sleep 30; echo haha1 >>log

      * * * * * sleep 40; echo haha1 >>log

      * * * * * sleep 50; echo haha1 >>log

       每10s 执行一次 

   tail -f 文件名   追踪文件内容 随文件变化而变化 动态的

   cat 是静态的

   echo haha >>log.haha     //把haha追加到log.haha文件中

}

数组

      array(a b c)

      ${array[0]}   //根据下标取元素

      ${array[*]}   //取数组中所有元素

      ${#array[*]}   //取数组长度

date

      d=${date +"%Y-%m-%d %h:%M:%S"}

                            2018-01-09 16:45:32

知识点  判断 循环 数组 日期 函数 定时任务 

}

%H 小时,24小时制(00~23)

%I 小时,12小时制(01~12)

%k 小时,24小时制(0~23)

%l 小时,12小时制(1~12)

%M 分钟(00~59)

%p 显示出AM或PM

%r 显示时间,12小时制(hh:mm:ss %p)

%s 从1970年1月1日00:00:00到目前经历的秒数

%S 显示秒(00~59)

%T 显示时间,24小时制(hh:mm:ss)

%X 显示时间的格式(%H:%M:%S)

%Z 显示时区,日期域(CST)

%a 星期的简称(Sun~Sat)

%A 星期的全称(Sunday~Saturday)

%h,%b 月的简称(Jan~Dec)

%B 月的全称(January~December)

%c 日期和时间(Tue Nov 20 14:12:58 2012)

%d 一个月的第几天(01~31)

%x,%D 日期(mm/dd/yy)

%j 一年的第几天(001~366)

%m 月份(01~12)

%w 一个星期的第几天(0代表星期天)

%W 一年的第几个星期(00~53,星期一为第一天)

%y 年的最后两个数字(1999则是99)

来自: http://man.linuxde.net/date
计算小数  c=$( echo "$a*$b"|bc ) //计算小数的乘法

==================================================================================================

软件的安装{

  jdk 

  1 上传包

  2 tar.gz 解压

  3 配置环境变量   .bashrc(家目录下) 

  pwd 显示绝对路径

  加入以下两行代码

     export JAVA_HOME=pwd显示的路径

     export PATH=$PATH:$JAVA_HOME/bin

    配置好后别忘了 source .bashrc 重新编译生效

}

ssh免密登录{

  对账户有限制 

  ssh 用户@ip地址

  ssh 需要输入密码

  公钥 私钥 

步骤:

0 切换到root 用户 

1.ssh–keygen –t rsa –P ‘’ //生成密钥

2.cd .ssh

3.cat id_rsa.pub >> authorized_keys

4.chmod 600 authorized_keys

5.vim /etc/ssh/sshd_config

           RSAAuthentication yes      # 启用 RSA 认证
   PubkeyAuthentication yes     # 启用公钥私钥配对认证方式  
   AuthorizedKeysFile .ssh/authorized_keys     # 公钥文件路径(和上面生成的文件同)

6.service sshd restart

scp  远程拷贝密钥,文件[

  scp 文件 用户@地址:路径

  例子 

        1. scp id_rsa.pub root@192.68.170.123:~/.ssh/aa

        2. 将公钥改名为aa 防止冲突    要输入密码
3.cat aa >> authorized_keys 
4.改权限为600
5.service sshd restart

]

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐