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、文件系统
标准目录结构
inode表结构
- 创建一个文件,消耗一个节点编号
- 磁盘空间满有两种情况:空间满/节点编号用完
- 一般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 //启动|禁用光标线
-