linux基础

1、linux基础命令

alias

  • 语法:

    # 设置别名cdnet-进入网卡配置目录
    alias cdnet="cd /etc/sysconfig/network-scripts"
    # 临时取消
    unalias cdnet
    # 若cdnet与原命令相同,调用原命令
    \cdnet
    
    # 将rm一个文件,改为移动到/databak
    alias rm='mv -t /databak'
    
  • 永久生效:.bashrc当前用户,/etc/bashrc所有用户

  • 与内部命令重名:先执行alias

date+

  • date

    # 修改日期: date MMDDHHmmYYYY.ss
    date 051012342020.03
    
  • hwclock

    # 显示主板时间
    hwclock
    # 硬件为准校系统
    hwclock -s
    # 系统为准校硬件
    hwclock -w
    
  • 时区

    # 显示时区
    /etc/localtime
    # 列出时区
    timedatectl list-timezones
    # 修改时区
    timedatectl set-timezone Asia/Shanghai
    
  • 日历

    # 显示当月日历
    cal
    # 显示当年日历
    cal -y
    # 显示2008年8月日历
    cal 08 2008
    

screen

  • 作用:多人共用一个终端

  • 安装:

    rpm -ivh screen-4.1.0-0.27.20120314git3c2946.el7_9.x86_64
    
  • 命令:

    # 创建会话
    screen -S ${ScreenName}
    # 查看会话
    screen -ls
    # 加入会话
    screen -x ${ScreenName}
    # 控制方临时退出
    ctrl a,d
    # 被控方完全退出
    exit
    

localectl

  • 查看字符集

    echo $LANG
    
  • 列出字符集

    localectl list-locales
    
  • 修改字符集

    localectl set-locale LANG=en_US.utf8
    
  • 对应配置文件:/etc/locale.conf

echo

  • 示例:

    [root@localhost ~]# echo file{a,b,c}.{ini,conf}
    filea.ini filea.conf fileb.ini fileb.conf filec.ini filec.conf
    [root@localhost ~]# echo {001..15..2}
    001 003 005 007 009 011 013 015
    

whatis

  • 功能:查看命令简要说明

    [root@localhost ~]# whatis rm
    rm (1)               - remove files or directories
    

ls --ignore

  • 取反显示
[root@ly ~]# ls *.rpm
libmandoc-1.14.4-2.el7.x86_64.rpm  mandoc-1.14.4-2.el7.x86_64.rpm
[root@ly ~]# ls
1.sh   ansible_c7-02.tar.gz               mandoc-1.14.4-2.el7.x86_64.rpm  software
1.yml  libmandoc-1.14.4-2.el7.x86_64.rpm  setup.sh                        tt.conf
[root@ly ~]# ls --ignore=*.rpm
1.sh  1.yml  ansible_c7-02.tar.gz  setup.sh  software  tt.conf

cp

# cp -a    //保留属性
# cp -v    //显示详细备份信息
# cp -r    //递归复制

dd

  • 功能:生成一个大文件,可测试磁盘IO

    # 生成一个512M的大文件,每个块1M
    [root@ly ~]# dd if=/dev/zero of=/testfile bs=1M count=512
    512+0 records in
    512+0 records out
    536870912 bytes (537 MB) copied, 3.30067 s, 163 MB/s
    
  • 生产环境删除被程序占用的大文件

    # 删除被占用的大文件,不会立即释放,直到程序不占用才释放空间,查看不释放空间的删除文件
    lsof | grep deleted
    # 强制删除方法
    > /bigfile
    rm -rf /bigfile
    

rename

  • 功能:替换

    [root@ly tmp]# ll
    total 0
    -rw-r--r-- 1 root root 0 May 14 23:58 abc.1.tmp
    -rw-r--r-- 1 root root 0 May 14 23:58 abc.2.tmp
    -rw-r--r-- 1 root root 0 May 14 23:58 abc.3.tmp
    -rw-r--r-- 1 root root 0 May 14 23:58 abc.4.tmp
    -rw-r--r-- 1 root root 0 May 14 23:58 abc.5.tmp
    [root@ly tmp]# rename tmp ini abc.{1..5}.*
    [root@ly tmp]# ll
    total 0
    -rw-r--r-- 1 root root 0 May 14 23:58 abc.1.ini
    -rw-r--r-- 1 root root 0 May 14 23:58 abc.2.ini
    -rw-r--r-- 1 root root 0 May 14 23:58 abc.3.ini
    -rw-r--r-- 1 root root 0 May 14 23:58 abc.4.ini
    -rw-r--r-- 1 root root 0 May 14 23:58 abc.5.ini
    

mkdir

  • 示例:

    # 场景1
    [root@ly tmp]# mkdir -p /testdir/dir1/{x,y}/{a,b}
    [root@ly tmp]# tree /testdir
    /testdir
    `-- dir1
        |-- x
        |   |-- a
        |   `-- b
        `-- y
            |-- a
            `-- b
    # 场景2
    [root@ly tmp]# mkdir -p /testdir/dir1/{x/{a,b},y}
    [root@ly tmp]# tree /testdir
    /testdir
    `-- dir1
        |-- x
        |   |-- a
        |   `-- b
        `-- y
    # 场景3
    [root@ly tmp]# mkdir -p /testdir/dir{3,4,5/dir{6,7}}
    [root@ly tmp]# tree /testdir
    /testdir
    |-- dir3
    |-- dir4
    `-- dir5
        |-- dir6
        `-- dir7
    

tr

  • 功能:删除、替换字符

    # 将一行字符串只保留数字和字母
    [root@ly ~]# echo '13A^&*g.dgB34gM@%#' | tr -dc '[0-9][A-Z]'
    13AB34M
    
    # 将小写替换车大写
    [root@ly ~]# who
    root     pts/0        2021-05-15 09:20 (192.168.1.7)
    [root@ly ~]# who | tr 'a-z' 'A-Z'
    ROOT     PTS/0        2021-05-15 09:20 (192.168.1.7)
    
    # 删除括号
    [root@ly ~]# who | tr -d '()'
    root     pts/0        2021-05-15 09:20 192.168.1.7
    
    # 空格压缩为1个
    [root@ly ~]# who | tr -s ' '
    root pts/0 2021-05-15 09:20 (192.168.1.7)
    
    # 一行显示成多行
    [root@ly ~]# ls
    1.log  tmp  tt.conf
    [root@ly ~]# ls | tr -s ' ' '\n'
    1.log
    tmp
    tt.conf
    
    # 计算1到100的乘积
    echo {1..100} | tr " " "*" | bc
    

tee

  • 输出结果并重定向到文件

  • -a:不覆盖

    [root@ly ~]# who |tee 1.log
    root     pts/0        2021-05-15 14:30 (192.168.1.7)
    [root@ly ~]# cat 1.log
    root     pts/0        2021-05-15 14:30 (192.168.1.7)
    

locate

  • 原理:从mlocate数据库查询

  • 安装:yum install -y mlocate

  • 使用:

    # updatedb              //mlocate更新至最新
    # locate aa             //查询带有aa字符的文件或文件夹
    # locate -i aa          //不区分大小写
    # locate -n 3 aa        //-n:显示前几个
    # locate -r "\.ini$"    //-r:基本正则表达式
    

find

  • 使用

    # 指定搜索深度,示例:最小2级最大3级
    find /data -maxdepth 3 -mindepth 2
    
    # 搜索包含ly的文件
    find /data -name "*ly*"
    
    # 正则表达式
    find /data -regex '.*\.sh$'
    
    # 搜索空文件或目录
    find /data -type d -empty
    
    # 组合条件
    -a:与,默认
    -o:或
    !:非
    
    # 排除目录-prune :查找除/etc/sane.d外所有的conf文件
    find /etc/ -path '/etc/sane.d' -a -prune -o -name "*.conf"
    
    # 查找/data路径下所有30天前log文件并删除
    find /data -type f -mtime +30 -name "*.log" -exec rm -rf {} \;
    

getent

  • 功能:查看/etc/passwd或/etc/shadow文件中对应用户的配置行

  • 语法:

    # 查看/etc/passed对应配置
    getent passwd hik
    # 查看/etc/shadow对应配置
    getent shadown hik
    # 查看/etc/group对应配置
    getent group hik
    

chage

  • 功能:用户密码管理

  • 示例:

    # 设置密码期限
    chage $USER
    # 查看密码期限
    chage -l $USER
    # 设置新用户必须改密码
    chage -d0 $USER
    

groupmems

  • 功能:添加用户到其他组

  • 示例:

    # 将hik添加到test组
    groupmems -a hik -g test
    # 将hik从test组删除
    groupmems -d hik -g test
    

cat

  • -A :显示所有控制符(tab、空格)

paste

  • -s:合成一行
  • -d:指定分隔符
# 单文件列成行
[root@ly ~]# cat f2
11
12
13
14
15
16
17
18
[root@ly ~]# paste -s -d : f2
11:12:13:14:15:16:17:18
# 双文件合并
[root@ly ~]# cat f2
11
12
13
14
15
16
17
18
[root@ly ~]# paste f1 f2
A       11
B       12
C       13
D       14
E       15
F       16
G       17
        18
[root@ly ~]# paste -d "--" f1 f2
A-11
B-12
C-13
D-14
E-15
F-16
G-17
-18

2、文件系统

标准目录结构

image-20210512215242400

inode表结构

image-20210515003628151

  • 创建一个文件,消耗一个节点编号
  • 磁盘空间满有两种情况:空间满/节点编号用完
  • 一般inode表会占用1%磁盘空间

链接

  • 硬链接本质:同一个文件的不同名称,指向数据本身。

  • 创建硬链接,不生成新的inode号;不能对目录操作;不能跨分区(跨分区后更改inode表)

    # file1命名为新名称file11
    ln file1 file11
    
  • 软连接本质:创建指针,指向文件名

  • 创建硬链接,生成新的inode号;可对目录操作;可以跨分区;一般用相对路径创建软链接

    # file3创建软链接file4,绝对路径表示
    ln -s /etc/fstab /data/dir1/file4
    # 相对路径表示(相对于软链接的路径)
    ln -s ../../../etc/fstab /data/dir1/file4
    
区别 硬链接 软链接
1、同一个文件?
2、可跨分区?
3、链接数增长?
4、inode号相同?
5、原始文件删除,链接文件可访问?
6、大小与原文件大小?
7、操作目录?
8、相对路径写法 相对于当前目录 相对于链接文件目录

重定向和管道

  • 标准输入0,标准输出1,标准错误2

    # 执行程序1.sh,运行日志run.log,错误日志输出到error.log
    bash 1.sh >run.log 2>error.log
    # 执行程序1.sh,日志都放在run.log
    bash 1.sh &>run.log
    

3、文件和文件组

生成随机数

openssl rand -base64 11

用户上锁

#已设置密码的用户上锁
usermod -L hik
# 解锁
usermod -U hik

新建用户密码策略

  • 配置文件:/etc/login.defs

    [root@ly ~]# cat /etc/login.defs | egrep -v '#|^$'
    MAIL_DIR        /var/spool/mail
    PASS_MAX_DAYS   99999
    PASS_MIN_DAYS   0
    PASS_MIN_LEN    5
    PASS_WARN_AGE   7
    UID_MIN                  1000
    UID_MAX                 60000
    SYS_UID_MIN               201
    SYS_UID_MAX               999
    GID_MIN                  1000
    GID_MAX                 60000
    SYS_GID_MIN               201
    SYS_GID_MAX               999
    CREATE_HOME     yes
    UMASK           077
    USERGROUPS_ENAB yes
    ENCRYPT_METHOD SHA512 
    

创建系统用户

  • 特点:id号小于1000,没有家目录,一般设置不能登陆
useradd -r app -s /sbin/nologin
  • 创建用户默认配置: /etc/default/useradd

    [root@ly ~]# cat /etc/default/useradd 
    # useradd defaults file
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/bash
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes
    
  • 批量添加用户、秀修改密码

    # 批量加用户:准备passwd格式文件userlist
    newusers userlist
    # 批量改密码:准备每行为"用户名:密码"格式的文件p.txt
    cat p.txt | chpasswd
    

特殊权限

  • SUID4:作用于二进制可执行文件上,功能:当用户执行此文件,会继承此文件所有者权限

    [hik@ly ~]$ id hik
    uid=1000(hik) gid=1000(hik) groups=1000(hik),10(wheel),1001(test)
    [hik@ly ~]$ cat /etc/shadow
    cat: /etc/shadow: Permission denied
    [root@ly ~]# ll /bin/cat
    -rwxr-xr-x. 1 root root 54160 Oct 31  2018 /bin/cat
    # 赋予SUID权限
    [root@ly ~]# chmod 4755 /bin/cat
    [root@ly ~]# ll /bin/cat
    -rwsr-xr-x. 1 root root 54160 Oct 31  2018 /bin/cat
    [root@ly ~]# su - hik
    Last login: Sun May 16 12:13:33 CST 2021 on pts/0
    [hik@ly ~]$ cat /etc/shadow | wc -l
    29
    
  • GUID2:作用于二进制可执行文件上,功能:当用户执行此文件,会继承此文件所属组权限;功能二:作用于目录上,当用户在此目录建新文件是,此新文件的所属组继承目录的所属组

    [root@ly ~]# ll /bin/vim
    -rwxr-xr-x. 1 root root 2294208 Oct 31  2018 /bin/vim
    # 赋予GUID权限
    [root@ly ~]# chmod 2755 /bin/vim
    [root@ly ~]# ll /bin/vim
    -rwxr-sr-x. 1 root root 2294208 Oct 31  2018 /bin/vim
    

    赋予SUID和GUID权限:chmod 6755 /bin/vim

  • Sticky1:作用于目录上,功能:对于目录的文件,只能删除自己的文件

    [root@ly ~]# ll -d /tmp
    drwxrwxrwt. 8 root root 247 May 16 12:17 /tmp
    # 去除sticky权限(重新赋予1777,或者o+t)
    [root@ly ~]# chmod 0777 /tmp
    [root@ly ~]# ll -d /tmp
    drwxrwxrwx. 8 root root 247 May 16 12:17 /tmp
    

文件扩展属性

  • chattr +i : 不能删除、移动、修改
  • chattr +a : 只能追加内容
  • lsattr: 查看扩展属性

ACL访问控制

  • 临时添加权限

    # wang用户设置对f1有读写权限
    setfacl -m u:wang:rx f1
    
    # wang用户设置对dir1及其所有文件有读写权限
    setfacl -R -m u:wang:rx dir1
    
    # wang用户设置对dir1及其所有文件有读写权限,并且新创建文件也有权限
    setfacl -R -m d:u:wang:rx dir1
    
    # 查看f1的acl权限
    getfacl f1
    
    # webs组对f1设置权限
    setfacl -m g:webs:rw f1
    
    # 删除wang对f1的权限
    setfacl -x u:wang f1
    
    # 所有acl清空
    setfacl -b f1
    
    # f1的acl权限赋给f2
    getfacl f1 | setfacl --set-file=- f2
    
  • acl中一个位于多个组中的用户,权限取每个组合集

  • 文件权限顺序:文件所有者--自定义用户--自定义组--其他人

4、文本处理

  • 正则表达式

    -E表示扩展正则表达式,与普通正则表达式比少了\
    +: 至少1次
    ?:0次或1次
    
    # 用正则表达式取出basename
    [root@lyonos ~]# echo "/etc/rc.d/init.d/functions" | grep -Eo "[^/]+$"
    
    # 查看fstab文件,去掉空行和#开头
    [root@lyonos ~]# cat /etc/fstab  | grep -Ev "^#|^$"
    
    # ifconfig过滤所有ip地址
    [root@lyonos ~]# ifconfig | grep -Eo \
    "(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
    192.168.1.33
    255.255.255.0
    192.168.1.255
    127.0.0.1
    255.0.0.0
    
  • vim

    • vim +n : vim +/root file1

    • vim +/parrten : 光标移动到第一个被模式匹配到的行首

    • ZZ : 命令模式下保存退出

    • ZQ:命令模式下不保存退出

    • :!cmd : 命令模式下在tty执行其他命令

    • :r!cmd : 命令模式下在tty执行其他命令,并把执行结果写入文件

    • :r filename: 命令模式下将filename内容写入文件

    • :w filename: 命令模式下将编辑内容写入filename

    • 跳转:

      • gg:文件首
      • G:文件尾
      • H:当前页首
      • M:当前页中
      • L:当前页底
      • 0:行首
      • $:行尾
    • 操作:

      • J:删除当前行后的换行符

      • d$:删除光标至行尾内容

      • d0:删除光标至行首内容

      • dd:删除整行(若为剪切用,配合p粘贴)

      • ndd:删除n行

      • dG:光标至文件尾

      • dgg:光标至文件首

        y系列与d系列用法类型

      • cc:删除整行并继续编辑

    • 扩展模式:

      • :1,5d:删除1-5行
      • :3,7y:复制3-7行
      • :.,$d:删除当前行到最后一行
      • :%s/var/char/g:%表示全文,也可指定行号,将var替换为char
      • :%s@[#]|^$@#&@ : 文本中将空行和非#行行首添加#
    • 其他

      • u:撤销
      • ctrl+r:恢复
      • .:重复上个指令1次
      • n.:重复上个指令n次
    • /etc/vimrc(全局),~/.vimrc(个人)

      • set number|nonumber //启动|禁用显示行号
      • set ic|noic //启动|禁用忽略大小写
      • set ai|noai //启动|禁用自动缩进
      • set ts=4 //tab字符数为4
      • set si|nosi //启动|禁用只能缩进
      • set hlsearch|nohlsearch //启动|禁用高亮搜素
      • set list|nolist //启动|禁用TAB(^I)和换行符($)显示
      • set cul|nocul //启动|禁用光标线
posted @ 2021-05-18 08:46  那就这样吧~  阅读(109)  评论(0编辑  收藏  举报