Linux基础学习3
[root@www ~]# read [-pt] variable
选项不参数:
-p :后面可以接提示字符!
-t :后面可以接等待的秒数!
范例:提示使用者15 秒内输入自己的大名,将输入的字符串作为named的变量内容
zhenxiang@ubuntu:~$ read -p 'please keyin your name:' -t named
please keyin your name:zhenxiang
zhenxiang@ubuntu:~$ echo $named
zhenxiang
zhenxiang@ubuntu:~$ echo $path
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
zhenxiang@ubuntu:~$ echo ${path#*lig*}
htdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
zhenxiang@ubuntu:~$ echo ${path#*dm:}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
#和##比较:
zhenxiang@ubuntu:~$ echo $path
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
zhenxiang@ubuntu:~$ echo ${path##/*:}
/usr/games
zhenxiang@ubuntu:~$ echo ${path#/*:}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
zhenxiang@ubuntu:~$ echo $path
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
zhenxiang@ubuntu:~$ echo ${path%:*}
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
%和%%比较:
zhenxiang@ubuntu:~$ echo $path
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
zhenxiang@ubuntu:~$ echo ${path%:*}
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
zhenxiang@ubuntu:~$ echo ${path%%:*}
/usr/lib/lightdm/lightdm
两种比较范例:
zhenxiang@ubuntu:~$ echo $path
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
zhenxiang@ubuntu:~$ echo ${path/lightdm/mm}
/usr/lib/mm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
zhenxiang@ubuntu:~$ echo ${path//lightdm/mm}
/usr/lib/mm/mm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
两种范例比较
zhenxiang@ubuntu:~$ echo $path
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
zhenxiang@ubuntu:~$ echo ${path/*lightdm/mm}
mm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
zhenxiang@ubuntu:~$ echo ${path#*lightdm}
/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
总结:对变量的修改格式:${变量|操作符|匹配字符};其中“|”是没有的;操作符有:匹配最少字符的 从左到右删除"#",从右到左删除"%",和匹配最多字符的 "##“ ”%%“ ;和只替换一个的 ”/“ 全部替换的 "//"
范例一:找出 /etc/ 底下以 cron 为开头的档名
[root@www ~]# ll -d /etc/cron* <==加上 -d 是为了仅显示目录而已 范例二:找出 /etc/ 底下文件名『刚好是五个字母』的文件名
[root@www ~]# ll -d /etc/????? <==由于 ? 一定有一个,所以五个 ? 就对了 范例三:找出 /etc/ 底下文件名中有数字的文件名
[root@www ~]# ll -d /etc/*[0-9]* <==记得中括号左右两边均需 * 范例四:找出 /etc/ 底下,档名开头非为小写字母的文件名:
[root@www ~]# ll -d /etc/[^a-z]* <==注意中括号左边没有 * 范例五:将范例四找到的档案复制到 /tmp 中
[root@www ~]# cp -a /etc/[^a-z]* /tmp
范例一:用 cat 指令来建立一个档案的简单流程
[root@www ~]# cat > catfile
testing
cat file test
<==这里按下 [ctrl]+d 来离开
[root@www ~]# cat catfile
testing
cat file test
范例二:用 stdin 来代键盘的输入以建立新档案的简单流程
[root@www ~]# cat > catfile < ~/.bashrc
[root@www ~]# ll catfile ~/.bashrc
-rw-r--r-- root root Sep : /root/.bashrc
-rw-r--r-- root root Feb : catfile
# 注意看,这两个档案的大小会一模一样!几乎像是使用 cp 来复制一般!
> This is a test.
> OK now stop
> eof <==输入这关键词,立刻就结束而不需要输入 [ctrl]+d
[root@www ~]# cat catfile
This is a test.
选项与参数:
范例:
[root@localhost ~]# who | tee who.out
root pts/ -- : (123.123.123.123)
[root@localhost ~]# cat who.out
root pts/ -- : (123.123.123.123)
[root@www ~]# head -n /etc/passwd
root:x:::root:/root:/bin/bash <==等一下做为底下说明用
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
[root@www ~]# head -n /etc/shadow
root:$$/30QpE5e$y9N/D0bh6rAACBEz.hqo00::::::: <==底下说明用
bin:*:::::::
daemon:*:::::::
adm:*:::::::
范例一:建立一个名为 agetest的账号,该账号第一次登入后使用默认密码,
但必须要更改过密码后,使用新密码才能够登入系统使用 bash 环境
[root@www ~]# useradd agetest
[root@www ~]# echo "" | passwd --stdin agetest
[root@www ~]# chage -d agetest
# 此时此账号的密码建立时间会被改为 // ,所以会有问题!
范例二:尝试以 agetest 登入的情况
You are required to change your password immediately (root enforced)
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user agetest.
Changing password for agetest
(current) UNIX password: <==这个账号被强制要求必须要改密码!
问题:
要使用户登陆,则立刻需要更改密码;用到密码过期系统强行要求更改密码;这样自然想到更改第5个字段,密码需要重新变更的天数到了天数就会过期,那么为什么将第五字段设置为与第三字段一样,达不到立即失效的效果呢?
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
[dmtsai@www ~]$ groups
[root@www ~]# useradd -u -g users vbird2
[root@www ~]# ll -d /home/vbird2
drwx------ vbird2 users Feb : /home/vbird2
[root@www ~]# grep vbird2 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird2:x::::/home/vbird2:/bin/bash
/etc/shadow:vbird2:!!:::::::
[root@www ~]# useradd -r vbird3
/etc/passwd:vbird3:x:100:103::/home/vbird3:/bin/bash
范例三:使用 standard input 建立用户的密码
[root@www ~]# echo "abc543CC" | passwd --stdin vbird2
Changing password for user vbird2.
passwd: all authentication tokens updated successfully.
[root@www ~]# useradd agetest
[root@www ~]# echo "agetest" | passwd --stdin agetest
WARNING: Your password has expired.
You must change your password now and login again!
[root@www ~]# finger vbird1
Login: vbird1 Name: (null)
Directory: /home/vbird1 Shell: /bin/bash
Never logged in.
No mail.
[root@www ~]# groupadd group1
[root@www ~]# grep group1 /etc/group /etc/gshadow
/etc/group:group1:x:702:
范例一:将刚刚上个指令建立的 group1 名称改为 mygroup,GID 为
[root@www ~]# groupmod -g -n mygroup group1
[root@www ~]# grep mygroup /etc/group /etc/gshadow
/etc/group:mygroup:x::
/etc/gshadow:mygroup:!::
[root@www ~]# gpasswd [-A user1,...] [-M user3,...] groupname
[root@www ~]# ll acl_test1
-rw-r--r-- 1 root root 0 Feb 27 13:28 acl_test1
[root@www ~]# setfacl -m u:vbird1:rx acl_test1
[root@www ~]# ll acl_test1
- 使用chown命令可以修改文件或目录所属的用户:
命令:chown 用户 目录或文件名
例如:chown qq /home/qq (把home目录下的qq目录的拥有者改为qq用户)
使用chgrp命令可以修改文件或目录所属的组:
命令:chgrp 组 目录或文件名
例如:chgrp qq /home/qq (把home目录下的qq目录的所属组改为qq组)
chown 还可以将所属群组和所属用户一起改了
chown newuser:newgroup /home/qq
- read:读取键盘输入
- read -p 'please keyin your name:' -t 15 named
- ulimit
- user limit 限制用户的某些系统资源,可开启的档案数,使用CPU的时间,使用内存的总量
- 变量内容的删除
- #:从左往右删除第一个匹配;且是删除符合条件的最短的那一个;
- echo ${path#*lig*}
- ##:从左往右删除第一个匹配;且是删除符合条件的最长的哪一个
- %:从右往左删除第一个匹配,且是删除符合条件的最短的哪一个
- %%:从右 往左 删除第一个匹配;且是删除符合条件的最长的哪一个
- #:从左往右删除第一个匹配;且是删除符合条件的最短的那一个;
- 变量内容的替换
- ${变量/旧字符串/新字符串}: 若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串取代』
- ${变量//旧字符串/新字符串}: 若发量内容符合『旧字符串』则『全部的旧字符串会被新字符串取代』
- #和/匹配区别
- #删除第一个匹配的,且删除最短的那个;
- /替换第一个匹配的,且匹配最长的那个;
- history
- -c ,清楚当前history全部内容
- !command 执行history最近的指令。
- !number 执行第number行的history指令。
- 通配符
- * 代表0个到无穷多个任意字符
- ? 代表一定有一个任意字符
- [] 代表一定有一个在括号内的字符
- [-]代表在编码顺序内的所有字符,如[0-9]代表0-9之间的所有数字
- [^]表示反向选择,[^abc],一定有一个非abc的字符
- 除* - 以外,都是针对一个字符来说的。
- 数据重定向覆盖于累加分别是
- > 覆盖,>> 累加
- 2>;2>> 错误数据的重定向覆盖与累加
- << 结束的输入字符
- 常用命令
- cut
- cut -d '分隔字符' -f field ====用于有特定分隔字符
- grep
- grep [-acinv] [--color=auto] '搜寻字符串' filename
- tee 双向重导向,同时将数据流分送到档案与屏幕
- who | tee who.out
- cut
- /etc/passwd档案结构
- 账号名:密码:UID:GID:说明:家目录:shell
- root:x:0:0:root:/root:/bin/bash
- /etc/shadow档案结构
- 账户名称:密码:最近更改密码时间:密码不可变动时间:密码需要重新变动时间:密码需要变更期限前警告天数:密码过期后的账号宽限时间(密码失效日):账号失效日期:保留
- root:$1$/30QpE5e$y9N/D0bh6rAACBEz.hqo00:14126:0:99999:7:::
- 创建一个账户,设置初始密码000,当用户登录时,强制更改密码、
- useradd agetest;echo "000000" | passwd --stdin agetest
- chage -d 0 agetest;#此时此账号的密码建立时间会被改为 1970/1/1 ,所以会有问题!
- /etc/group档案结构
- 组名:群组密码:GID:此群组支持的账号名称
- bin:x:1:root,bin,daemon
- 有效群组与初始群组
- 初始群组,就是/etc/passwd第四字段GID;当用户登录之后就会获得初始群组的相关权限。
- 而如果需要切换成其他群组,获得其他群组的权限时。需切换;
- 例子:
[dmtsai@www ~]$ groups
dmtsai users
#第一个便是有效群组
[dmtsai@www ~]$ newgrp users
[dmtsai@www ~]$ groups
users dmtsai
- 账号管理
- useradd
- useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM] [-c 说明栏] [-d 家目录绝对路径] [-s shell] 使用者账号名
- useradd默认配置文件/etc/default/useradd
- userdel
- passwd
- echo "abc543CC" | passwd --stdin vbird2
- groupadd
- groupdel
- gpasswd 群组管理员功能
- root动作
- gpasswd groupname 给群组一个密码
- gpasswd -A user 任命群管理员
- gpasswd -M user1,user2 将某些账号加入群组
- gpasswd -r groupname 将群组密码移除
- gpasswd -R groupname 将群组密码失效
- 群管理员动作
- gpasswd [-ad] user groupname 增加/移除群组成员
- root动作
- chown、chgrp
- chown newuser:newgrop /home/qq 同时更改属主和群组
- useradd
Linux基础学习3的更多相关文章
- linux基础学习之软件安装以及常用命令
linux基础学习之软件安装以及常用命令 调用中央仓库: yum install wget 然后下载nodejs: wget https://nodejs.org/dist/v10.14.2/node ...
- Linux基础学习系列目录导航
Linux基础学习-通过VM安装RHEL7.4 Linux基础学习-命令行与图形界面切换 Linux基础学习-基本命令 Linux基础学习-RHEL7.4之YUM更换CentOS源 Linux基础学习 ...
- linux基础学习路线&review
linux基础学习网址: https://www.runoob.com/linux/linux-tutorial.html 比较重点的是这个启动过程的介绍学习:https://www.runoob.c ...
- Linux 基础学习1
目录 Linux 基础学习 用户登录 终端 交互式接口 bash 修改ssh连接慢的步骤 命令提示符 显示提示符格式 命令 别名 命令格式 获取命令的帮助信息 man bash 快捷键 tab 键 引 ...
- Linux 基础学习2
目录 Linux 基础学习2 文件目录结构 文件命名规范 文件系统结构 linux应用程序的组成 绝对路径和相对路径 目录名和基名 切换目录 切换到家目录 切换到上一次的目录 显示当前的工作目录 列出 ...
- Linux基础学习(全)
使用的Linux发行版本为Redhat 1.Linux(RedHat)基础学习-命令行使用入门 2.Linux(RedHat)基础学习-文件寻址与管理 3.Linux(RadHat)基础学习-vim编 ...
- Linux基础学习(1)--Linux系统简介
第一章——Linux系统简介 1.UNIX和Linux发展史: 1.1 unix发展史: (1)1965年,美国麻省理工学院(MIT).通用电气公司(GE)及AT&T的贝尔实验室联合开发Mul ...
- Linux 基础学习(第二节)
free命令用于显示当前系统中内存的使用量信息,格式为:“free [-h]”. 为了保证Linux系统不会突然卡住宕机,因此内存使用量应该是运维人员时刻要关注的数据啦,咱们可以使用-h参数来以更人性 ...
- Linux基础学习(二)
前言: 我们在上一节了解了一下linux的硬件组成,虽然也许对具体的东西还不甚了解,但是我们知道了linux下一切皆文件这一特性 我们装好了CentOS7的虚拟机(这个可以看别人教程来装起来,比较简单 ...
- Linux基础学习(一)
前言:这个学习笔记是为了督促自己能够更好的学习Linux的有关知识. 参考书目 鸟哥的linux私房菜 Chapter 1:入门建议 新手建议:重点 基础一定一定要学好 那么什么是基础呢? 先从Lin ...
随机推荐
- WCF,WebServices,WebApi区别
http://www.cnblogs.com/hetring/p/4493137.html
- Python+Selenium框架设计篇之-简单介绍unittest单元测试框架
前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest. unit ...
- selenium随笔
1.点击一个连接通常录制一个click命令,通常需要改变它到clickAndWait命令,确保案例暂停,新的页面完全被转载进来. 2.测试案例需要检查Web页的属性,需要assert和verify命令 ...
- DFS和BFS遍历的问题
来自https://github.com/soulmachine/leetcode 广度优先搜索 输入数据:没有什么特征,不像dfs需要有递归的性质.如果是树/图,概率更大. 状态转换图:数或者DAG ...
- struts ValueStack 详解
一.ValueStack 1.ValueStack是一个接口,在struts2中使用OGNL(Object-Graph Navigation Language)表达式实际上是使用 ...
- Java的代码转C#
推荐个网站:点击打开链接 细节上有些小问题
- python在windows下UnicodeDecodeError的解决方法
之前在windows下使用python调用某些模块时都会报错,像这样: C:\Documents and Settings\Administrator>python -m CGIHTTPServ ...
- IPFS
http://www.r9it.com/20190412/ipfs-private-net.html IPFS指令集中文版(一) https://www.jianshu.com/p/ce74b32d2 ...
- 解决jsp在ios小屏手机下面滑动不流畅的问题
今天做好的静态文件发给后台改成jsp之后,发现原本流畅滑动的页面在iphone5下面变得一卡一卡的. 之后加上了 -webkit-overflow-scrolling: touch; 这个属性之后,成 ...
- 【06】Vue 之 组件化开发
组件其实就是一个拥有样式.动画.js逻辑.HTML结构的综合块.前端组件化确实让大的前端团队更高效的开发前端项目.而作为前端比较流行的框架之一,Vue的组件和也做的非常彻底,而且有自己的特色.尤其是她 ...