-
基础知识和常用命令
- man man 操作是调出Linux系统的手册相关命令。
- ls 操作是显示当前目录下的文件和目录。
- touch 命令创建一个新的空白文件。
- cp 命令copy的简称通过复制文件到指定文件夹内的一条命令。
- cd 命令切换目录到需要去的目录。
- mv 命令将文件和目录移动到另一个位置或重新命名。
- rm 命令是删除文件的命令。
- mkdir 是创建目录的命令,-p是同时创建多个目录。
- rmdir 只删除空目录,删除非空目录,先用rm删除目录 里面的文件,再删除目录。
- file 命令确定文件文本信息和字符编码。
- cat命令显示文件中的所有数据。
- tail 显示文件的最后十行。
- head 显示文件前十行。
-
shell命令进阶
- ps 检测电脑上的进程。
- top 实时监测电脑上的进程。
- kill 结束电脑上的进程。
- mount 挂在媒体。
- df 查看所有已挂载的使用情况。
- du 查看特定目录下的磁盘使用情况。
- sort 把数字当作字符执行标准的字符排序。
- grep 在输入或指定的文件中查找包含匹配的指定模式的字符。
- gzip 压缩你指定的文件。
- tar 将文件写入磁盘设备上进行归档的。还可以解压压缩文件。
-
shell理解
- 用于登录某个虚拟控制器终端或在GUI中运行终端仿真器时所启动的交互shell叫做父shell
- /bin/bash命令会创建一个新的shell程序,这个程序被称为子shell。
- ps-forest命令可以展示这些子shell之间的嵌套结构。
- 在命令之间加;可以在一行中指定一系列命令。
- 将命令放在一个括号里面,,可以生成一个子shell来执行对应命令。
- echo $BASH_SUBSHELL可以知道是否生成了子shell。返回0没有,1或其他数
有子shell。
- 后台模式:运行命令在处理命令的同时让出CLI,以供他用。可以通过在命令末尾加入&进入后台。将sleep放入后台后,可以用ps命令显示各种进程,也可以用jobs命令来显示后台作业信息。
- 非内建(外部)命令:有时候也被称为文件系统命令,是存在于bash shell之外的程序。ps就是一个外部命令。可以使用which和type命令找到它。
- 内建命令:已经和shell编译成了一体,作为shell工具的组成部分存在。cd和exit命令都是内建命令。
- history 显示使用过的命令。!!执行上次命令。!加编号 执行该编号命令。
四、环境变量
-
- 环境变量(environment variable)是其值在程序外部设置的变量,通常通过操作系统或微 服务内置的功能设置。环境变量由名称/值对组成 (VARIABLE_NAME=value)
- 系统环境变量基本上都是使用全大写字母,以区别于普通用户的环境变量。
- 全局环境变量对于shell会话和所有生成的子shell都是可见的。
- 局部变量则只对创建它们的shell可见。
- 查看全局变量,可以使用env或printenv命令。
- 要显示个别变量,可以使用printenv。也可以使用echo显示变量的值,但需要
在变量前加上一个$符号。
-
- 用bash命令生成一个子shell后,echo $HOME 显示环境变量的当前值,这个
值和父shell中的一模一样。
-
- set 显示某个特定进程设置的所有的环境变量。
- = 给变量赋值,想要赋值一段话,则需要引号将这句话括起来。
- export 将局部变量导出到全局变量。
- unset 加变量名可以删除已经存在的环境变量。不用变量名前加$。
- PATH环境变量定义了用于进行命令和程序查找的目录。
- 索引值要用 方括号括起来。(环境变量数组的索引值都是从零开始。) 要显示整个数组变量,可用星号作为通配符放在索引值的位置。
- unset命令删除数组中的某个值或整个数组。
-
Linux系统权限
- /etc/shadow可以展示用户信息。
- useradd命令使用系统的默认值以及命令行参数来设置用户账户。可以创建新用户。
- useradd -m username 能自动在每个新用户的HOME目录里放置默认的系统文件 (/etc/skel下的文件)。
- userdel可以从系统中删除用户。
- usermod可以从系统中修改用户。参数大部分跟useradd命令的参数一样(比如,-c修改备注字段,-e修改过期日 期,-g修改默认的登录组)。
- passwd 可以改当前登录用户的密码,root用户可以使用 passwd username 修改任意用户密码。
- chpasswd命令能从标准输入自动读取登录名和密码对(由冒号分割)列表, 给密码加密,然后为用户账户设置。也可以使用重定向命令,将含有 userid:passwd对的文件重定向给该命令。
- 可以使用 grep USERNAME /etc/group或tail /etc/group查看用户组信息。
- groupadd命令可在系统上创建新组,在创建新组时,默认没有用户被分配到该组。可以用usermod -G会把这个新组 添加到指定用户账户的组列表里。 -g选项,指定的组名会替换掉该账户的默认组。 -G选项则将该组添加到用户的属组的列表里,不会影响默认组。
- groupmod –g 命令可以修改已有组的GID。 groupmod –n命令可以修改已有组的组名。
- ls –l 命令可以用来查看Linux系统上的文件、目录和设备的权限。
- umask命令用来显示和设置所创建文件和目录的默认权限。
- chmod命令用来改变文件和目录的安全性设置。格式如下: chmod options mode file (mode参数可以使用八进制模式或符号模式进行安全性设置。 options的-R选项可以让权限的改变递归地作用到文件和子目录。)
-
使用vim编辑器
- vi 打开一个文本在该文本里面按i即可进入插入模式,想要退出按esc在打个冒号再打wq即可保存退出,打q!不保存退出。
- PageDown(或Ctrl+F):下翻一屏。
- PageUp(或Ctrl+B):上翻一屏。
- G:移到缓冲区的最后一行。
- num G:移动到缓冲区中的第num行。
- gg:移到缓冲区的第一行。
- 命令行模式:命令行模式提供了一个交 互式命令行。
- q:如果未修改缓冲区数据,退出。
- q!:取消所有对缓冲区数据的修改并强制退出。
- w filename:将文件保存到另一个文件中。
- wq:将缓冲区数据保存到文件中并退出。
- wq ! :将缓冲区数据保存到文件中并强制退出。
- 替换命令的格式是: :s/old/new/
- :s/old/new/g:一行命令替换所有old。
- :n,ms/old/new/g:替换行号n和m之间所有old。
- :%s/old/new/g:替换整个文件中的所有old。
- :%s/old/new/gc:替换整个文件中的所有old,但在每次出现时提示。
-
构建基本脚本
- 想要创建一个脚本文件我们首先需要进入文件,在文件第一行打出#!/bin/bash
- 第二行可以对该文件进行注释。
- 然后可以添加echo来告诉脚本用户正在做什么。
- 在脚本中,可以在环境变量前面加上$来使用这些环境变量。如果你要显示一个美元符号,则需要在美元符号前面加上一个反斜线。
- bash shell用大于号(>)将命令的输出发送到一个文件中。如果输出文件已经存在了, >会用新的文件数据覆盖已有文件。 如果不想覆盖文件原有内容,而是想要将命令的输出追加到已有文件中,可以用双 大于号(>>)来追加数据。
- 输入重定向将文件的内容重定向到命令,而非将命令的输出重定向到文件。 输入重定向符号是小于号,wc命令可以对对数据中的文本进行计数。默认情况下,它会输出3个值:wc命令可以对对数据中的文本进行计数。默认情况下,它会输出3个值。
-
构建结构化命令
- 在bashshell中if语句可以返回TRUE和FALSE。当if返回TRUE时我们可以用then来急需进行下一步操作。
- 当需要进行除了then以外的操作时,可以用else添加其他操作
- 如果else中还有if-then的嵌套那么可以用elif来替代。
- Test命令可以提供在不同if-then测试不同条件的途径。当test里面命令成立,那么就会正常执行if-then。反之则不会执行if-then。
- test命令可以判断三类条件: 数值比较 字符串比较 文件比较
- 双括号命令(( expression ))允许你在比较过程中使用高级数学表达式。
- 双方括号命令[[ expression ]]使用了test命令中采用的标准字符串比较。
- case命令采用列表格式来检查单个变量的多个值。需要再写出所有的elif语句来不 停地检查同一个变量的值了。
-
更多的结构化命令
- for循环语句通过创建一个遍历一系列值的循环,每次迭代都使用 其中一个值来执行已定义好的一组命令。
- while命令某种意义上是if-then语句和for循环的混杂体。while命令允许定义一个要测试的命令,然后循环执行一组命令,只要定义的测试 命令返回的是退出状态码0。它会在每次迭代的一开始测试test命令。 在test命令返回非零退出状态码时,while命令会停止执行那组命令。
- until命令要求你指定一个通常返回非零退出状态码的测试命令。 只有测试命令的退出状态码不为0,bash shell才会执行循环中列出的命令。
- break命令 :试跳出当前正在执行的循环.
- continue命令:提前中止某次循环中的命令,但并不会完全终止整个循环。
接下来是一道题:
使用 vi/vim编辑器编写一个shell脚本实现下列功能:
① 使用read命令从命令行获取姓名输入;
② 判断该姓名是否是系统用户;
③ 如果是系统用户,输出根据系统时间判断的"早上好/下午好/晚上好,用户名“;
④ 如果不是系统用户,询问是否为该用户创建账户并执行相应的操作;
⑤ 在第二行使用备注的形式标明你的学号和姓名。
完成脚本后,输入一个系统用户和非系统用户分别进行展示。以截图的形式提交脚本和运行结果。