• [Linux1]入门基础知识


    My name is Linus, and I am your God.
    ——————Linus Torvalds

    linux一般来说有2个就业方向,分别是运维岗与开发岗。
    其中运维岗分为:系统运维,数据库运维,python运维开发,网络安全,云计算
    开发:一般是服务器后台开发。
    由于目前接触的是属于服务器后台部署开发,所以也将此做简单的汇总整理,当然了,linux还是推荐鸟叔的私房菜吧.
    本次基础主要是为了接下来的部署项目所服务的。

    linux简介

    免费使用的类Unix操作系统,基于POSIX和UNIX的多用户、多任务,支持多线程和多CPU的操作系统
    发行家族:Debian(Ubuntu-Linux Mint) Fedora(RHEL-CentOS ,Oracle Linux) SUSE(SLES-openSUSE)
    一般来说,服务器使用LAMP (Linux Apache Mysql Php) 或者 LNMP(linux+Nginx+Mysql+PHP)

    本次环境采用的Centos

    linux系统启动过程

    启动过程分为5个阶段:内核的引导 运行init 系统初始化 建立终端 用户登录系统
    首先读入/boot目录下的内核文件,然后运行init (读取/etc/inittab)
    许多程序需要开机自启,在windows是服务(service), 在linux是守护进程(daemon),其中有7个运行级别
    以上基本的5个阶段。

    linux目录结构:

    输入su可以进入root用户
    登录系统,在当前命令输入:

    ls /
    
    会得到以下目录
    bin  boot  dev  etc  home  jar  lib  lib64  lost+found  media  mnt  mysql  opt  patch  proc  root  run  sbin  srv  sys  tmp  usr  var  www
    
    • 1
    • 2
    • 3
    • 4

    下面对一些重要目录做讲解
    /bin: 最常用命令的地方
    /etc: 存放所有的系统管理所需要的配置文件和子目录
    /home:用户的主目录
    /lib:动态连接共享库
    /usr: unix shared resources共享资源
    /usr/bin: 用户使用的应用程序
    /var: variable 修改的目录,日志文件
    注意/表示根目录 : .或者./ 表示当前目录 …或者…/代表上一层目录

    linux文件基本属性

    多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,linux对不同的用户访问同一文件的权限做了规定。
    chown (change owner): 修改所属用户与组
    chmod (change mode):修改用户的权限
    输入命令
    ll 或 者ls -l,可以显示文件的属性
    在这里插入图片描述
    d在文件是一个目录文件。接下来的字符中,以三个为一组,且均为rwx的三个参数组合。r表示read,w表示write,x表示execute,注意位置不会变,如果没有权限就会出现减号。同时这九个权限标注从1-9表示,其中1-3是属主权限,4-6是属组权限,7-9其他用户权限。

    更改文件属性

    1.chgrp 更改文件属组

    chgrp [-R] 属组名 文件名
    
    • 1

    2.chown 更改文件属组

    chown [-R] 属主名 文件名
    
    • 1

    r代表4 ,w代表2,x代表1.例如:-rwxrwx—:分数owner 7,group 7 others 0,所以权限数字就是770
    u(uesr), g(group),o(others) + 加入 - 除去 = 设定

    touch test1 
    ls -al test1 //查看test1权限
    chmod u=rwx,g=rx,o=r test1 //修改test1权限
    
    • 1
    • 2
    • 3

    linux文件与目录管理

    绝对路径:由根目录 /,例如 /usr/share/doc
    相对路径: cd …/man

    处理目录

    常见的命令:

    ls (list files) 
    -a 全部的文件(连同隐藏) -d 仅列出目录本身  -l 长数据串列出
    cd (change directory)
    cd ~ (/root)
    pwd (print work directory)
    mkdir (make directory)
    mkdir test  mkdir -p test1/test2/test3
    rmdir (remove directory) 仅删除空的目录
    rmdir test  rmdir -p test1/test2/test2
    cp (copy file)
    cp source destination
    rm (remove) 删除非空目录
    rm -i bashrc (互动模式,删之前询问动作)
    mv (move file)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    查看文件

    cat (concatenate) 显示文件内容
    tac (cat倒着写,从最后一行往上显示)
    nl (number lines,显示行号和文件内容) 
    more (一页一页的显示文件内容)
    space :向下翻一页,enter :翻一行  q:离开more
    less (可以往前翻页)
    head (只看头几行,默认是10)
    head -n 20 /etc/man.config
    tail (只看尾几行)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    linux用户和用户组管理

    多用户多任务的分时操作系统

    账户管理

    添加账户

    useradd 选项 用户名
    useradd -d /home/sam -m sam 创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录名。/home为默认的用户主目录所在的父目录
    
    useradd -s /bin/sh -g group -G adm,root gem
    新建了一个用户sam,登录shell是/bin/sh,属于group,也属于其他用户组。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    删除账户

    userdel 选项 用户名
    userdel -r sam 删除sam在系统文件中 (/etc/password,/etc/shadow等)
    
    • 1
    • 2

    修改账户

    usermod 选项 用户名
    usermod -s /bin/ksh -d /home/z -g developer sam
    
    • 1
    • 2

    用户口令的管理
    刚创建时没有口令,但是被系统锁定无法使用,必须要指定口令。

    passwd 选项 用户名。超级用户可以指定所有口令,普通用户只能修改自己的口令
    
    • 1

    系统用户组的管理

    增加一个新的用户

    groupadd 选项 用户组
    groupadd group1 增加了一个新组group1
    groupadd -g 101 group2 增加一个新组group2,同时指定新组的组标识是101
    groupdel group1 删除group1
    
    • 1
    • 2
    • 3
    • 4

    系统文件

    1 /etc/passwd 最重要的一个文件
    对所有用户是可读的

    cat /etc/passwd
    每行记录又被冒号分隔为7个字段,格式如下:
    用户名:口令:用户标识号:组标识号:注释描述:主目录:登录shell
    
    • 1
    • 2
    • 3

    用户登录后,要启动一个进程,负责将操作传给内核,这个进程是用户登录到系统后的特定程序,即shell
    shell是用户和linux之间的接口。常见的的有sh( bourne shell), csh(c shell),bash(bourne agagin shell)
    默认使用sh。即字段是/bin/sh

    拥有账户文件

    有许多标准的伪用户,例如mail. usenet audit cron等,也都各自为相关的进程和文件所需要。
    由于/etc/passwd文件所有用户都可读,如果用户密码太简单了很容易破解,一般是分离单独放在一个文件中,这个文件是/etc/shadow,只有root才能读取。

    字段
    登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
    
    • 1
    • 2

    用户组的所有信息存放在/etc/group文件中。
    将用户分组是linux系统的访问权限的一种手段。
    由冒号隔开若干个字段,这些字段

    cat /etc/group
    组名:口令:组标识号:组内用户列表
    
    • 1
    • 2

    批量添加用户

    1.先编辑一个文本用户文件

    touch user.txt
    vim user.txt
    user001::600:100:user:/home/user001:/bin/bash
    user002::601:100:user:/home/user002:/bin/bash
    
    • 1
    • 2
    • 3
    • 4

    2.创建一个密码文本

    user001:123456
    user002:123456
    
    • 1
    • 2

    3.创建 设置密码与同步账户

    newuser < user.txt
    chpasswd < passwd.txt
    pwconv
    
    • 1
    • 2
    • 3

    磁盘管理

    磁盘常用命令为 df du fdisk
    df:

    df (disk free):列出整体磁盘的使用量
    $ df -h 显示容量
    $ df -aT 将系统内所有特殊文件格式及名称列出来
    $ df -h /etc
    以易读的容量格式显示出来
    
    • 1
    • 2
    • 3
    • 4
    • 5

    du:对文件和目录的查看空间

    du -a 显示所有文件和目录容量
    du -h 容量格式显示
    
    • 1
    • 2

    fdisk:分区表操作工具

    fdisk -l :列出所有分区信息
    
    
    • 1
    • 2

    磁盘格式化

    mkfs [-t 文件系统格式] 装置文件名
    
    
    • 1
    • 2

    vi/vim

    vim分为三种模式,分别是命令模式 输入模式 底线命令模式
    命令模式 vi/vim
    i:输入字符
    x:删除所在的字符
    :底线命令模式,在最后一行输入命令

    输入模式
    esc:退出输入模式,切换到命令模式
    insert: 切换光标为输入/替换模式,光标变成竖线
    home/end:移动光标到行首/行尾
    del:删除键

    底线命令模式
    输入:进入
    q:退出程序
    w:保存文件
    按esc可以退出

    yum命令

    yum (yellow dog updater ,modified)是shell前端软件包管理器
    在Fedora RedHat SUSE
    基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装。

    yum [options] [command][package ...]
    
    • 1

    常用命令

    yum check-update 列出可更新的软件清单
    yum install <package> 安装软件
    yum list 列出所有可安装的软件清单
    yum list pam* (以pam开头的软件包)
    yum remove <package> 删除软件包
    yum search <package> 查找软件包
    
    yum clean packages:清除缓存目录下的软件包
    yum clean headers:清除缓存目录下的heads
    yum clean
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    国内的yum源:
    使用163(网易)
    首先备份/ect/yum.repos.d/CentOS-Base.repo

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    
    • 1

    下载对应版本的repo

    CentOS5 :http://mirrors.163.com/.help/CentOS5-Base-163.repo
    CentOS6 :http://mirrors.163.com/.help/CentOS6-Base-163.repo
    CentOS7 :http://mirrors.163.com/.help/CentOS7-Base-163.repo
    
    • 1
    • 2
    • 3
    wget http://mirrors.163.com/.help/CentOS5-Base-163.repo
    mv CentOS6-Base-163.repo CentOS-Base.repo
    
    • 1
    • 2

    运行命令生成缓存

    yum clean all
    yum makecache
    
    • 1
    • 2

    apt命令

    apt (advanced packaging tools) 是一个debian. ubuntu的软件管理器,需要root权限
    常用命令

    sudo apt update 列出所有可更新的软件清单
    sudo apt install <package_name> 安装
    sudo apt remove <package_name>
    sudo apt search <keyword>
    apt list --installed
    
    • 1
    • 2
    • 3
    • 4
    • 5

    shell简介

    shell是一个用编写的程序,既是一种命令语言,也是程序设计语言。
    这里主要以shell脚本编程为例。
    #! 告诉系统路径所指定的程序即解释脚本文件的shell程序。

    touch test.sh
    vim test.sh
    
    #! /bin/bash
    echo "hello world"
    
    
    chmod +x ./test.sh (使脚本有执行权限)
    ./test.sh (执行脚本)一定要这样写,在当前目录寻找
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    shell变量

    定义变量时,不需要加美元符号(区别php)

    your_name="run"
    
    • 1

    注意变量名和等号不能有空格
    处理可以显式赋值还可以用语句赋值

    for file in $(ls /etc) 
    for file in  `ls/etc`
    将/etc目录下的文件名循环出来
    
    • 1
    • 2
    • 3

    使用变量,只要在变量前面加美元符号即可,赋值的时候不需要

    your_run="qin"
    echo $your_run
    echo ${your_run}
    花括号可加可不加,只是为了识别
    
    • 1
    • 2
    • 3
    • 4
    my=1
    readonly my 只读变量
    unset my 删除变量
    
    • 1
    • 2
    • 3

    单引号字符串:任何字符原样输出,里面的变量无效
    双引号:可以有变量

    str="hello\"$your_name"\!\n"
    echo $str 
    
    • 1
    • 2

    字符串操作

    string="abcd"
    获取长度
    echo ${#string} # 输出4
    提取子字符串,注意第一个索引为0
    echo ${string:1:3} #输出bcd
    查找字符串
    echo `expr index "string" ab` #哪个字母先出现就先计算哪个,先输出0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    shell数组
    支持一维数组,不限定数组的大小,从0开始。

    定义数组
    array=(value0 value1 value3)
    array[0]=0
    array[1]=1
    可以不用连续的下标
    
    读取数组
    val=${array[n]}
    
    获取数组的长度
    len=${#array[*]} or. len=${#array[@]}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    注释

    #
    可以把一段要注释的代码用花括号括起来,定义一个函数。
    :<<EOF
    ...注释内容
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5

    shell传递参数

    向脚本传递参数,脚本内获取参数的格式是 $n. n代表一个数字,1为执行的第一个参数

    echo "shell"
    echo "name : $0"
    echo "firsr: $1"
    
    chmod +x test.sh
    ./test.sh 1 2  (后面的是参数)
    
    
    特殊字符用来处理参数:
    $# :传递到脚本的参数个数
    $* :以一个单字符串显示所有向脚本传递的参数
    $$ 当前进程的id号
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    shell数组

    bash shell只支持一维数组,初始化不需要定义数组的大小,从0开始,使用空格分隔

    array_name=(value1 value2 value3)
    
    读取数组
    ${array_name[index]
    echo "${array_name[0]}"
    
    关联数组
    可以使用任意字符串或者整数下标来访问数组元素
    declare -A array_name
    -A 用于声明一个关联数组,键是唯一的,
    declare -A site=(["google"]="www.baidu.com",["run"]="www.run.com")
    
    访问数组
    echo "${array_name[*]}"
    echo "${array_name[@]}" 访问全部元素
    
    获取长度
    echo "${array[*]}"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    shell 运算符

    原生bash不支持数学运算,可以使用命令实现。例如awk,expr。expr是表达式工具,使用它能完成求值工作。

    val=`expr 2 + 2` 表达式和运算符之间要有空格,需要被其包含
    v=`expr 3 \* 4` 乘号必须要有反斜杠
    echo "$val"
    
    • 1
    • 2
    • 3

    关系运算符
    只支持数字不支持字符串,除非字符串的值是数字

    a=10
    b=20
    if [ $a -eq $b ] 相等
    if [ $a -ne $b ] 不相等
    if [ $a -gt $b ] a>b?
    if [ $a -lt $b ] a<b?
    if [ $a -ge $b ] a>=b?
    if [ $a -le $b ] a<=b?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    布尔运算符

    ! 非
    -o 或
    -a 与
    
    • 1
    • 2
    • 3

    逻辑运算符

    && and
    || or
    
    • 1
    • 2

    流程控制

    if condition
    then 
        command1
        command2
    (fi)就一个if
    else (elif)
    	command
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    for循环

    for var in item1 item2 ... itemN
    do
    	com1
    	com2
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5

    while语句

    
    while condition
    do
    	com
    done
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    shell 函数

    [function] funname[()]
    {
    	action
    	[return int;]
    }
    
    domefun() {
    	echo "first"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    输入输出重定向

    一般来说,文件描述符0 是stdin,1是stdout ,2是stderr

    command1 > file1 (将命令存入file1)
    
    
    • 1
    • 2
  • 相关阅读:
    mac安装Homebrew
    R语言空间分析、模拟预测与可视化
    Npm——发布依赖库并使用
    常用数据结构 ——— 队列(环形队列和顺序队列)
    oracle中获取连续几天最低数据
    2022-10-27-梯度下降法结合线性回归预测公交车数量和GDP关系
    一、Linux下常用的压缩格式
    mysql 指定库对所有表加tenant_id
    配置CLion进行嵌入式STM32的HAL库开发
    20 分钟搭建一个串流服务器
  • 原文地址:https://blog.csdn.net/QAZJOU/article/details/126126379