• 计算机基础篇之三


    目录


      1.1 Linux原则

      1.2 命令执行

      1.3 SHELL

      1.4 bash配置文件

      1.5 文件系统FHS

      1.6 命令帮助

      1.7 命令缓存

      1.8 进程安全上下文

      1.9 ls 命令

      1.10 cd 目录

      1.11 命令类型

      1.12 用户文件_passwd

      1.13 用户密码_shadow

      1.14 用户组_group

      1.15 新建用户

      1.16 删除用户

      1.17 修改用户属性

      1.18 环境变量

      1.19 组管理命令

      1.20 用户属性_chown

      1.21 文件权限

      1.22 I/O重定向 

      1.23 管道 "|"

      1.24 系统时钟

      1.25 新建目录

      1.26 修改文件属性

    1.1 Linux原则

    linux基础原则:
    1,目的单一的小程序组成(组合小程序,完成复杂任务)
    2,一切皆文件
    3,尽量避免捕获用户接口(不跟用户交互)
    4,配置文件保存为纯文本格式

    1.2 命令执行

    命令提示符
        #   "#"表示root模式
        #   "$"表示普通用户
                1)系统用户
                2)普通用户
    当输入某条命令后,命令会先交给SHELL,由SHELL交给内核,内核在进行判断,这个命令是否有权限执行,如果无权限,则从什么地方开始执行,且返回错误值

    1.3 SHELL

    SHELL
        #GUI    如:"x-Windows"
        #CLI    如:"Gnome,KDE,..."
            1) sh,bash,csh,zsh,ksh,tcsh,比较常用好用的是bash
    系统合法的SHELL,"[root@xiaofu ~]# cat /etc/shells"文件中。

    1.4 bash配置文件

    用户角度看SHELL类型
        1.登陆式SHELL
            1)正常通过某终端登录(SSH)
            2) su - USERNAME
            3) su -l USERNAME
    #读取配置文件顺序:
        /etc/profile---->/etc/profile.d/*.sh---> ~/.bash_profile---> ~/.bashrc--->/etc/bashrc---> /etc/bashrc
        2.非登陆式SHELL
            1) su USERNAME
            2)通过图形界面打开的SHELL
            3)自动执行的SHELL脚本
    #读取配置文件顺序:
        ~/.bashrc --->/etc/bashrc --->/etc/profile.d/*.sh
    Bash配置文件
        1.全局配置文件
            #/etc/profile, /etc/profile.d/*.sh,  /etc/bashrc
        2.个人配置文件
            # ~/.bash_profile  ,  ~/.bashrc
    #当全局配置文件和个人配置文件不同时,以个人配置为准。
    ######################################
    profile类文件作用:
        1)设定环境变量
        2)运行命令或脚本
    bashrc类文件作用:
        1)设定本地变量
        2)定义别名

    1.5 文件系统FHS

    /boot 系统启动相关文件,如:内核,initrd,grub
    /dev  设备文件 
        块设备:可以实现随机访问的设备,(无先后顺利)
        字符设备        线性,(有次序,按字符为单位),鼠标,显示器 
        设备号:主设备号,次设备号
     /etc  配置文件 
     /home,/root  家目录 
     /lib  库文件,内核模块文件/lib/modules
        静态库  .a
        动态库 动态链接库(.so 共享对象)
    /media,mnt 挂载移动设备,额外的临时文件系统
    /opt 可选目录,安装第三方程序 
    /proc  伪文件系统,没任何内容,启动了就有文件,内核映射文件
    /sys    伪文件系统,和硬件设备相关的属性映射文件
    /tmp,/var/tmp    临时文件
    /var     可变化文件
    /bin     可执行文件 用户命令 系统启动相关的命令
    /sbin                 管理命令
    /usr      全局共享只读文件,只读文件 
        /usr/bin 
        /usr/sbin
        /usr/lib   启动之后某些基本功能相关的命令
        /usr/local 第三方软件
            /bin
            /sbin
            /lib 

    1.6 命令帮助

    内置命令    #help 命令
    外部命令    #命令 --help
    命令手册    #man 命令
    man分章节:
        1.用户命令:所有用户都可以使用的命令(/bin,/usr/bin,/usr/local/bin)
        2.系统调用
        3.库调用
        4.特殊文件(设备文件都属于特殊文件)
        5.文件格式(配置文件语法)
        6.游戏
        7.杂项
        8.管理命令(/sbin,/usr/sbin,/usr/local/sbin)
        --root权限才能使用(修改硬件参数)
    #命令的使用:
    SYNOPSIS
           mount [-lhV]
           mount -a [-fFnrsvw] [-t vfstype] [-O optlist]
        <>--->必须给出的内容
        []--->可选
        ...--->可出现多次
        {}--->进行分组(意义不大)
        | 多选
    MAN:
    NAME:命令名称及功能简要说明
    SYNOPSISS:用法说明(包括可用选项)
    DESCIPTION:详细说明,每个选项的意义
    OPTIONS:说明每个选项的意义
    files:此命令相关的配置文件
    EUGS:
    EXPLAMES:比如:
    SEE    ALSO:另外参照
    man使用:
        向后翻一屏:space(空格键)
        向前翻一屏:b
        向后翻一行:ENTER
        向前翻一行:k
    查找功能:----
        /关键字    :向后
        ?关键字:向前
        n:下一个
        N:前一个
        q:退出
    在线手册:
    info    命令
    帮助文档:/usr/share/doc

    1.7 命令缓存

    命令缓存
        当执行某条命令后,bash会缓存下来
    [root@xiaofu ~]# hash
    hits    command
       1    /usr/bin/mv
       1    /usr/bin/cp
    #缓存的概率对系统而已非常重要,应用缓存,DNS缓存...查找内容的速度非常快,速度是o(1)的---衡量一个程序执行速度的标准
            #从一个列表中查找一个数据的速度随着列表长度变化而发生变化的比例,无论这个队列有多长,o(1)查找的速度一样。

    1.8 进程安全上下文

    进程是用户操作计算机的代理
    ###示例###
    [root@xiaofu tmp]# ll -d *.txt
    -rw-r--r--. 1 user01 group1   0 Dec 15 03:41 1.txt
    -rw-r--r--. 1 user02 group2 465 Dec 15 02:34 2.txt
    ###进示例###
    启动一个进程,这个进程一定是以某个用户的身份运行的,这个用户就是这个进程的发起者,那么这个进程能访问那些资源取决于:
    这个进程自身的属主属组及访问文件的属主属组。
    如:
      进程1 user01 user01 
      对象  rwxr-xr--  user02 user01 a.txt
    1,当进程1访问"a.txt"文件的时候,以什么权限访问?
    #系统查看进程1的属主和"a.txt"的属主是否一样,不一样的话,再看属组(进程1的属主是否属于"a.txt的属组",如果是,则以"r-x"这个权限执行,如果不是属主组则以"other"的身份"r--"访问)
    2, user01 发起"ll"命令后以什么权限执行?
    # "/bin/ls"也有自身的权限"rwxr-xr-x root root /bin/ls""user01"既不是属主组root,所有以"other"权限"r-x"执行,执行成功后的进程2---"ll进程"的属主是进程的发起者"user01"

    1.9 ls 命令

            -l(long) 显示文件属性
            文件属性类型:
                -:普通文件(f)
                -d:目录文件
                -b:块设备文件 block
                -c:字符设备文件 character
                -l:符合链接文件(软链接)
                -p:命令管道符文件 pipe
                -s:套接字符文件 socket
            文件权限---属主,组,其他 (owner:group:other)
            文件硬链接次数
            文件大小(size)单位:字节
            时间戳:最近一次修改时间
                访问时间:access
                修改时间:文件内容发生改变 modify
                改变时间:文件属性的改变    change
            文件的属性数据也叫元数据
        -h:做单位换算
        -a:显示以.开头的隐藏文件
            .    表示当前目录
            ..    表示父目录
        -A  显示当前所有文件(不显示.和..文件)
        -d:显示目录自身属性
        -i:显示文件缩影节点号 index node (inode)
        -r:逆序显示
        -R:递归显示(消耗资源)recursive
    ###示例###
    [root@localhost ~]# ls -l
    total 4
    -rw-------. 1 root root 1572 Nov  3 08:33 anaconda-ks.cfg
    [root@localhost ~]# ls -l /dev
    crw-rw-rw-. 1 root root 1, 8 Dec 9 23:44 random
    drwxr-xr-x. 2 root root 60 Dec 9 23:44 raw
    drwxr-xr-x. 2 root root 80 Dec 9 23:44 rhel
    lrwxrwxrwx. 1 root root 4 Dec 9 23:44 rtc -> rtc0
    crw-------. 1 root root 253, 0 Dec 9 23:44 rtc0

    1.10 cd 目录

    家目录:主目录
        cd    ~用户名:进入指定用户的家目录
        (只有root有权限)
        cd    -    :返回上一次目录
    
    ###示例###
    [root@localhost ~]# cd ~
    [root@localhost ~]# pwd
    /root
    [root@localhost ~]# cd /mnt/
    [root@localhost mnt]# cd /tmp
    [root@localhost tmp]# cd /home
    [root@localhost home]# pwd
    /home
    [root@localhost home]# cd -
    /tmp
    [root@localhost tmp]# cd -

    1.11 命令类型

    命令类型:
        内置命令(SHELL内置)
        外置类型:在文件系统的某个路径下
        有一个与命令名称相应的可执行文件(别名除外)
    
    ###示例###
    [root@localhost home]# type ls
    ls is aliased to `ls --color=auto'
    [root@localhost home]# type cd
    cd is a shell builtin
    [root@localhost home]# type type
    type is a shell builtin

    1.12 用户文件_passwd

    [root@test ~]# vim /etc/passwd
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    zs:x:1000:1000:zs:/home/zs:/bin/bash
    ###注释###
    一位:登录名       #"zs"
    二位:密码占位符,(密码在/etc/shadow里面)      #"x"
    三位:uid            #"1000"
    四位:gid 基本组id ,(其他的附加值在/etc/group里面)      #"1000"
    五位:可选(用户注释信息)     #"zs"
    六位:家目录                         #"/home/zs"
    七位:用户默认SHELL             #"/bin/bash"
    ###系统合法的shell###
    [root@test ~]# cat /etc/shells 
    /bin/sh
    /bin/bash
    /sbin/nologin
    /usr/bin/sh
    /usr/bin/bash
    /usr/sbin/nologin

    1.13 用户密码_shadow

    [root@test ~]# vim /etc/shadow
    xiaofu:$1$11111111$oDTohtH7a0kE4AiKw1H8O/:18241:0:99999:7:::
    user01:!!:18241:0:99999:7:::
    一位:登录名      #"xiaofu"
    二位:加密的密码     #"加密字符串($1$11111111$xxxxxxx)"
    #"1"-->md5加密  "11111111"--->密码加密前面加的杂质 "xxxx"--->用户密码
             #    "*" --->锁定,不允许登陆
                 #"!!" --->空密码
    三位:从1970年1月1日到密码上一次修改所经过的时间
    四位:密码最小使用期限(0不做限定)
    五位:最长时间期限
    六位:密码警告时间
    七位:强制修改时间
    八位:账号有效时间 
    9位:保留

    1.14 用户组_group

    [root@test ~]# vim /etc/group
    xiaofu:x:2000:xiaofu
    mygroup:x:2001:
    mygroup2:x:2002:
    user01:x:2003:
    第1位:用户名
    第2位:密码占位符 
    第3位:组ID
    第4位:以这个组为附加值的用户列表(多个用户,以,号分开)
    
    用户组类别:
        1.私有组:创建用户时,如果没有为其指定所属组,系统会自动为其创建一个与用户名同名的组
        2.基本组(默认组),用户的默认组,基本组未必是私有组
        3.附加值,额外组,默认组以外的其他组

    1.15 新建用户 (useradd)

    useradd 选项 用户名 
        -u   uid
        -g   gid (基本组)
        -G   Gid,...(附加组)可以有多个,使用,号分开 
        -c   注释 (可以用引号引起来)
        -d   家目录 
        -s   指定shell路径
        -m -k 强制为用户创建家目录  
        /etc/skel  #环境的设置文件,bash的配置文件
        bash用于个人用户的环境配置文件
        M   不创建家目录 /etc/login.defs 
    ###示例1###
    ###新建用户"jeff",uid为2020,家目录为"/home/jeff",基本组为"mygroup2",附加值为"xiaofu"###
    [root@test ~]# useradd -d /home/jeff -g mygroup2 -G xiaofu -u 2020 jeff
    [root@test ~]# id jeff
    uid=2020(jeff) gid=2002(mygroup2) groups=2002(mygroup2),2000(xiaofu)
    [root@test ~]# cd /home/jeff/
    [root@test jeff]# pwd
    /home/jeff
    [root@test jeff]# ll -d
    drwx------. 2 jeff mygroup2 62 Dec 11 00:14
    ###示例2###
    ###新建用户user01,uid为2030,gid为2030,家目录为"/home/user01",基本组为"user01",附加组为"mygroup"###
    [root@test ~]# vim /etc/passwd
    jeff:x:2020:2002::/home/jeff:/bin/bash
    user01:x:2030:2030::/home/user01:/bin/bash
    [root@test ~]# vim /etc/group
    xiaofu:x:2000:jeff
    mygroup:x:2001:xiaofu
    mygroup2:x:2002:
    user01:x:2030:
    [root@test ~]# vim /etc/shadow
    jeff:!!:18241:0:99999:7:::
    user01:!!:18241:0:99999:7::    #密码暂时为空
    [root@test ~]# cp -r /etc/skel/ /home/user01    #bash环境变量配置文件拷贝到"/home/user01"目录中
    [root@test ~]# chown -R user01.user01 /home/user01/
    [root@test ~]# chmod -R go= /home/user01/     #属组和其他人无权限访问家目录
    [root@test ~]# su - user01
    Last login: Wed Dec 11 00:32:52 EST 2019 on pts/0     #无密码暂时无法登陆
    [root@test home]# openssl passwd -1 -salt '12312312'      #"-1"使用md5加密 "-salt"密码前加一点杂质的关键字
    Password: 
    $1$12312312$w4nuNA8mCUe8wpnYCpAJD0  #手动创建加密密码并写入/etc/shadow文件中
    [root@test]#vim /etc/shadow
    user01:$1$12312312$w4nuNA8mCUe8wpnYCpAJD0:18241:0:99999:7:::
    测试可正常使用密码从远程登陆
    [root@test default]# vim useradd
    # useradd defaults file
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/bash
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes

    1.16 删除用户

    userdel 选项  用户名 
        默认不删除家目录
        -r 同时删除家目录
    ###以上同useradd命令类似###
    [root@test ~]# userdel -r jeff    #"-r"删除"/home目录下的家目录"
    [root@test ~]# ll /home
    total 4
    drwxr-xr-x. 3 root      root       16 Dec 10 03:24 home
    drwx------. 2 openstack openstack  83 Dec 10 23:36 openstack
    drwx------. 2      2030      2030  99 Dec 11 00:42 user01
    drwx------. 2 xiaofu    xiaofu     99 Dec 11 00:05 xiaofu

    1.17 修改用户属性

    usermod 
        -u 
        -g 
        -G 覆盖以前的附加值
        -Ga 追加附加值 
        -c 注释 
        -d(m) 家目录 (覆盖以前的文件,加m保留以前的文件)
        -l 修改用户登录名 
        -e 用户禁用时间
        -f 非活动时间
        -L 锁定用户账号
        -U  解锁用户账号

    [root@test ~]# chsh
    Changing shell for root.
    New shell [/bin/bash]:
    [root@test ~]#

    [root@test ~]# chfn
    Changing finger information for root.
    Name [root]: haha
    Office []: 110
    Office Phone []: 119
    Home Phone []: 11111

    Finger information changed.
    [root@test ~]# stat
    stat: missing operand
    Try 'stat --help' for more information.
    [root@test ~]# cat /etc/passwd | grep root
    root:x:0:0:haha,110,119,11111:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin

    chage
    -d 最近一次修改时间
    -E 过期时间
    -I 非活动时间
    -m 最短使用期限
    -M 最长使用期限
    -W 警告时间

    1.18 环境变量

    即:命名的内存空间(内存中渔村的值),用于定义当前用户的工作环境的属性,
    新建用户属,位于"/etc/skel"的文件就是bash的环境变量配置文件。
    [root@test ~]# printenv    #显示环境变量
    内存缓存
    [root@test ~]# hash     #使用命令"hash"查看当前SHELL的缓存命令
    hits    command
       2    /usr/bin/printenv

    1.19 组管理命令

    groupadd 
        -r 添加一个系统用户组,useradd也支持   #系统用户通常没有家目录,且不能登陆系统
    groupmod
        -n 修改祖名
    groupdel 
    gpasswd 祖名
    [root@test ~]# gpasswd group1    #给组"group1"加密码
    Changing the password for group group1
    New Password: 
    [user02@test ~]$ id user02
    uid=1001(user02) gid=1001(group2) groups=1001(group2)
    [user02@test ~]$ mkdir 111
    [user02@test ~]$ ls
    111
    [user02@test ~]$ ll -d 111/
    drwxr-xr-x. 2 user02 group1 6 Dec 13 00:10 111/   #目录的组名已经为"group1"

    1.20 用户属性_chown

    chmown 属主 属组  改变文件属主    
    chgrp    
        chown 属主 file ...
        -R 修改目录及其子目录/文件的属主 
        --reference=/path/to/somefile  file, ...
                     (参考某个文件)   新文件
    ###示例###
    [user02@test ~]$ ll
    -rw-r--r--. 1 user02 group2 0 Dec 13 00:20 a.txt
    -rwxrwxr-x. 1 user02 group1 0 Dec 13 00:21 b.txt
    [user02@test ~]$ chown --reference a.txt b.txt   #把b.txt文件的属性修改成a.txt一样
    [user02@test ~]$ ll
    -rw-r--r--. 1 user02 group2 0 Dec 13 00:20 a.txt
    -rwxrwxr-x. 1 user02 group2 0 Dec 13 00:21 b.txt
    -rw-r--r--. 1 root root 358 Nov  3 01:52 redhat.repo
    -rw-r--r--. 1 root root  64 Nov  3 01:52 rhel7.4.repo
    [root@test ~]# chown user01 /etc/yum.repos.d/redhat.repo 
    [root@test ~]# chown :group2 /etc/yum.repos.d/redhat.repo 
    [root@test ~]# chown user02:group3 /etc/yum.repos.d/rhel7.4.repo 
    [root@test ~]# ll  /etc/yum.repos.d/
    -rw-r--r--. 1 user01 group2 358 Nov  3 01:52 redhat.repo
    -rw-r--r--. 1 user02 group3  64 Nov  3 01:52 rhel7.4.repo

    1.21 文件权限

    -rw-r--r--. 1 user02 group3  64 Nov  3 01:52 rhel7.4.repo
    a:all
    o:other
    u:user
    g:group  
    [root@test ~]# chmod a+x script.sh 
    [root@test ~]# chmod a-x script.sh 
    [root@test ~]# chmod go= script.sh 
    [root@test ~]# chmod 777 script.sh 
    [root@test ~]# ll 
    -rwxrwxrwx. 1 root root    0 Dec 13 00:34 script.sh

    1.22 I/O重定向 

    系统设备
        #默认输出设备(标准输出) --->STDOUT 值为1  如:显示器
        #默认输入设备(标准输入)--->STDIN    值为0   如,KB
        #标准错误输出:STDERR      描述符       值为2    如:显示器
    ##############################################
    >     #覆盖输出
    >>    #追加输出
    2>    # 覆盖重定向错误输出
    2>>   #追加重定向错误输出
    <     #输入重定向
    <<    #在此处生成文档,"END,EOF表示文档结束标记"
    ###示例###
    [root@xiaofu ~]# cat << EOF
    > 1
    > 2
    > EOF
    1
    2
    [root@xiaofu ~]# cat >> /tmp/a.txt << END   #在脚本中生成文件
    > hello,World,
    > Nice to meet you!!!
    > END
    [root@xiaofu ~]# cat /tmp/a.txt 
    hello,World,
    Nice to meet you!!!
    ############################################
    [root@xiaofu ~]# ls /varr > /tmp/a1.txt 2> /tmp/var.err
    [root@xiaofu ~]# cat /tmp/a1.txt 
    [root@xiaofu ~]# cat /tmp/var.err 
    ls: cannot access /varr: No such file or directory
    [root@xiaofu ~]# ls /var > /tmp/a1.txt 2> /tmp/var.err
    [root@xiaofu ~]# cat /tmp/a1.txt 
    adm
    cache
    ...
    #############################################
    [root@xiaofu ~]# ls /vdar &> /tmp/b.txt     #不管错误/正确的信息均输出到目标文件中
    [root@xiaofu ~]# cat /tmp/b.txt 
    ls: cannot access /vdar: No such file or directory 
    set
      # -C :禁止对已存在文件使用覆盖重定向
          强制覆盖输出,使用">|"命令
       +C :关闭上诉功能

    1.23 管道 "|"

    管道命令"|"
        #管道:( 前一个命令输出,作为后一个命令的输入 | ...)
        #命令1输出 | 命令2的输入 | 命令3的输入...
    ###示例###
    echo "Hello,World" | tr 'a-z' 'A-Z'
    echo 'redhat' | passwd --stdin root
    [root@xiaofu ~]# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/abc.txt
    #查看"/etc/passwd"倒数第9行并显示用户名和SHELL,并保持在"/tmp/abc.txt"文件中
    systemd-network:/sbin/nologin
    [root@xiaofu ~]# cat /tmp/abc.txt 
    systemd-network:/sbin/nologin
    [root@xiaofu ~]# cut -d: -f1 /etc/passwd | sort -n 
    #让数值排序"/etc/passwd"的文件

    1.24 系统时钟

    时钟
        #rtc 硬件时钟(clock/hwclock)
        #系统时钟 (date)
        hwclock -w (将系统时间同步到硬件时间)
        hwclock -s  (将硬件时间同步到系统)

    1.25 新建目录

    [root@xiaofu ~]# mkdir -p /tmp/test/{a/b,y}   #花括号展开
    [root@xiaofu ~]# tree /tmp/test/
    /tmp/test/
    ├── a
    │   └── b
    └── y
    #######################################################
    [root@xiaofu test]# mkdir -p /tmp/test02/{a,d}_{b,c}
    [root@xiaofu test]# tree /tmp/test02/
    /tmp/test02/
    ├── a_b
    ├── a_c
    ├── d_b
    └── d_c

    1.26 修改文件属性

    touch file 修改文件属性命令
        # touch file 
        # stat file 查看文件属性信息

    END

    成功的背后都是汗水
  • 相关阅读:
    day21--案例源码详解
    字节流,字符流文件复制总结,包含9种方法,都是标准写法
    字符流总结--Day21
    重踏学习Java路上_Day21(字符流,io小结,案例)
    IO流总结--Day20
    递归总结—-day20
    重踏学习Java路上_Day20(递归,IO流)
    File总结_day19
    题解 【POJ1934】 Trip
    题解 【POJ1952】 BUY LOW, BUY LOWER
  • 原文地址:https://www.cnblogs.com/xiaofu89120/p/12018545.html
Copyright © 2020-2023  润新知