• Linux基础


    Lunux简介

    Linux就是操作系统,如windows、mac。  

    LInux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境。

    Linux是由Linux Torvalds(林纳斯·托瓦兹)期初开发的,由于源代码的开放性,现在已经衍生出了成千上百种不同的Linux系统。

    Linux系统的应用非常广泛,不仅可以长时间的运行我们编写的代码,还可以安装在各种计算机硬件设备中,如手机、平板电脑、路由器等。android程序最底层就是运行在linux系统上的。

    Linux的分类

    1.Linux根据市场需求不同,基本分为两个方向:

      1)图形化界面版:注重用户体验,类似windows操作系统,但目前成熟度不够。

      2)服务器版:没有好看的界面,是以在控制台窗口中输入命令操作系统的,类似dos,使我们假设服务器的最佳选择。

    2.Linux根据原生程度,又分两种:

      1)内核版本:https://www.kernel.org/ 内核->二次开发后->定制特有功能->发布。

      2)发型版本:一些组织或公司在内核版基础上进行二次开发而重新发型的版本

    3.Linux发型版本不同,又可以分为n多种

      图形化的有:ubantu、fedora、 命令行的:CentOS

    Linux的安装

    1.虚拟机-- 在电脑上安装一个软件,在软件中可以模拟一台或多台虚拟的电脑机器。  Parallels Desktop (mac)、VMWare(win)、windows10自带的Hyper-v 默认没有开启 在控制面板 可以开启

    2.CentOS 下载 https://www.centos.org/download/

    CentOS官网上,提供了三种ISO镜像文件的下载:

    • DVD ISO:标准安装版,一般下载这个就可以了(推荐)
    • Everything ISO:对完整版安装盘的软件进行补充,集成所有软件。(包含CentOS7的一套完整的软件包,可以用来安装系统或者填充本地镜像)
    • Minimal ISO:迷你版,小巧、安装快速、自带的软件少

    本次安装最小的.. minimal iso.

    安装CentOS root 1234

    虚拟机的安装和CentOs的安装见如下网址,mac用 pd ,windows用 vm 

    https://www.linuxidc.com/Linux/2016-08/133827.htm

    桥接模式 就是跟你的电脑使用同一个ip,NAT模式就是虚拟机使用独立的ip。 

    服务器版的linux安装完后,没有图形化界面,所以只能通过控制台去操作系统,我们就要使用类似dos命令的linux命令去操作系统。

    Linux基本命令

    登陆 一共有两个账号 一个是你自定义的 一个是root 根权限 密码按设置的输入

      windows中通过图形化界面和鼠标可以任意切换需要进入的目录,但linux必须通过cd命令切换目录。

    linux目录结构

    bin (binaryies)存放二进制可执行文件(ls、cat、mkdir等),常用命令一般都在这里。

    sbin(super user binaries) 存放二进制可执行文件,只有root才能访问

    etc(etcetera) 存放系统配置文件

    usr(unix shared resources) 存放共享的系统资源

    home 存放用户文件的根目录  是用户主目录的基点 比如user的主目录就是 /home/user 可以用~user表示

    root 超级用户目录

    dev(devices) 存放设备文件

    lib(library)存放跟文件系统中的程序运行所需要的共享库及内核模块

    mnt(mount)系统管理员安装临时文件系统的安装点

    boot 存放用于系统引导时使用的各种文件

    tmp(temporary) 用于存放各种临时文件

    var(variable) 用于存放运行时需要改变数据的文件 ,比如说各种服务的日志文件,系统启动日志等。

    opt 额外安装的可选应用程序包所放置的位置,一般我们把tomcat等安装到这里。

    使用root登陆完 所在位置 ~ root文件夹

    1.目录切换命令

    cd usr 切换到该目录下的usr目录

    cd .. 切换到上一层目录

    cd / 切换到系统根目录

    cd ~ 切换到用户主目录

    cd - 切换到上一个所在目录

    2.目录的操作命令(增删改查)

    1.增加目录:mkdir 目录名称 mkdir mypackage  mkdir mypackage/child , mkdir cir/cir2 报错没有cir 加-p 创建嵌套目录 mkdir -p cir/cir2

    2.查看目录列表:ls 查看当前路径下文件  ls / 查看根目录 后面可以跟目录 ls -a 查看所有文件包含隐藏 ls -l 查看详细信息 ll -h 以kb单位展示 详细信息

    3.寻找目录 查 : find 目录 参数 如:查找root下的与test相关的目录或文件 find /root -name 'test*'  find / -iname *ss* 忽略大小写 -iname

      find / -size +204800   查找根目录 文件大于100mb的  1024kb = 1mb 100mb=102400kb 102400kb=204800块 1kb=2块 1块=0.5kb

      find / -name 'test*' -a -type d 查找目录 d是目录 -a 是连接符 

    4.修改目录的名称: mv 目录名称 新目录名称  如:test目录下有一个oldTest目录,使用 mv oldTest newTest 命令修改(mv 命令不光可以修改目录,还可以修改文件名 压缩包名等)

    5.移动目录的位置 --剪切 : mv 目录名称 目录新的位置 将test下的newTest 剪切到 /usr下面 使用 mv newTest /usr (mv 命令不光可以剪切目录,还可以剪切压缩包 文件等)

    6.拷贝目录 cp -r 目录名称 拷贝到目标位置 -r代表递归拷贝 如:将/usr下的newTest 拷贝到根目录下的test中,使用 cp -r /usr/newTest /test (cp 命令不光可以拷贝文件,压缩包 文件 都可以进行拷贝 ,压缩包和文件不能使用-r递归)

    7.删除目录 rm [-rf] 目录 如:删除/usr下的newTest文件夹,使用 rm -r newTest 。进入 /test 使用rm -rf newTest 不需要询问删除 (rm 不仅可以删除目录,也可以删除其他文件或压缩包)

    8.删除空文件夹 rmdir  test 此test必须是空文件夹

    9.man 帮助命令 man touch man cd man rm

    3.文件的操作命令(增删改查)

    1.创建文件 touch 文件名 在test目录下创建空文件 touch aaa.txt

    2.文件的查看 cat/more/less/tail 文件 

      使用cat查看 /etc/sudo.conf 文件 只能显示最后一屏的内容

      使用more查看 /etc/sudo.conf 文件,可以显示百分比,回车可以向下一行 空格可以向下一页,退出按q

      使用less查看 /etc/sudo.conf 文件,可以使用键盘上的 上下 和PgUp 和PgDn向上和向下翻页,q结束查看

      使用tail -10查看 /etc/sudo.conf 文件的后10行 ,ctrl+c 结束 (使用tail -f 文件 可以对某个文件进行动态监控,如日志文件)

    3.修改文件的内容 vim 文件 如:编辑test下的aaa.txt文件 使用vim aaa.txt 但此时并不能编辑 点击键盘 i/a/o 进入编辑模式 可以编辑文件,编辑完成后 退出vim 先按下esc 然后输入 :wq 保存退出 :q不保存退出。 如果找不到命令参考 https://blog.csdn.net/yi22110421/article/details/51692107  

    4.删除文件 rm -rf 文件 即可 同目录

    4.压缩文件的操作命令

    1.打开并压缩文件

    Linux中打包文件一般是以.tar结尾的,压缩命令一般是以.gz结尾的。

    而一般情况下 打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般是.tar.gz。

    命令:tar -zcvf 打包压缩后的文件名 要打包压缩的文件

    其中: z -调用gzip压缩命令进行压缩

        c -打包文件

        v -显示运行过程

        f 指定文件名

    示例:打包并压缩/test 当前没文件夹所有的文件 压缩包的压缩名指定为 test.tar.gz   tar -zcvf test.tar.gz ./

    2.解压压缩包

    命令:tar [-xvf] 压缩文件

    其中: x -代表解压

    示例:解压 test目录下的test.tar.gz到当前目录下 tar -xvf test.tar.gz

       解压 test目录下的test.tar.gz到根目录/usr下  tar -xvf test.tar.gz -C /usr ----C代表指定解压的位置

    5.其他命令

    1.显示当前所在的位置 pwd

    2.clear 清空当前屏幕 快捷键ctrl+l

    3.搜索命令 grep 要搜索的字符串 要搜索的文件 如:grep postopny postopny.txt --color 在postpony.txt中查找postpony字符串 --color代表高亮 可写可不写

    4.查看进程 ps -ef

    4.管道命令 命令: |  前面是上一级 后面是下一级  可以将上一个命令的输出作文本次目录的输入   ps -ef | grep system 搜索出有 system字符串的  前面的输出结果 | 作为下一个命令的输入

    5.杀死进程 kill -9 进程的pid ps -ef | grep qq --color 找到qq进程 kill -9 38483 杀掉

    6.网络通信命令 ifconfig 结合管道查看ip ifconfig | grep "inet" 如果没有 https://blog.csdn.net/gxdvip/article/details/40110487

            ping 目标网址 或ip 

            netstat -an 查看当前系统的端口使用

    7.追加符号 >> echo hello >> aaa.txt  把内容追加到这个文件中

    6.用户和用户组

    cat /etc/passwd 查看所有用户

    root:x:0:0:root:/root:/bin/bash

    bin:x:1:1:bin:/bin:/sbin/nologin

    david:x:1000:1000:大伟 白:/home/david:/bin/bash

    用户名:x是否需要密码:UID=user id 用户ID(0是root 1-499是系统用户 普通用户500+ ):GIP=group id 用户组ID:别名:用户家路径:shell命令

     

    cat /etc/group 查看用户组 linux在我们创建用户时,默认以我们的用户名称创建一个用户组。

    root:x:0:

    bin:x:1:

    david:x:1000:david

    用户组名:x密码标记位:用户组ID

     

    添加用户 useradd dafengchui
    切换用户 su - dafengchui

    [dafengchui@www ~]$  前面是个$符号

    exit 退出当前的 回到上一个

    [root@www ~]#  root权限前面是个 #号

    echo 输出 echo $PATH 输出环境变量

     

    删除用户 userdel -r zhangsan 加-r会把家目录也删掉

    ls -l /home 发现zhangsan文件夹也不见了

     

    groupadd groupdel 增加用户组 和删除用户组

    7.linux的权限管理

    通过ls -l可以查看某个目录下的文件或目录的权限 ll /etc

    drwxrwxr-x  第一个d是目录的意思 

    -rw-r--r--   第一个-是文件的意思

    lrwxr-xr-x     第一个l是快捷方式的意思

    除了第一个字母后 3个字母为一组 三组

    d rwx r-x r-x

    第一组 代表文件所有者 user u

    第二组 代表文件的所属组 group g

    第三组 其他用户的权限 other o

    rwx 分别代表 r读取权(也可用数字4表示) w写入权(也可用数字2表示) x执行权(也可用数字1表示) 如果是-代表对应位置无操作权限

    修改 目录/文件 权限的命令:chmod

    示例:修改/test 下的aaa.txt的权限为属主有全部权限,属主所在的组有读写权限,其他用户只有读取的权限。

    chmod u=rwx,g=rw,o=r aaa.txt 

    还可以 chmod u+w,g+x,o-r aaa.txt 加减号增加减少权限
    chmod a+rwx aaa.txt  a就是all 所有的都增加 或都减少

    也可用对应的数字 chmod 764 aaa.txt

    4 2 1 这三个数字相加不会出现重复的数字,所以7代表读写执行,6代表读写,4代表只读,2代表只写,1代表只能执行,3代表写入和执行...

    chmod这个命令只有root 或者文件所有者 才可以执行

    chown 修改文件所有者 只有root可以使用

    chown david aaa.txt

    chgrp 修改文件所属组 只有root可以使用

    chgrp david aaa.txt

    chown root:root aaa.txt 同时修改 所有者和所属组

    8.VI编辑器

    vi /home/test.txt    vim /etc/passwd

    有打开 没有就创建

    按 i 可以进入编辑模式

    保存退出 按一下esc 然后输入:wq  只退出:q 

    强制退出 后面加个!

    :set number 显示行号

    全局替换 1,$s/aaa/bbb/g   从第一行开始到文件结尾,把所有aaa换成bbb 

    大写的ZZ 可以快速保存并退出

    命令模式下:

    删除一整行 dd 其实就是剪切

    撤销功能 u 

    复制 yy 粘贴pp

    多行复制  输入数字要复制的行数 然后再输入yy 比如 5 yy  

    多行删除也是一样 先输入数字 然后再按dd 比如 9 dd

    快速移动到行末尾并进入编辑模式 shift+a

    快速移动到文件末尾 shift+g

    快速移动到文件开头 gg

     

    9.远程连接工具的使用

    1.mac下连接 linux操作系统 打开终端工具 如果不是root登陆 就输入 sudo -i 切换为root用户

      ssh root@10.211.55.5 然后输入yes 输入linux系统中的密码就连上了

    2.mac下传文件 cyberduck 小黄鸭

      打开小黄鸭,点击新建连接,选择sftp ssh文件传输协议,输入url 用户名 密码即可。

    windows flashfxp ftp工具即可

    中文乱码

    https://www.cnblogs.com/sisimi/p/7693226.html

    10.sudo权限管理

    首先切换到daivd账号,使用 useradd 添加账号 提示权限不够。 可以使用sudo命令让 david 可以使用useradd这个命令! sudo useradd david 输入密码

    11.系统命令管理

    centOS 6

    chkconfig --list iptables 可以查看指定服务启动状态

    service (network,chkconfig) (start,stop,status) 可以看状态 启动 关闭 

    chkconfig iptables on/off 可以设置是否开机启动 

    CentOS 7 中systemctl 是主要管理服务的工具,他融合了centOS6中的 chkconfig和service。

    启动防火墙:systemctl start firewalld

    关闭防火墙:systemctl stop firewalld

    查看防火墙状态:systemctl status firewalld

    开机启用防火墙:systemctl disable firewalld

    开机禁用防火墙:systemctl enable firewalld

    性能查看器 : top 内存 cpu查看器

    netstat 查看端口信息

    route 查看路由信息

    12.linux软件管理

    源码包-> 源代码 需要自己编译

    二进制包->编译过的包,如:RPM包。自动管理依赖性,方便管理,安装,更新,卸载等。

    RPM管理方式 : 红冒软件管理工具的缩写。

      查询:rpm -qa | grep java 前面查看所有rpm安装包,后面是过滤出java包含java的 

      查询个数:rpm -qa | wc -l 

      安装:rpm -ivh 包名.rpm  -i代表安装 vh显示安装进度

      卸载:rpm -e 包名 -e 代表卸载 如果加--nodeps 不卸载依赖包

    YUM管理方式: 在线安装模式,在线查询  推荐用这个!

      查询:yum list jdk (从仓库查询) 已安装的后面会有@开头, 卸载后@就没了 ,base 就是仓库里有,updates 表示已安装的有更新。

      安装:yum install 软件名 -y  加-y不在询问 直接安装

      卸载:yum remove 软件名 -y 加-y 不在询问 直接卸载

    13.shell

      shell是shell脚本命令解释器,把我们写的命令翻译成计算器二进制语言。

      shell是一门编程语言,解释型脚本语言。

    1.自定义shell变量

      name=123  定义变量 没有类型 fname='hello world' 如果值有空格 需要加引号

      name="$name"456 变量叠加 123456   name=${name}789  123456789

      echo $name  输出变量

      set | grep name 可以查看已经定义的变量

      unset name 删除变量

    2.环境变量 (我们可以在任何地方使用 ls pwd等命令 是因为已经配置了系统环境变量 echo $PATH)

      export 变量名=变量值 定义环境变量 (使用bash切换shell环境时,系统变量都可见,自定义变量则不可见)

      env 查询环境变量

      unset 卸载变量

    3.位置参数变量

      $n 参数  n为数字,$0代表命令本身,$1-$9代表第1到第9个参数,10以上的数字需要用大括号包含,${10}。

      $* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体

      $@ 这个变量也代表命令行中所有的参数,不过$@会把每个参数区分开,用来遍历

      $# 代表几个参数

    新建一个shell脚本, vim canshu.sh

        #!/bin/bash #开头

        echo $0

        echo $1 #保存退出

        echo $#

        echo $*

        echo $@

        更改一下权限 chmod 755

          执行shell命令:

          1.绝对路径 /home/david/canshu.sh 1 2 3 4 输出第一二个参数,

          2.相对路径 ./canshu.sh 1 2 

          3.bash命令 bash canshu.sh  1 2 无视目录执行 

    查看我们当前使用的shell命令,

      1.vim /etc/passwd 查看当前账号最后面的路径

      2.echo $SHELL

    4.预定义变量

      $? 最后一次执行的命令返回状态。如果值为0,则上一个命令正确执行,如果非0那么上一个命令执行不成功。

      $$ 当前进程的PID

      $! 上一个进程的PID

    14.常用表达式

     逻辑连接符  

      && 与,前面不执行 后面也不执行了,前面执行了 才会执行后面的 短路 ls /sdfsdfsdf && echo hello

      || 或, 前面执行了 后面就不执行了 ,前面不执行了,后面会执行 echo hello || ls /sdf

      ; 无逻辑符号,都会执行

     运算

      $[a+b] 或者 $[$a+$b] 

      $((a*b)) 或者 $(($a*$b))

      expr $a + $b 表达式模式

     判断表达式

      字符串:==、!=、-z(如果字符串为空返回真)、-n(如果字符串不为空返回真) v1=12 v2=13

        [ $v1 == $v2 ] 什么结果都没有,这时 需要echo $? 来看看上一次执行的命令是否成功 输出1 则不成功

        [ $v1 != $v2 ]  执行后 输出echo $? 返回0 执行成功

        [ -z $v1 ] 如果为空返回真 echo $? 返回1 执行失败

        [ -n $v1 ] 如果不为空返回镇 echo $? 返回0 执行成功

      数字:eq(是否相等)、ne(不等)、lt(小于)、gt(大于)、le(小与等于)、gt(大于等于)

        [ $v1 -eq $v2 ]  echo $? 返回1

        [ $v2 -ne $v2 ] echo $? 返回0

      文件:-e(是否存在)、-f(是否存在且是文件非目录)、-d(是否存在且是目录非文件)、-w(是否存在且有写权限)、-r(是否存在且有读权限)、-x(执行权限)

        [ -e canshu.sh ]  echo $? 返回0 存在

      时间命令:

        date 输出当前时间

        date -s "yyyy-MM-dd hh:mm:ss" 设置时间

      计划任务:

        临时执行:at 时间 --指定时间执行特定命令

        周期执行:crontab

          首先查看是否开启此服务 service crond status

          用法:crontab [-u 用户] [-l|-r|-e]

          -u: 指定某个用户

          -e:制定计划任务

          -l:列出计划任务

          -r:删除计划任务,该选项是删除所有的计划任务,如果想删除某一条 需要使用-e

    */1 * * * * echo hello >> /home/david/file.log

    分 时 日 月 周 命令  

    可以使用(n-m)来表示一段范围,使用(n,m)表示某两个时间,使用(*)表示所有的时间,使用(/) 表示间隔时间。

    10 21 * * *  每天的21点10分执行命令

    0 5 * * 1 每周一的凌晨5点0分执行命令

    30 4 15,16 * * 每个月15 和16号 凌晨4点半执行命令

    */5 4 * * * 每天4点 每隔5分钟执行一次

    0 4 * * 1-5 每周一到周五的凌晨4点执行

    0 0 1,15 * 1 每月1号和15号,每周1的0点0分都会执行 或的关系

    15.条件判断

      if [条件]

      then

        exec command1

      elif

      then

        exec command3

      else

        exec command2

      fi

    df -h | grep 'root' | awk '{print $5}' | cut -d "%" -f1

    df -h 获取磁盘列表, 然后过滤出root这行,然后 获取第五列 最后过滤掉%号 然后判断这个数字

    vim test.sh

     

    #!/bin/bash

    rate=$(df -h | grep 'root' | awk '{print $5}' | cut -d "%" -f1)

    if [ $rate -lt 80  ]

            then

                    echo "磁盘使用良好小与80%"

            else

                    echo "磁盘使用不好 都快满了"

    fi

    chmod 755 test.sh 

    bash test.sh

    控制台输入, read -t 等待时间 10秒, -p 提示语 , 输入后 保存的变量名 age

    #!/bin/bash

     

    read -t 10 -p "please input your age:" age

     

    if [ $age -gt 0 ]  && [ $age -lt 100 ]

    then

            echo "您输入的年龄有效"

    else

            echo "您输入的年龄无效"

    fi

    [root@MiWiFi-R4-srv david]# vim file.sh

     

    #!/bin/bash

     

    read -t 10 -p "pleas input a file name:" file

     

    if [ -z $file ]

            then

                    echo "输入呀?"

            elif [ ! -e $file  ]

            then

                    echo "没有找到这个文件"

            elif [ -f $file ]

            then

                    echo "这是一个普通文件"

            elif [ -d $file ]

            then

                    echo "这是一个目录"

    fi

    case用法

      case 变量 in 

        value1)

          exec comand1

          ;;

        value2)

          exec comand2

          ;;

        *)

          exec comand3

        esac

    #!/bin/bash

    read -p "please input a number 1~9" number

     

    case $number in

    1)

            echo "执行ls命令"

            ls

            ;;

    2)

            echo "执行pwd命令"

            pwd

            ;;

    *)

            echo "暂只支持1 和2"

    esac

    循环-for

    for [变量] in [取值范围]

      do

        exec command

      done

    for val in $@

    do

            echo $val

    done

    for ((i=1;i<j;j++))

    do

      exec command

    done

    #!/bin/bash

    sum=0

    for((i=0;i<=100;i++))

    do

            sum=$[ $sum+$i ]

    done

     

    echo $sum

    循环—while

    while [条件]

    do

      exec command

    done

  • 相关阅读:
    2013年10月17日 搬出来了
    如何与领导相处
    WEB系统开发
    C++ 常用术语(后续补充)
    C++ 构造函数放置默认转换explicit关键字(2)
    工作与生活
    C++类型转化分析(1)
    (一)win7下cocos2d-x 21 + vs2010
    为了生活
    iOS
  • 原文地址:https://www.cnblogs.com/baidawei/p/9042201.html
Copyright © 2020-2023  润新知