1.Linux tail命令:显示文件结尾的内容
tail 命令和 head 命令正好相反,它用来查看文件末尾的数据,其基本格式如下:
[root@localhost ~]# tail [选项] 文件名
此命令常用的选项及含义如表 1 所示。
实例:
tail 命令有一种比较有趣的用法,可以使用 "-f" 选项来监听文件的新増内容。
[root@localhost ~]#tail -f anaconda-ks.cfg @server-platform @server-policy pax oddjob sgpio certmonger pam_krb5 krb5-workstation perl-DBD-SQLite %end #光标不会退出文件,而会一直监听在文件的结尾处
这条命令会显示文件的最后 10 行内容,而且光标不会退出命令,每隔一秒会检查一下文件是否增加新的内容,如果增加就追加到原来的输出结果后面并显示。因此,这时如果向文件中追加一些数据(需要开启一个新终端):
[root@localhost ~]# echo 2222222222 >> anaconda-ks.cfg [root@localhost ~]# echo 3333333333 >> anaconda-ks.cfg #在新终端中通过echo命令向文件中追加数据
那么,在原始的正在监听的终端中,会看到如下信息:
[root@localhost ~]# tail -f anaconda-ks.cfg @server-platforin @server-policy pax oddjob sgpio certmonger pam_krb5 krb5-workstation perl-DBD-SQLite %end2222222222 33333333333 #在文件的结尾处监听到了新増数据
如果想终止输出,按【Ctrl+c】键中断 tail 命令即可。
2.Linux grep命令详解:查找文件内容
grep命令能够在一个或多个文件中,搜索某一特定的字符模式(也就是正则表达式),此模式可以是单一的字符、字符串、单词或句子。
grep 命令支持如表 1 所示的这几种正则表达式的元字符(也就是通配符)。
需要注意的是,在基本正则表达式中,如通配符 *、+、{、|、( 和 )等,已经失去了它们原本的含义,而若要恢复它们原本的含义,则要在之前添加反斜杠 \,如 \*、\+、\{、\|、\( 和 \)。
当使用 grep 时,包含指定字符模式的每一行内容,都会被打印(显示)到屏幕上,但是使用 grep 命令并不改变文件中的内容。
grep 命令的基本格式如下:
[root@localhost ~]# grep [选项] 模式 文件名
这里的模式,要么是字符(串),要么是正则表达式。而此命令常用的选项以及各自的含义如表 2 所示。
注意,如果是搜索多个文件,grep 命令的搜索结果只显示文件中发现匹配模式的文件名;而如果搜索单个文件,grep 命令的结果将显示每一个包含匹配模式的行。
3.Linux RPM包安装、卸载和升级(rpm命令)
1)RPM 包的安装
安装 RPM 的命令格式为:
[root@localhost ~]# rpm -ivh 包全名
注意一定是包全名。涉及到包全名的命令,一定要注意路径,可能软件包在光盘中,因此需提前做好设备的挂载工作。
此命令中各选项参数的含义为:
-i:安装(install);
-v:显示更详细的信息(verbose);
-h:打印 #,显示安装进度(hash);
如果还有其他安装要求(比如强制安装某软件而不管它是否有依赖性),可以通过以下选项进行调整:
-nodeps:不检测依赖性安装。软件安装时会检测依赖性,确定所需的底层软件是否安装,如果没有安装则会报错。如果不管依赖性,想强制安装,则可以使用这个选项。注意,这样不检测依赖性安装的软件基本上是不能使用的,所以不建议这样做。
-replacefiles:替换文件安装。如果要安装软件包,但是包中的部分文件已经存在,那么在正常安装时会报"某个文件已经存在"的错误,从而导致软件无法安装。使用这个选项可以忽略这个报错而覆盖安装。
-replacepkgs:替换软件包安装。如果软件包已经安装,那么此选项可以把软件包重复安装一遍。
-force:强制安装。不管是否已经安装,都重新安装。也就是 -replacefiles 和 -replacepkgs 的综合。
-test:测试安装。不会实际安装,只是检测一下依赖性。
-prefix:指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。
2)RPM包的升级
使用如下命令即可实现 RPM 包的升级:
[root@localhost ~]# rpm -Uvh 包全名
-U(大写)选项的含义是:如果该软件没安装过则直接安装;若已安装则升级至最新版本。
[root@localhost ~]# rpm -Fvh 包全名
-F(大写)选项的含义是:如果该软件没有安装,则不会安装,必须安装有较低版本才能升级。
3)RPM包的卸载
RPM 软件包的卸载很简单,使用如下命令即可:
[root@localhost ~]# rpm -e 包名
4.rpm命令查询软件包(-q、-qa、-i、-p、-l、-f、-R)
1)rpm -q:查询软件包是否安装
用 rpm 查询软件包是否安装的命令格式为:
[root@localhost ~]# rpm -q 包名
-q 表示查询,是 query 的首字母。
2)rpm -qa:查询系统中所有安装的软件包
使用 rpm 查询 Linux 系统中所有已安装软件包的命令为:
[root@localhost ~]# rpm -qa
此外,这里还可以使用管道符查找出需要的内容,比如:
[root@localhost ~]# rpm -qa | grep httpd
3)rpm -qi:查询软件包的详细信息
通过 rpm 命令可以查询软件包的详细信息,命令格式如下:
[root@localhost ~]# rpm -qi 包名
-i 选项表示查询软件信息,是 information 的首字母。
除此之外,还可以查询未安装软件包的详细信息,命令格式为:
[root@localhost ~]# rpm -qip 包全名
-p 选项表示查询未安装的软件包,是 package 的首字母。
注意,这里用的是包全名,且未安装的软件包需使用“绝对路径+包全名”的方式才能确定包。
4)rpm -ql:命令查询软件包的文件列表
rpm 软件包通常采用默认路径安装,各安装文件会分门别类安放在适当的目录文件下。使用 rpm 命令可以查询到已安装软件包中包含的所有文件及各自安装路径,命令格式为:
[root@localhost ~]# rpm -ql 包名
-l 选项表示列出软件包所有文件的安装目录。
同时,rpm 命令还可以查询未安装软件包中包含的所有文件以及打算安装的路径,命令格式如下:
[root@localhost ~]# rpm -qlp 包全名
5)rpm -qf:命令查询系统文件属于哪个RPM包
rpm -ql 命令是通过软件包查询所含文件的安装路径,rpm 还支持反向查询,即查询某系统文件所属哪个 RPM 软件包。其命令格式如下:
[root@localhost ~]# rpm -qf 系统文件名
-f 选项的含义是查询系统文件所属哪个软件包,是 file 的首字母。
注意,只有使用 RPM 包安装的文件才能使用该命令,手动方式建立的文件无法使用此命令。
6)rpm -qR:查询软件包的依赖关系
使用 rpm 命令安装 RPM 包,需考虑与其他 RPM 包的依赖关系。rpm -qR 命令就用来查询某已安装软件包依赖的其他包,该命令的格式为:
[root@localhost ~]# rpm -qR 包名
-R(大写)选项的含义是查询软件包的依赖性,是 requires 的首字母。
同样,在此命令的基础上增加 -p 选项,即可实现查找未安装软件包的依赖性。
5.yum命令(查询、安装、升级和卸载软件包)
1)yum查询命令
使用 yum 对软件包执行查询操作,常用命令可分为以下几种:
查询所有已安装和可安装的软件包:
[root@localhost ~]# yum list
查询执行软件包的安装情况:
[root@localhost ~]# yum list 包名
从 yum 源服务器上查找与关键字相关的所有软件包:
[root@localhost ~]# yum search 关键字
查询执行软件包的详细信息:
[root@localhost ~]# yum info 包名
2)yum安装命令
yum 安装软件包的命令基本格式为:
[root@localhost yum.repos.d]# yum -y install 包名
其中:
install:表示安装软件包。
-y:自动回答 yes。如果不加 -y,那么每个安装的软件都需要手工回答 yes;
3)yum升级命令
使用 yum 升级软件包,需确保 yum 源服务器中软件包的版本比本机安装的软件包版本高。
yum 升级特定的软件包常用命令如下:
[root@localhost yum.repos.d]# yum -y update 包名
4)yum 卸载命令
使用 yum 卸载软件包时,会同时卸载所有与该包有依赖关系的其他软件包,即便有依赖包属于系统运行必备文件,也会被 yum 无情卸载,带来的直接后果就是使系统崩溃。
除非你能确定卸载此包以及它的所有依赖包不会对系统产生影响,否则不要使用 yum 卸载软件包。
yum 卸载命令的基本格式如下:
[root@localhost yum.repos.d]# yum remove 包名 #卸载指定的软件包
6.Linux useradd命令:添加新的系统用户
Linux 系统中,可以使用 useradd 命令新建用户,此命令的基本格式如下:
[root@localhost ~]#useradd [选项] 用户名
该命令常用的选项及各自的含义,如表 1 所示
其实,系统已经帮我们规定了非常多的默认值,在没有特殊要求下,无需使用任何选项即可
7.Linux passwd命令:修改用户密码
passwd 命令的基本格式如下:
[root@localhost ~]#passwd [选项] 用户名
选项:
-S:查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用;
-l:暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 "!",使密码失效。仅 root 用户可用;
-u:解锁用户,和 -l 选项相对应,也是只能 root 用户使用;
--stdin:可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用;
-n 天数:设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段;
-x 天数:设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段;
-w 天数:设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段;
-i 日期:设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段。
当然,也可以使用 passwd 命令修改当前系统已登录用户的密码,但要注意的是,需省略掉 "选项" 和 "用户名"。
8.Linux usermod命令:修改用户信息
usermod 命令的基本格式如下:
[root@localhost ~]#usermod [选项] 用户名
选项:
-c 用户说明:修改用户的说明信息,即修改 /etc/passwd 文件目标用户信息的第 5 个字段;
-d 主目录:修改用户的主目录,即修改 /etc/passwd 文件中目标用户信息的第 6 个字段,需要注意的是,主目录必须写绝对路径;
-e 日期:修改用户的失效曰期,格式为 "YYYY-MM-DD",即修改 /etc/shadow 文件目标用户密码信息的第 8 个字段;
-g 组名:修改用户的初始组,即修改 /etc/passwd 文件目标用户信息的第 4 个字段(GID);
-u UID:修改用户的UID,即修改 /etc/passwd 文件目标用户信息的第 3 个字段(UID);
-G 组名:修改用户的附加组,其实就是把用户加入其他用户组,即修改 /etc/group 文件;
-l 用户名:修改用户名称;
-L:临时锁定用户(Lock);
-U:解锁用户(Unlock),和 -L 对应;
-s shell:修改用户的登录 Shell,默认是 /bin/bash。
9.Linux su命令:用户间切换(包含su和su -的区别)
su 是最简单的用户切换命令,通过该命令可以实现任何身份的切换,包括从普通用户切换为 root 用户、从 root 用户切换为普通用户以及普通用户之间的切换。
普通用户之间切换以及普通用户切换至 root 用户,都需要知晓对方的密码,只有正确输入密码,才能实现切换;从 root 用户切换至其他用户,无需知晓对方密码,直接可切换成功。
su 命令的基本格式如下:
[root@localhost ~]# su [选项] 用户名
选项:
-:当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(包括 PATH 变量、MAIL 变量等),使用 - 选项可省略用户名,默认会切换为 root 用户。
-l:同 - 的使用类似,也就是在切换用户身份的同时,完整切换工作环境,但后面需要添加欲切换的使用者账号。
-p:表示切换为指定用户的身份,但不改变当前的工作环境(不使用切换用户的配置文件)。
-m:和 -p 一样;
-c 命令:仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令。
1)su 和 su - 的区别
注意,使用 su 命令时,有 - 和没有 - 是完全不同的,- 选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的。我们知道,环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行。
10.Linux whoami和who am i命令用法和区别
whoami 命令和 who am i 命令是不同的 2 个命令,前者用来打印当前执行操作的用户名,后者则用来打印登陆当前 Linux 系统的用户名。
例如:
[Cyuyan@localhost ~]$ whoami Cyuyan [Cyuyan@localhost ~]$ who am i Cyuyan pts/0 2017-10-09 15:30 (:0.0)
在此基础上,使用 su 命令切换到 root 用户下,再执行一遍上面的命令:
[Cyuyan@localhost ~] su - root [root@localhost ~]$ whoami root [root@localhost ~]$ who am i Cyuyan pts/0 2017-10-09 15:30 (:0.0)
什么是实际用户(UID)和有效用户(EUID,即 Effective UID)?
所谓实际用户,指的是登陆 Linux 系统时所使用的用户,因此在整个登陆会话过程中,实际用户是不会发生变化的;而有效用户,指的是当前执行操作的用户,也就是说真正决定权限高低的用户,这个是能够利用 su 或者 sudo 命令进行任意切换的。