1、基础命令
https://api4jenkins.readthedocs.io/en/latest/user/example.html#jenkins
1.1、命令风格区别
COMMAND [OPTIONS...] [ARGUMENTS...]
OPTIONS选项:用于启用或关闭命令的某些功能
- 短选项:UNIX风格,如ls -l
- 长选项:GUN风格,如ls —all
- BSD风格选项:一个字母,如ps aux
并非所有命令都支持三种选项模式。
1.2、系统版本查询方法
1.2.1、查看内核版本
[root@CentOS-8 ~]# uname -r4.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
