1、基础命令

https://api4jenkins.readthedocs.io/en/latest/user/example.html#jenkins

1.1、命令风格区别
  1. COMMAND [OPTIONS...] [ARGUMENTS...]

OPTIONS选项:用于启用或关闭命令的某些功能

  • 短选项:UNIX风格,如ls -l
  • 长选项:GUN风格,如ls —all
  • BSD风格选项:一个字母,如ps aux

并非所有命令都支持三种选项模式。

1.2、系统版本查询方法

1.2.1、查看内核版本
  1. [root@CentOS-8 ~]# uname -r
  2. 4.18.0-240.el8.x86_64

1.2.2、查看操作系统发行版本
# 红帽系列
[root@CentOS-8 ~]# cat /etc/redhat-release
CentOS Linux release 8.3.2011

# linux通用
[root@CentOS-8 ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="8"
ID="centos"

1.4、可以替代screen的终端管理器tmux

tmux 应用程序的名称来源于终端(terminal)复用器(muxer)或多路复用器(multiplexer)。可以将终端会话分成多个会话。 它管理窗口和窗格:

  • 窗口(window)是一个单一的视图 - 也就是终端中显示的各种东西。
  • 窗格(pane)是该视图的一部分,通常是一个终端会话。

1.4.1、tmux安装
# 安装epel源
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
# 安装tmux
yum -y install tmux

1.4.2、常规使用
# 创建会话
tmux new -s SessionName
# 列出所有tmux 已有的会话
tmux ls
# 打开指定会话
tmux a -t SessionName
# 分屏
1、tmux
2、ctrl+b," 上下分屏
2、ctrl+b,% 左右分屏

1.5、命令行引用:反引号和$()的区别
[root@CentOS-8 ~]# echo '$HOSTNAME'
$HOSTNAME
[root@CentOS-8 ~]# echo 'echo $HOSTNAME'
echo $HOSTNAME
[root@CentOS-8 ~]# echo "echo $HOSTNAME"
echo CentOS-8.3
[root@CentOS-8 ~]# echo `echo $HOSTNAME`
CentOS-8.3
[root@CentOS-8 ~]# echo $(echo $HOSTNAME)
CentOS-8.3
[root@CentOS-8 ~]# echo $(echo ${HOSTNAME})
CentOS-8.3

‘ ‘:强制引用,变量和命令都不能识别

“ “:引用变量,不能识别命令

`:执行反引号内的命令

$():同反引号,执行括号内的命令

{}:引用变量

1.6、修改历史命令记录格式
[root@CentOS-8 ~]# vim .bash_profile
export HISTTIMEFORMAT="%F %T $(whoami) "

[root@CentOS-8 ~]# history
    1  2021-05-05 23:17:44 root ls
    2  2021-05-05 23:17:44 root tmux --help
    3  2021-05-05 23:17:44 root tmux -h

1.7、man命令详解

man命令用来查看linux命令或文件帮助手册,man页面包含不同的章节,具体如下

  • 1:用户命令
  • 2:系统调用
  • 3:C库调用
  • 4:设备文件及特殊文件
  • 5:配置文件格式
  • 6:游戏
  • 7:杂项
  • 8:管理类命令
  • 9:linux内核API

常用示例

1、通过whatis查看对应章节
[root@CentOS-8 log]# whatis passwd
openssl-passwd (1ssl) - compute password hashes
passwd (1)           - update user's authentication tokens
passwd (5)           - password file

2、使用man [章节] 命令查看帮助文档
[root@CentOS-8 log]# man 5 passwd
NAME
   passwd - password file
DESCRIPTION
   The /etc/passwd  file  is  a text file that describes user login accounts for the system.

1.8、文件管理的操作技巧

1.8.1、root用户下的cp、mv、rm别名问题

root用户默认会对cp、mv、rm等命令做-i的别名,在目标文件存在时会使用交互方式提示确认。

[root@CentOS-8 ~]# alias
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'

[root@CentOS-8 ~]# cp -a /tmp/limits.conf /etc/security/limits.conf
cp: overwrite '/etc/security/limits.conf'?

在编写脚本时,一般要避免交互,所以可以使用在命令前增加\的方式强制调用命令本身

[root@CentOS-8 ~]# \cp -a /tmp/limits.conf /etc/security/limits.conf

1.9、通过inode理解文件管理命令

1.9.1、inode是什么

在硬盘中,数据存储在“块”中,读取数据时,会按照一个个“块”的方式读取,块是文件存取的最小单位。“块”的大小,最常见的是4KB。

硬盘格式化时除了存储数据的数据区,还有一块区域就是inode区(inode table)。

  • 数据区:保存文件数据。
  • inode:保存文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点“。
# 通过stat查看inode信息
[root@CentOS-8 ~]# stat anaconda-ks.cfg
  File: anaconda-ks.cfg
  Size: 1255          Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d    Inode: 67834537    Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2021-05-05 20:05:11.946473889 +0800
Modify: 2021-05-05 20:05:12.012411236 +0800
Change: 2021-05-05 20:05:12.012411236 +0800
 Birth: -

1.9.2、inode大小

每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定。一般inode表会占用文件系统磁盘空间的1%。

查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令。

[root@CentOS-8 ~]# df -ih
Filesystem     Inodes IUsed IFree IUse% Mounted on
devtmpfs         242K   395  242K    1% /dev
tmpfs            247K     1  247K    1% /dev/shm
tmpfs            247K   533  246K    1% /run
tmpfs            247K    17  247K    1% /sys/fs/cgroup
/dev/sda3         25M   37K   25M    1% /
/dev/sda1        512K   301  512K    1% /boot
tmpfs            247K     7  247K    1% /run/user/0

1.9.3、linux操作文件流程

每个inode都有一个号码,操作系统用inode号码来识别不同的文件。而文件名只是inode号码便于识别的别称。因此用户通过文件名访问文件的流程为:

  • 系统找到这个文件名对应的inode号码
  • 通过inode号码,获取inode信息
  • 根据inode信息,找到文件数据所在的block,读出数据。

1.9.4、inode和文件管理命令的关系

cp和inode

  • 分配一个空闲inode号,在inode表中创建新条目
  • 在目录中创建一个目录项,将名称与inode关联
  • 拷贝数据生成新的文件

rm和inode

  • 引用数递减,释放inode号可以被重用
  • 把数据块放在空闲列表中
  • 删除目录项
  • 数据块不会被真正删除,知道另外的文件数据这个数据块时被覆盖

mv和inode

  • 如果目标和源文件在同一个分区中,则直接mv
    • 用新的文件名创建对应的目录项
    • 删除旧目录条目记录的旧文件名
    • 不影响inode表或磁盘上的数据位置。
  • 如果目标和源文件不住在同一个文件系统,则相当于cp和rm

1.9.5、与inode相关的案例
  • 提示空间不足No space left on device,但df可以看到很多空间,为什么?
# 首先通过df -h查看发现boot目录只用了45%,但创建文件时却提示空间不足
[root@CentOS-8 test]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        968M     0  968M   0% /dev
tmpfs           986M     0  986M   0% /dev/shm
tmpfs           986M  8.6M  977M   1% /run
tmpfs           986M     0  986M   0% /sys/fs/cgroup
/dev/sda3        50G  1.8G   49G   4% /
/dev/sda1      1014M  448M  567M  45% /boot
tmpfs           198M     0  198M   0% /run/user/0

[root@CentOS-8 test]# touch 1.txt
touch: cannot touch '1.txt': No space left on device

# 这可能是因为inode空间被用完了导致,可通过df -i查看发现boot已经100%了
[root@CentOS-8 test]# df -i
Filesystem       Inodes  IUsed    IFree IUse% Mounted on
devtmpfs         247583    395   247188    1% /dev
tmpfs            252240      1   252239    1% /dev/shm
tmpfs            252240    533   251707    1% /run
tmpfs            252240     17   252223    1% /sys/fs/cgroup
/dev/sda3      26214400  37406 26176994    1% /
/dev/sda1        524288 524288        0  100% /boot
tmpfs            252240      7   252233    1% /run/user/0

1.10、查看进程打开的文件

系统运行的进程,有时候看不到运行的具体脚本,或者看不到打开的文件,可以通过下面方法查看

  • 通过ps确定进程号
[root@CentOS-8 fd]# ps -ef |grep tail
root       23293   22860  0 06:33 pts/0    00:00:00 tail -f anaconda-ks.cfg
root       23331   23299  0 06:36 pts/1    00:00:00 grep --color=auto tail
  • 根据pid查看进程的详细信息
[root@CentOS-8 23293]# cd /proc/23293
[root@CentOS-8 23293]# ll exe fd
lrwxrwxrwx. 1 root root 0 May  6 06:34 exe -> /usr/bin/tail

fd:
total 0
lrwx------. 1 root root 64 May  6 06:34 0 -> /dev/pts/0
lrwx------. 1 root root 64 May  6 06:34 1 -> /dev/pts/0
lrwx------. 1 root root 64 May  6 06:34 2 -> /dev/pts/0
lr-x------. 1 root root 64 May  6 06:34 3 -> /root/anaconda-ks.cfg
lr-x------. 1 root root 64 May  6 06:34 4 -> anon_inode:inotify
  • exe为进程运行的可执行文件
  • fd下为进程打开的文件
    • 0:标准输入(STDIN)
    • 1:标准输出(STDOUT)
    • 2:标准错误(STDERR)
    • 3-n:打开文件

1.11、用户和组管理

1.11.1、新建用户相关文件
  • /etc/default/useradd 创建用户默认参数配置文件
  • /etc/skel/* 用户家目录默认隐藏文件.bash_profile,.bashrc等
  • /etc/login.defs 创建用户默认安全策略,有效期、加密策略等。

1.11.2、非交互式修改用户密码
  • 单用户修改密码
echo PASSWORD | passwd --stdin USER
或
echo user1:passwd | chpasswd
  • 批量修改密码
cat pass.txt
user1:passwd01
user2:passwd02
echo pass.txt | chpasswd

1.12、文件的特殊权限

1.12.1、suid

suid作用在所属主owner上.给文件设置suid必须是文件的属主,设置了suid后其文件对应的属主可执行为位上的x会变成s,如果是大写S表示文件没有可执行权限,设置SUID无效。

# suid作用在程序文件上,则用户拥有运行此文件的所有者权限
[root@CentOS-8 test]# chmod u+s /usr/bin/cat
# 添加s权限后,rwx会变成rws
[root@CentOS-8 test]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 38504 Apr 27  2020 /usr/bin/cat
[root@CentOS-8 test]# su - test01
# 此时普通用户test01也可以打开shadow文件
[test01@CentOS-8 ~]$ cat /etc/shadow
bin:*:18397:0:99999:7:::

1.12.2、sgid

sgid作用在所属组group上

# sgid作用在程序文件上,则用户继承此文件所属组的权限
[root@CentOS-8 test]# ll
total 4
----r-----. 1 root root 615 May  6 13:10 file01
[root@CentOS-8 test]# su test01
[test01@CentOS-8 test]$ cat file01
cat: file01: Permission denied  # 没有权限访问
[root@CentOS-8 test]# chmod g+s /usr/bin/cat    # 添加sgid权限
[root@CentOS-8 test]# ll /usr/bin/cat
-rwxr-sr-x. 1 root root 38504 Apr 27  2020 /usr/bin/cat
[root@CentOS-8 test]# su test01
[test01@CentOS-8 test]$ cat file01  # 可以打开
UUID=ba535336-b4c7-43bb-b5ed-b906868e603b /          xfs     defaults        0 0

# sgid作用在目录上,则在此文件中创建的所有文件都会继承此目录的所属组

1.12.3、sticky

sticky作用在其他other用户

# sticky作用在目录上,则用户只能删除目录中所属主为自己的文件

1.12.4、设置特殊属性,防止root误删
  • charttr +i 不能删除、修改
[root@CentOS-8 test]# chattr +i file01
[root@CentOS-8 test]# ll
total 4
-rw-r--r--. 1 root root 615 May  6 13:10 file01
[root@CentOS-8 test]# lsattr file01
----i--------------- file01
[root@CentOS-8 test]# rm file01
rm: cannot remove 'file01': Operation not permitted
[root@CentOS-8 test]# mv file01 file02
mv: cannot move 'file01' to 'file02': Operation not permitted
  • chattr +a 只能追加,不能删除,改名
[root@CentOS-8 test]# chattr +a file01
[root@CentOS-8 test]# ll
total 4
-rw-r--r--. 1 root root 615 May  6 13:10 file01
[root@CentOS-8 test]# lsattr file01
-----a-------------- file01
[root@CentOS-8 test]# rm file01
rm: cannot remove 'file01': Operation not permitted
[root@CentOS-8 test]# echo "asdada" > file01
-bash: file01: Operation not permitted
[root@CentOS-8 test]# echo "asdada" >> file01

1.13、find处理动作
-print:默认处理动作,显示搜索内容
-ls:类似文件查找ls -l命令
-delete:删除查找的文件
-fls file:查找到的文件的长格式并保存到文件
-ok COMMAND {} \; 对查找的每个文件执行COMMAND命令,执行前交互式要求确认
-exec COMMAND {} \; 对查找的每个文件执行COMMAND命令,无需确认
{}表示查找到的文件名称自身。

1.13.1、示例
find /data/ -type -f -ok rm {} \;
find /data/ -name "*.txt" -exec cp {} {}.bak \;

1.14、xargs 参数替换

xargs用于产生某个命令的参数,xargs用于读入stdin的数据,并且以空格或回车符将stdin的数据分隔成参数

1.14.1、示例
find . -name "*.log" | xargs ls -lart
# 并发执行多个进程
seq 100 |xargs -i -P10 wget -P /data http://192.168.1.1/{}.html
# 并行下载多个视频
seq 10 | xargs -i -P3 you-get https://www.bilibili.com/video/av36489007?p={}

1.14.2、xargs和exec的区别

exec仅能用于find后,对每个文件执行COMMAND命令

xargs可用在所有命令后,将命令的输出作为形成命令的参数

[root@k8s-master tmp]# find . -name "*.log*" -exec ls -l \;  # exec后的ls会显示目录下所有文件,而不是find后的文件
total 4
-rwx------. 1 root root 836 May 25 21:31 ks-script-fcAlUS
-rw-------. 1 root root   0 May 25 21:27 yum.log
-rw-------  1 root root   0 May 25 22:45 yum.log.abc
-rw-------  1 root root   0 May 25 22:44 yum.log.bak
total 4
-rwx------. 1 root root 836 May 25 21:31 ks-script-fcAlUS
-rw-------. 1 root root   0 May 25 21:27 yum.log
-rw-------  1 root root   0 May 25 22:45 yum.log.abc
-rw-------  1 root root   0 May 25 22:44 yum.log.bak
total 4
-rwx------. 1 root root 836 May 25 21:31 ks-script-fcAlUS
-rw-------. 1 root root   0 May 25 21:27 yum.log
-rw-------  1 root root   0 May 25 22:45 yum.log.abc
-rw-------  1 root root   0 May 25 22:44 yum.log.bak
[root@k8s-master tmp]#
[root@k8s-master tmp]#
[root@k8s-master tmp]# find . -name "*.log*" | xargs ls -lart  
-rw-------. 1 root root 0 May 25 21:27 ./yum.log
-rw-------  1 root root 0 May 25 22:44 ./yum.log.bak
-rw-------  1 root root 0 May 25 22:45 ./yum.log.abc