时,会判断右边的文件存不存在,如果存在的话就先删除,然后创建一个新的文件,不存在的话则直接创建。_sh">
赞
踩
标准输入:由键盘输入
标准输出:输出到屏幕
标准错误:输出到屏幕
[zqm@haojing ~]$ find /etc -name passwd //绝对匹配;在window操作系统中是模糊匹配
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
/etc/pam.d/passwd //正确信息 标准输出stdout
/etc/passwd //正确信息
find: ‘/etc/selinux/targeted/active’: Permission denied //错误信息 标准错误stderr
find: ‘/etc/selinux/final’: Permission denied //错误信息
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
[zqm@haojing ~]$find /etc -name passwd >passwd.stdout //没有上面绝对查找出来的的文件
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/selinux/targeted/active’: Permission denied
find: ‘/etc/selinux/final’: Permission denied
find: ‘/etc/dhcp’: Permission denied
[zqm@haojing ~]$ cat passwd.stdout //将文件存放到passwd。stdout中
/etc/pam.d/passwd
/etc/passwd
[zqm@haojing ~]$ find /etc -name passwd >>passwd.stdout // >>追加符号
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/selinux/targeted/active’: Permission denied
find: ‘/etc/selinux/final’: Permission denied
find: ‘/etc/dhcp’: Permission denied
[zqm@haojing ~]$ cat passwd.stdout //追加结果
/etc/pam.d/passwd
/etc/passwd
/etc/pam.d/passwd
/etc/passwd
file不存在,则创建
file存在,则覆盖其内容
如果只是想追加内容而不是覆盖原有内容,则可以使用追加符号 >>
> filename 把标准输出重定向到新文件中
1>filename 同上
>>filename 把标准输出追加到文件中
1>>filename 同上
2>filename 把标准错误重定向到新文件中
2>>filename 把标准错误追加到新文件中
使用>或者>>对输出进行重定向。符号的左边表示文件描述符,如果没有的话表示1,也就是标准输出,符号的右边可以是一个文件,也可以是一个输出设备。
当使用>时,会判断右边的文件存不存在,如果存在的话就先删除,然后创建一个新的文件,不存在的话则直接创建。但是当使用>>进行追加时,则不会删除原来已经存在的文件。
[zqm@haojing ~]$ ls /dev/null
/dev/null
[zqm@haojing ~]$ file /dev/null
/dev/null: character special
[zqm@haojing ~]$ cat /dev/null
[zqm@haojing ~]$ find /etc -name passwd 2> /dev/null
/etc/pam.d/passwd
/etc/passwd
[zqm@haojing ~]$ cat /dev/null
/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。那么执行了>/dev/null之后,标准输出的内容就会不再存在,没有任何地方能够找到输出的内容。
[zqm@haojing lab]$ touch file1
[zqm@haojing lab]$ > filer2 //可以创建空文件
[zqm@haojing lab]$ ls
file1 filer2
[zqm@haojing lab]$ >> file3 //追加也可以实现
[zqm@haojing lab]$ ls
file1 file3 filer2
# 创建一个空文件testfile
> testfile
>> testfile
[zqm@haojing lab]$ find /etc -name passwd &> passwd.all //正确和错误的都在同一个文件夹
[zqm@haojing lab]$ cat passwd.all
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
/etc/pam.d/passwd
/etc/passwd
find: ‘/etc/selinux/targeted/active’: Permission denied
find: ‘/etc/selinux/final’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
# 将错误信息正确信息覆盖写入到相同文件
[zqm@haojing lab]$ find /etc -name'passwd' &>passwd.all
# 将错误信息正确信息追加写入到相同文件
[zqm@haojing lab]$ find /etc -name'passwd' &>>passwd.all
管道符(|)实现,将上一个命令的输出作为标准输入传递给下一个命令。(可以起到过滤作用)
[zqm@haojing lab]$ mandb
[zqm@haojing lab]$ man-k ext4 >ext4.man //搜索所有ext4手册,并报错到ext4.man文件中
[zqm@haojing lab]$ cat ext4.man
debugfs (8) - ext2/ext3/ext4 file system debugger
dumpe2fs (8) - dump ext2/ext3/ext4 filesystem i...
e2fsck (8) - check a Linux ext2/ext3/ext4 fil...
e2image (8) - Save critical ext2/ext3/ext4 fil...
e2label (8) - Change the label on an ext2/ext3...
e2undo (8) - Replay an undo log for an ext2/e...
e4defrag (8) - online defragmenter for ext4 fil...
ext4 (5) - the fourth extended file system
[zqm@haojing lab]$ grep resize ext4.man //过滤ext4.man文件中含有resize的行
resize2fs (8) - ext2/ext3/ext4 file system resizer
[zqm@haojing lab]$ grep resize ext4.man
resize2fs (8) - ext2/ext3/ext4 file system resizer
[zqm@haojing lab]$ man -k ext4 | grep resize
resize2fs (8) - ext2/ext3/ext4 file system resizer
[zqm@haojing lab]$ man -k ext4 | grep mke2fs
mke2fs (8) - create an ext2/ext3/ext4 filesystem
[zqm@haojing lab]$ man -k ext4 | grep fsck
e2fsck (8) - check a Linux ext2/ext3/ext4 fil...
fsck.ext2 (8) - check a Linux ext2/ext3/ext4 fil...
fsck.ext3 (8) - check a Linux ext2/ext3/ext4 fil...
fsck.ext4 (8) - check a Linux ext2/ext3/ext4 fil...
[zqm@haojing lab]$ man -k ext4 | grep fsck | grep fsck.ext4 //可以进一步过滤
fsck.ext4 (8) - check a Linux ext2/ext3/ext4 fil...
[zqm@haojing lab]$ ip a |grep 10.1.8
inet 10.1.8.88/24 brd 10.1.8.255 scope global noprefixroute ens32
tee 命令作用,接收管道传递过来的stdin,并继续作为stdout输出。
tee命令覆盖保存到文件
[zqm@haojing lab]$ find /etc -name 'passwd' 2>/dev/null | tee passwd.list
/etc/pam.d/passwd
/etc/passwd
[zqm@haojing lab]$ cat passwd.list
/etc/pam.d/passwd
/etc/passwd
[zqm@haojing lab]$ find /etc -name passwd 2> passwd.stderr |tee passwd.list
/etc/pam.d/passwd
/etc/passwd
[zqm@haojing lab]$ cat passwd.list
/etc/pam.d/passwd
/etc/passwd
存到三个文件
[zqm@haojing lab]$ find /etc -name passwd 2> passwd.stderr |tee passwd1 | tee passwd2 |tee passwd3
/etc/pam.d/passwd
/etc/passwd
[zqm@haojing lab]$ cat passwd[123]
/etc/pam.d/passwd
/etc/passwd
/etc/pam.d/passwd
/etc/passwd
/etc/pam.d/passwd
/etc/passwd
cat打印字符串
[zqm@haojing ~]$ cat passwd.stdout
/etc/pam.d/passwd
/etc/passwd
/etc/pam.d/passwd
/etc/passwd
[zqm@haojing ~]$ cat <passwd.stdout
/etc/pam.d/passwd
/etc/passwd
/etc/pam.d/passwd
/etc/passwd
[zqm@haojing ~]$ cat
hello // 键盘输入hello后回车
hello //屏幕上显示hello
判定一个命令是否接收标准输入:最简单的方式就是将文件内容作为标准输入重定向给程序。
思考:如何一次性将多行内容写入到文件中?
# 方法1:使用引号
[zqm@haojing lab]$ echo 'hello word
> hello python
> hello linux' >multi.lines.txt
[zqm@haojing lab]$ cat multi.lines.txt
hello word
hello python
hello linux
[zqm@haojing lab]$ echo 'hello word> hello python> hello linux' > multi_lines.txt
[zqm@haojing lab]$ cat multi_lines.txt
hello word> hello python> hello linux
# 方法2:使用cat重定向
[zqm@haojing lab]$ cat > multi_lines.txt <<EOF
> hello word
> hello python
> hello linux
> EOF
[zqm@haojing lab]$ cat multi_lines.txt
hello word
hello python
hello linux
变量用于保存字符串值,便于后续引用,变量值存储在当前会话内存中。
变量名只能包含:
字母
数字
下划线
==注意:== 变量名不能以数字开头。
shell中变量的类型,一般不需要明确指明。
变量定义
[zqm@haojing lab]$ var1=key1
标准格式如下
[zqm@haojing lab]$ declare var1=key1
使用$引用变量值
[zqm@haojing lab]$ echo $var1
key1
[zqm@haojing lab]$ first_name=facai
[zqm@haojing lab]$ last_name=zhang
[zqm@haojing lab]$ echo $last_name $first_name
zhang facai
使用多个空格,效果一样
[zqm@haojing lab]$ echo $last_name $first_name
zhang facai
使用引号保留多个空格(两个更美观)
[zqm@haojing lab]$ echo "$first_name $last_name"
zhang facai
[zqm@haojing lab]$ echo $last_name_$first_name //字母数字下划线为变量名,所以把他们当成了一个整体,需要用{}限定变量范围
facai
# 使用{}限定变量范围
[zqm@haojing lab]$ echo ${last_name}_$first_name
zhang_facai
变量保存在内存中,重启之后则消失如果需要保留,则将变量保存到配置文件当中
局部变量,只在当前shell中生效。
全局变量,在当前shell以及shell子程序都生效。
[zqm@haojing lab]$ username=xuran
[zqm@haojing lab]$ echo $username
xuran
[zqm@haojing lab]$ bash
[zqm@haojing lab]$ echo $username
[zqm@haojing lab]$ exit
exit
[zqm@haojing lab]$ export username //扩大变量范围,到子程序中
[zqm@haojing lab]$ bash
[zqm@haojing lab]$ echo $username
xuran
[zqm@haojing lab]$ export username=tom
# 或者
[zqm@haojing lab]$ username=tom;export username
[zqm@haojing lab]$ echo $username
[zqm@haojing lab]$ bash
[zqm@haojing lab]$ echo $username
tom
根据变量是否是用户定义:
shell 环境变量:设置shell的运行环境。
用户自定义变量:字面意思,用户自己定义的变量,也就是普通变量。
部分shell环境变量如下:
环境变量名 | 作用 |
EDITOR | 默认编辑器 |
HISTFILE | 历史文件位置 |
HISTFILESIZE | 历史命令个数 |
PS1 | 命令行提示符 |
LANG | shell环境语言 |
PATH | 命令搜素路径 |
HOME | 当前用户家目录 |
USER | 当前用户 |
PWD | 当前shell路径 |
PS1 默认:\s-\v$ PS2 默认: >
\h 主机名,第一个 `.' 之前的部分 \H 主机名 \n 新行符 \t 当前时间,采用 24小时制的 HH:MM:SS 格式 \T 当前时间,采用 12小时制的 HH:MM:SS 格式 \@ 当前时间,采用 12小时制上午/下午 (am/pm) 格式 \A 当前时间,采用 24小时制上午/下午格式 \u 当前用户的用户名 the username of the current user \w 当前工作目录 \W 当前工作目录的基本部分 $ 如果有效 UID 是 0,就是 #, 其他情况下是 $
[zqm@haojing ~]$ echo $PS1
[\u@\h \W]\$
[zqm@haojing ~]$ PS1='[\u@\h \w \t]\$ '
[zqm@haojing ~ 20:37:18]$
[zqm@haojing ~ 20:39:03]$ bash
[zqm@haojing ~]$ export EDITOR=vim
[zqm@haojing ~]$ crontab -e
* * * * * * * * * //变颜色
[zqm@haojing ~]$ LANG=zh_CN.utf-8
[zqm@haojing ~]$ date
2023年 03月 23日 星期四 20:43:24 CST
[zqm@haojing ~]$ ls
dhcpd.conf home mytmp passwd.stdout profile.sh
etc lab passwd passwd.stout
[zqm@haojing ~]$ find /etc -name passwd
find: ‘/etc/grub.d’: 权限不够
find: ‘/etc/pki/CA/private’: 权限不够
find: ‘/etc/pki/rsyslog’: 权限不够
/etc/pam.d/passwd
/etc/passwd
find: ‘/etc/selinux/targeted/active’: 权限不够
find: ‘/etc/selinux/final’: 权限不够
find: ‘/etc/dhcp’: 权限不够
find: ‘/etc/lvm/archive’: 权限不够
find: ‘/etc/lvm/backup’: 权限不够
find: ‘/etc/lvm/cache’: 权限不够
[root@haojing ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
[root@haojing ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@haojing ~]# mv /usr/bin/ls .
[root@haojing ~]# ls
bash: ls: command not found...
Similar command is: 'lz'
[root@haojing ~]# mkdir bin
[root@haojing ~]# mv ls bin
[root@haojing ~]# which ls
alias ls='ls --color=auto'
/root/bin/ls
[root@haojing ~]# ls
anaconda-ks.cfg bin initial-setup-ks.cfg
[root@haojing ~]#
login shell 启动的时候,会加载一下配置文件中配置
/etc/profie,限定所有用户
~/.bash_profile,只限定特定用户
~/.bashrc,只限定特定用户
/etc/bashrc,限定所有用户
nologin shell启动的时候,会按以下顺序加载配置文件中配置
~/.bashrc,只限定特定用户
/etc/bashrc,限定所有用户
[zqm@haojing ~]$ vim .bashrc
[zqm@haojing ~]$ bash //此处的bash相当于下面一条命令
hello word
[zqm@haojing ~]$ source .bashrc
hello word
[zqm@haojing ~]$ cat .bashrc
echo hello word
Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
[zqm@haojing ~]$ . .bashrc //.相当关于source
hello word
bash还会读取 /etc/profile ~/.bash profile ~/.bash login ~/.profile
用vi修改文件,保存文件时,提示没有修改该文件的权限“E45: ‘readonly’ option is set (add ! to override)”的解决方法:
1.按Esc键
2.输入 :set noreadonly
3.然后就能正常保存了,你可以输入 :wq 来保存文件了。
[zqm@haojing ~]$ vim .bashrc
[zqm@haojing ~]$ vim .profile
[zqm@haojing ~]$ vim .bashrc_profile
[zqm@haojing ~]$ vim .bash_profile
[zqm@haojing ~]$ bash
.bashrc
[zqm@haojing ~]$ exit
exit
[zqm@haojing ~]$ su - zqm
Password:
Last login: Thu Mar 23 21:30:19 CST 2023 from 10.1.8.1 on pts/1
.bash_profile
.bashrc
常见 LANG代码:
英语:en_US.utf8
简体中文:zh_CN.utf8
繁体中文:zh_TW.utf8
格式如下:
$(COMMAND)
`COMMAND`
[zqm@haojing ~]$ echo Today is Tuesday.
Today is Tuesday.
[zqm@haojing ~]$ echo Today is $(date +%A).
Today is Thursday.
[zqm@haojing ~]$ echo Welcome $USER to L //$后面必须大写
Welcome zqm to L
[zqm@haojing ~]$ echo Welcome $user to L
Welcome to L
许多字符在bash中有特殊的意义,忽略这些含义,使用引号和转义字符。
\,取消后面单个字符的特殊含义。
双引号(""),压缩shell扩展含义,不压缩命令替换、变量替换和转义字符。
单引号(''),可以压缩单引号内部的所有字符含义。
[zqm@haojing ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/zqm/.local/bin:/home/zqm/bin
[zqm@haojing ~]$ echo \PATH
PATH
[zqm@haojing ~]$ echo \$PATH
$PATH
[zqm@haojing ~]$ echo *** Welcome to $user to L ***
dhcpd.conf etc file-20230323 home lab mytmp passwd passwd.stdout passwd.stout profile.sh Welcome to to L dhcpd.conf etc file-20230323 home lab mytmp passwd passwd.stdout passwd.stout profile.sh
[zqm@haojing ~]$ echo " *** Welcome to $user to L ***" //双引号可以压缩扩展字符,不压缩命令替换、变量替换和转义字符。
*** Welcome to to L ***
[zqm@haojing ~]$ echo " *** Welcome to $user to $(hostname) ***"
*** Welcome to to haojing.com ***
[zqm@haojing ~]$ echo ' *** Welcome to $user to $(hostname) ***' //单引号保持原样输出
*** Welcome to $user to $(hostname) ***
思考:
# 下面命令的输出
[laoma@haojing ~]$ echo \\\
# 最终输出一个 \ 符号
[zqm@haojing ~]$ echo \\
\
[zqm@haojing ~]$ echo \\\\
\\
[zqm@haojing ~]$ echo '\\\'
\\\
# 下面命令的输出
[laoma@haojing ~]$ echo 'Let\'s go'
> '
Let\s go
[zqm@haojing ~]$ echo Let's go.
> '
Lets go.
[zqm@haojing ~]$ echo Let\'s go.
Let's go.
# 使用 echo 一次性在文件中输入多行字符串
[laoma@haojing ~]$ echo "hello 1
hello 2
hello 3"> hello.txt
[laoma@haojing ~]$ cat hello.txt
hello 1
hello 2
hello 3
在内部,系统通过分配给它们的唯一标识号,用户ID或UID来区分用户帐户。
用户帐户主要有三种类型:
superuser:用于管理系统,用户名称为root,UID为0,对系统具有完全访问权限。
system users:系统具有系统用户帐户,由提供支持服务的进程使用。 这些进程或守护进程通常不需要以超级用户身份运行。 它们是非特权帐户,用户保护自己文件和其他资源。系统用户帐户不用于交互方式登录系统。
regular users:大多数用户拥有常规用户帐户,用于日常工作。
/etc/passwd 文件保存操作系统登录用户信息。每行包含一个登录用户信息,以冒号分隔七个域。
name:用户登录名
password:用户密码,以x表示
UID:用户ID
GID:用户主组ID
GECOS:用户描述信息,通常为用户的真实姓名
directory:用户主目录,启动shell时的工作目录,默认位于/home/username
shell:用户打开终端时运行的程序,默认是/bin/bash。
对于system user,它的shell是/sbin/nologin。
组是用户的集合,组中用户集成组权限。与用户一样,组具有组名称以使其更易于使用。系统通过分配给它们的唯一标识号,组ID或GID来区分组。
/etc/group 文件保存操作系统组信息。每行包含一个组信息,以冒号分隔4个域。
group_name:组名称
password:组密码,用x表示
GID:组ID,唯一表示组
user_list:作为补充的成员
组的类型:
主要组:每个用户只有一个主要组,/etc/passwd文件中的GID编号定义。 默认情况下,用户创建的新文件组所有者为用户的主要组。通常,在创建新的常规用户时,会创建一个与该用户同名的新组。该组用作新用户的主要组,该用户是此用户专用组的唯一成员,有助于简化文件权限管理。
补充组:用户还可以拥有补充组。 补充组的成员资格由/etc/group文件确定。 根据用户的任何组是否具有访问权限,授予用户访问权限的权限。例如,如果用户user01具有主要组user01和补充组wheel和webadmin,则该用户可以读取这三个组中任何一个组可读的文件。
查看当前终端中登录的用户。
[zqm@haojing ~]$ whoami
zqm
查看当前系统中所有终端上登录的用户,以及用户登录的时间。
[zqm@haojing ~]$ tty
/dev/pts/1
[zqm@haojing ~]$ who
zqm :0 2023-03-23 06:43 (:0)
zqm pts/0 2023-03-23 20:42 (10.1.8.1)
zqm pts/1 2023-03-23 23:07 (10.1.8.1)
root pts/2 2023-03-23 21:43 (10.1.8.1)
查看当前系统中所有终端上登录的用户名。
[zqm@haojing ~]$ users
root zqm zqm zqm
作用:创建用户
# 用户1
[root@haojing ~]# useradd user01
[root@haojing ~]# grep user01 /etc/passwd
user01:x:1003:1003::/home/user01:/bin/bash
[root@haojing ~]# useradd user01
[root@haojing ~]# grep user01 /etc/passwd
user01:x:1001:1001::/home/user01:/bin/bash
[root@haojing ~]# ls /home
user01 zqm
[user01@haojing ~]$ id user01
uid=1001(user01) gid=1001(user01) groups=1001(user01)
[root@haojing ~]# useradd user02 -d /opt/user02 -u 1012 -c 'hello user 2' -s /bin/tmux -g root -G wheel
[root@haojing ~]# grep user0 /etc/passwd
user01:x:1001:1001::/home/user01:/bin/bash
user02:x:1012:0:hello user 2:/opt/user02:/bin/tmux
[root@haojing ~]# su - user02
su: failed to execute /bin/tmux: No such file or directory
# 用户2
[root@haojing ~]# useradd -u 8888 -d /opt/user02 -c "user for software manager" -g wheel -s /sbin/nolgin user02
useradd: user 'user02' already exists
[root@haojing ~]# grep user02 /etc/passwd
user02:x:1012:0:hello user 2:/opt/user02:/bin/tmux
[root@haojing ~]# ls -d /opt/user02/
/opt/user02/
新用户家目录中的文件来源于/etc/skel/目录。
创建用户的时候,用户属性默认参数配置在/etc/login.defs文件。
作用:修改用户属性。
[root@haojing ~]# usermod user02 -u 1008 -md /home/user02 -s /bin/bash
[root@haojing ~]# grep user02 /etc/passwd
user02:x:1008:0:hello user 2:/home/user02:/bin/bash
[root@haojing ~]# ls -d /home/user02/
/home/user02/
[root@haojing ~]# su - user02
Last login: Thu Mar 23 23:42:22 CST 2023 on pts/0
[user02@haojing ~]$
# 添加补充组,如果没有-a选项,则代表将补充组设置为user01,原先的补充组就被覆盖了。
[root@haojing ~]# usermod -aG user01 user02
[root@haojing ~]# id user02
uid=1008(user02) gid=0(root) groups=0(root),10(wheel),1001(user01)
# 正常删除
[root@haojing ~]# useradd user03
[root@haojing ~]# id user03
uid=1009(user03) gid=1009(user03) groups=1009(user03)
[root@haojing ~]# userdel -r user03
[root@haojing ~]# id user03
id: user03: no such user
# 强制删除
[root@haojing ~]# userdel -fr user02
[root@haojing ~]# groupadd binstall
[root@haojing ~]# groupadd oinstall
[root@haojing ~]# groupadd dba
[root@haojing ~]# groupadd oper
[root@haojing ~]# groupadd oper /etc/group // 验证
binstall:x:1002:
oinstall:x:1003:
dba:x:1004:
oper:x:1005:
[root@haojing ~]# cat /etc/group |tail -3
oinstall:x:1003:
dba:x:1004:
oper:x:1005:
groupadd后为组名,-g后面为组id
[root@haojing ~]# useradd -g oinstall -G dba,oper oracle
[root@haojing ~]# cat /etc/group |tail -3
oinstall:x:1003:
dba:x:1004:oracle
oper:x:1005:oracle
# 修改组名称
groupmod --new-name admins admin
# 修改组id
groupmod -g 2002 admins
# 验证
grep '^admin' /etc/group
[root@haojing ~]# groupmod dba --new-name dbas
[root@haojing ~]# id oracle
uid=1009(oracle) gid=1003(oinstall) groups=1003(oinstall),1005(oper),1004(dbas)
groupdel sysadmin
grep sysadmin /etc/group
[root@haojing ~]# groupmems --help
用法:groupmems [选项] [动作]
选项:
-g, --group groupname 更改组 groupname,而不是用户的组(只 root)
-R, --root CHROOT_DIR chroot 到的目录
动作:
-a, --add username 将用户 username 添加到组成员中
-d, --delete username 从组的成员中删除用户 username
-h, --help 显示此帮助信息并推出
-p, --purge 从组中移除所有成员
-l, --list 列出组中的所有成员
# 添加成员
[root@haojing ~]# groupmems -g root -a oracle
[root@haojing ~]# id oracle
uid=1009(oracle) gid=1003(oinstall) groups=1003(oinstall),0(root),1005(oper),1004(dbas)
# 删除成员
groupmems -g admins -d zqm
groupmems -g admins -l
/etc/shadow文件保存操作系统登录用户密码信息。
每行包含一个登录用户信息,以冒号分隔九个域。
[root@haojing ~]# grep zqm /etc/shadow
zqm:$6$PnJAyhn6$a4RbXub5N1LSu9T4wEnxadGkLUCpn6lMA.FmvJhKjmsaUl3v867bHY332kycOREfPgA4Wsb3G/UaI0vQ2BM.b0:19425:0:99999:7:::
解释如下:
login name:用户登录名。
encrypted password:加密的密码。
date of last password change:上一次密码更改日期,以距离1970-1-1过去的天数表示。设置为0,强制用户下次登录时更改密码。
minimum password age:最小密码生命周期。设置为0,密码可以随时更改。
maximum password age:最大密码生命周期。
password warning period:密码过期前,提前多少天告警。设置为0,不提示过期。
password inactivity period:密码过期后,非活跃天数,在期间密码仍可以使用。
account expiration date:账户过期时间,以距离1970-1-1过去的天数表示。
reserved field:保留域。
[root@haojing ~]# useradd laowang -p '$6$PnJAyhn6$a4RbXub5N1LSu9T4wEnxadGkLUCpn6lMA.FmvJhKjmsaUl3v867bHY332kycOREfPgA4Wsb3G/UaI0vQ2BM.b0:19425'
[root@haojing ~]# ssh laowang@localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:+n9JaGYu2GNaO0R1W58ftIyXH1HwXqU/mBeJDpr/+/k.
ECDSA key fingerprint is MD5:64:c9:a4:ad:bd:22:5a:c0:2c:d6:85:52:26:e5:89:a6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
laowang@localhost's password:
在当前目录下创建三个文件:file-1 file-2 file-3
[zqm@haojing lab]$ > file-1
[zqm@haojing lab]$ > file-2
[zqm@haojing lab]$ > file-3
[zqm@haojing lab]$ ls
ext4.man file-2 filer2 passwd1 passwd.all
file1 file3 multi_lines.txt passwd2 passwd.list
file-1 file-3 multi.lines.txt passwd3 passwd.stderr
你对谈谈你对输出重定向的理解,用示例说明。
输出重定向是一种将程序的输出从 stdout 或 stderr 文件描述符(默认显示在终端屏幕上)重定向到指定文件或文件描述符的方法。这样做的目的是将程序的输出保存到文件或发送到其他程序或设备中。输出重定向符号 > 和 >> 分别表示覆盖写和追加写,其中 1 表示 stdout,2 表示 stderr。
将一个命令的输出保存到一个文本文件中:
ls / > file.txt
这个命令将列出根目录下的所有文件和目录,并将其输出重定向到名为 file.txt 的文件中。如果该文件不存在,则创建它,并将输出写入其中。如果该文件已存在,则覆盖原有的内容。
另外一个示例,假设我们想将一个长时间运行的程序的输出保存到日志文件中。可以使用以下命令:
./long_running_program > log.txt 2>&1
在这个命令中,我们将程序的 stdout 输出重定向到 log.txt 文件,而 stderr 输出重定向到 stdout。这样,所有的输出都被捕获到同一个文件中,便于查看和分析。
谈谈你对管道符(|)的理解,用示例说明。
管道符(|)是一种用于连接进程的符号。它将一个进程的输出传输到另一个进程的输入。也就是说,管道符允许我们将多个命令串联在一起,形成一个管道链。
列出某个目录下的所有文件,并按照文件大小排序:
ls -l | sort -n -k 5
这个命令中,ls -l 列出了当前目录下的所有文件,并将输出传递给 sort -n -k 5 ,这个命令会按照文件大小(第 5 列)进行排序。通过使用管道符,我们可以将这两个命令拼接在一起,达到我们想要的效果。
[zqm@haojing lab]$ man -k ext4 | grep fsck | grep fsck.ext4 //可以进一步过滤
fsck.ext4 (8) - check a Linux ext2/ext3/ext4 fil...
[zqm@haojing lab]$ ip a |grep 10.1.8
inet 10.1.8.88/24 brd 10.1.8.255 scope global noprefixroute ens32
管道符的作用是将多个命令串联在一起,实现更复杂的操作。
谈谈你对tee命令的理解,用示例说明。
Tee用于在终端上输出信息,并将其保存到文件中。Tee命令的名字来源于T形管道符(|),因为它的作用就像一个T形管道。
Tee命令可以将终端上的标准输出输出到一个或多个文件中,并将其同时输出到屏幕上。它的语法格式为:
tee [options] [file …]
将命令的输出保存到文件中:
ls -l | tee file.txt
上述命令将列出当前目录下的文件列表,并将该列表保存到file.txt文件中。
将命令的输出保存到多个文件中:
ls -l | tee file1.txt file2.txt
上述命令将列出当前目录下的文件列表,并将该列表保存到file1.txt和file2.txt文件中。
追加输出到文件:
ls -l | tee -a file1.txt
上述命令将列出当前目录下的文件列表,并将该列表追加到file1.txt文件的末尾。
谈谈你对标准输入重定向的理解,用示例说明。
标准输入重定向是可以将标准输入从键盘等默认位置重定向到一个文件或者其他设备中,从而实现读取文本输入数据的方式的改变。可以使用特定的符号“<”来表示标准输入重定向,其语法格式如下:
command < input.txt
其中,command表示要执行的命令,input.txt表示输入文本数据的文件名称,通过将这两者连接起来来实现标准输入重定向。具体来说,当执行该命令时,系统将会从input.txt文件中读取文本数据,然后传递给command命令进行处理。
使用cat命令来实现查看文件内容的操作,我们需要在命令行中手动输入文件名来指定要查看的文件,比如:
cat test.txt
test.txt是要查看的文件的名称。想要从一个文件中读取数据,以便cat命令可以在不需要手动输入的情况下查看这些数据,就可以使用标准输入重定向,比如:
cat < input.txt
input.txt是包含要查看的文本数据的文件,系统将从该文件中读取数据,并将其传递给cat命令进行处理。通过这种方式,我们可以更加方便地处理大量的输入文本数据。
变量名规范。
变量名只能包含:
字母
数字
下划线
==注意:== 变量名不能以数字开头。
shell中变量的类型,一般不需要明确指明。
变量如何定义和查看,举例说明。
变量定义
[zqm@haojing lab]$ var1=key1
标准格式如下
[zqm@haojing lab]$ declare var1=key1
使用$引用变量值
[zqm@haojing lab]$ echo $var1
key1
[zqm@haojing lab]$ first_name=facai
[zqm@haojing lab]$ last_name=zhang
[zqm@haojing lab]$ echo $last_name $first_name
zhang facai
使用多个空格,效果一样
[zqm@haojing lab]$ echo $last_name $first_name
zhang facai
使用引号保留多个空格(两个更美观)
[zqm@haojing lab]$ echo "$first_name $last_name"
zhang facai
[zqm@haojing lab]$ echo $last_name_$first_name //字母数字下划线为变量名,所以把他们当成了一个整体,需要用{}限定变量范围
facai
# 使用{}限定变量范围
[zqm@haojing lab]$ echo ${last_name}_$first_name
zhang_facai
如何扩展变量范围,举例说明。
[zqm@haojing lab]$ username=xuran
[zqm@haojing lab]$ echo $username
xuran
[zqm@haojing lab]$ bash
[zqm@haojing lab]$ echo $username
[zqm@haojing lab]$ exit
exit
[zqm@haojing lab]$ export username //扩大变量范围,到子程序中
[zqm@haojing lab]$ bash
[zqm@haojing lab]$ echo $username
xuran
解释以下环境变量作用,举例说明。
EDITOR
PS1
LANG
PATH
环境变量名 | 作用 |
EDITOR | 默认编辑器 |
PS1 | 命令行提示符 |
LANG | shell环境语言 |
PATH | 命令搜素路径 |
[zqm@haojing ~]$ echo $PS1
[\u@\h \W]\$
[zqm@haojing ~]$ PS1='[\u@\h \w \t]\$ '
[zqm@haojing ~ 20:37:18]$
[zqm@haojing ~ 20:39:03]$ bash
[zqm@haojing ~]$ export EDITOR=vim
[zqm@haojing ~]$ crontab -e
* * * * * * * * * //变颜色
[zqm@haojing ~]$ LANG=zh_CN.utf-8
[zqm@haojing ~]$ date
2023年 03月 23日 星期四 20:43:24 CST
[zqm@haojing ~]$ ls
dhcpd.conf home mytmp passwd.stdout profile.sh
etc lab passwd passwd.stout
[zqm@haojing ~]$ find /etc -name passwd
find: ‘/etc/grub.d’: 权限不够
find: ‘/etc/pki/CA/private’: 权限不够
find: ‘/etc/pki/rsyslog’: 权限不够
/etc/pam.d/passwd
/etc/passwd
find: ‘/etc/selinux/targeted/active’: 权限不够
find: ‘/etc/selinux/final’: 权限不够
find: ‘/etc/dhcp’: 权限不够
find: ‘/etc/lvm/archive’: 权限不够
find: ‘/etc/lvm/backup’: 权限不够
find: ‘/etc/lvm/cache’: 权限不够
[root@haojing ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
[root@haojing ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@haojing ~]# mv /usr/bin/ls .
[root@haojing ~]# ls
bash: ls: command not found...
Similar command is: 'lz'
[root@haojing ~]# mkdir bin
[root@haojing ~]# mv ls bin
[root@haojing ~]# which ls
alias ls='ls --color=auto'
/root/bin/ls
[root@haojing ~]# ls
anaconda-ks.cfg bin initial-setup-ks.cfg
[root@haojing ~]#
命令替换作用,举例说明。
格式如下:
$(COMMAND)
`COMMAND`
[zqm@haojing ~]$ echo Today is Tuesday.
Today is Tuesday.
[zqm@haojing ~]$ echo Today is $(date +%A).
Today is Thursday.
[zqm@haojing ~]$ echo Welcome $USER to L
Welcome zqm to L
[zqm@haojing ~]$ echo Welcome $user to L
Welcome to L
解释以下符号作用,举例说明。
转义符号(\)
双引号("")
单引号('')
\,取消后面单个字符的特殊含义。
双引号(""),压缩shell扩展含义,不压缩命令替换、变量替换和转义字符。
单引号(''),可以压缩单引号内部的所有字符含义。
[zqm@haojing ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/zqm/.local/bin:/home/zqm/bin
[zqm@haojing ~]$ echo \PATH
PATH
[zqm@haojing ~]$ echo \$PATH
$PATH
[zqm@haojing ~]$ echo *** Welcome to $user to L ***
dhcpd.conf etc file-20230323 home lab mytmp passwd passwd.stdout passwd.stout profile.sh Welcome to to L dhcpd.conf etc file-20230323 home lab mytmp passwd passwd.stdout passwd.stout profile.sh
[zqm@haojing ~]$ echo " *** Welcome to $user to L ***" //双引号可以压缩扩展字符,不压缩命令替换、变量替换和转义字符。
*** Welcome to to L ***
[zqm@haojing ~]$ echo " *** Welcome to $user to $(hostname) ***"
*** Welcome to to haojing.com ***
[zqm@haojing ~]$ echo ' *** Welcome to $user to $(hostname) ***' //单引号保持原样输出
*** Welcome to $user to $(hostname) ***
哪一项表示在最基本的层面上标识用户的编号?a. 主要用户b. UIDc. GIDd. 用户名
哪一项表示提供用户命令行提示符的程序?a. 主 shellb. 主目录c. 登录 shelld. 命令名称
哪一项目或文件表示本地组信息的位置?a. 主目录b. /etc/passwdc. /etc/GIDd. /etc/group
哪一项目或文件表示用户个人文件的位置?a. 主目录b. 登录 shellc. /etc/passwdd. /etc/group
哪一项表示在最基本的层面上标识组的编号?a. 主要组b. UIDc. GIDd. groupid
哪一项目或文件表示本地用户帐户信息的位置?a. 主目录b. /etc/passwdc. /etc/UIDd. /etc/group
/etc/passwd 文件的第四个字段是什么?a. 主目录b. UIDc. 登录 shelld. 主要组
创建 operator1 用户
使用id验证 operator1 用户信息
[root@haojing ~]# useradd operator1
[root@haojing ~]# id operator1
uid=1010(operator1) gid=1010(operator1) groups=1010(operator1)
查看/etc/passwd中对应条目
[root@haojing ~]# grep operator1 /etc/passwd
operator1:x:1010:1010::/home/operator1:/bin/bash
添加用户laowang,设置密码与laoma用户一致。(不允许使用passwd命令)
[root@haojing ~]# grep zqm /etc/shadow
zqm:$6$PnJAyhn6$a4RbXub5N1LSu9T4wEnxadGkLUCpn6lMA.FmvJhKjmsaUl3v867bHY332kycOREfPgA4Wsb3G/UaI0vQ2BM.b0:19425:0:99999:7:::
[root@haojing ~]# useradd laowang -p '$6$PnJAyhn6$a4RbXub5N1LSu9T4wEnxadGkLUCpn6lMA.FmvJhKjmsaUl3v867bHY332kycOREfPgA4Wsb3G/UaI0vQ2BM.b0:19425'
设置laowang密码:
首次登录必须修改密码
3天内不允许修改
100天后过期
chage -m 100 laowang
禁止laowang登录系统,至少使用2种方法。
passwd -l laowang
touch /etc/nologin
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。