Linux 深入学习

Linux 深入学习

文章目录

  • Linux 深入学习
    • 1.Shell基础
    • 2.命令别名与快捷键
    • 3.历史命令
    • 4.输出重定向
    • 5.管道符
    • 6.通配符
    • 7.VI编辑器
    • 8.用户和用户组

1.Shell基础

shell脚本初识

echo命令写第一个Linux脚本

[root@cuizja learnlinux]# vi hello.sh
#!/bin/bash
# my first shell
echo -e "\e[1;36m helloworld \e[0m"

这里是一个最简单的linux脚本格式,其中#表示注释,但是第一行的#!/bin/bash比较特殊,表示声明什么类型的shell,然后下边开始书写脚本,上述命令的结果表示一个带颜色的helloworld.

现在虽然已经将脚本写完了,但是还是不能直接执行呢

[root@cuizja learnlinux]# ./hello.sh
-bash: ./hello.sh: Permission denied

在Linux中想要运行一个脚本,有两种方式:

  1. 赋予执行权限,直接运行
[root@cuizja learnlinux]# chmod 755 hello.sh
[root@cuizja learnlinux]# ./hello.sh
  1. 通过Bash调用执行脚本
[root@cuizja learnlinux]# bash hello.sh

这里比较推荐第一种,因为赋予权限之后可以多次执行,比较方便

2.命令别名与快捷键

alias 查看系统中所有命令的别名

alias 别名='原命令' 设定命令别名

unalias 别名 删除别名,临时删除

但是这样修改也是有一个缺点的,那就是,每次关机,重启或者类似操作,别名都会还原会初始值.

这时候,如果想要让别名永久生效的话,就需要将别名写入环境变量配置文件中

vi ~/.bashrc
# 这里的~表示家目录,例如root用户在/root下,其他用户例如user1在home/user1下

命令生效顺序

  1. 执行用绝对路径或相对路径执行的命令
  2. 执行别名
  3. 执行Bash的内部命令
  4. 执行按照$PATH环境变量定义的目录顺序查找到的第一个命令

** 常用快捷键**

  • ctrl+c 强制终止当前命令
  • ctrl+l 清屏
  • ctrl+a 光标移动到命令行首
  • ctrl+e 光标移动到命令行尾
  • ctrl+u 从光标所在位置删除到行首
  • ctrl+z 把命令放入后台
  • ctrl+r 在历史命令中搜索

3.历史命令

history [选项] [历史命令保存文件] 查看命令历史记录文件

历史命令保存文件:~/.bash_history

选项

  • -c 清空历史命令
  • -w 把缓存中的历史命令写入历史命令保存文件
[root@cuizja learnlinux]# history -w
[root@cuizja learnlinux]# history

注意:历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改.

历史命令的调用

  • 使用上下箭头调用以前的历史命令
  • 使用!n 重复执行历史命令保存文件的中第n条历史命令
  • 使用!! 重复执行上一条命令
  • 使用!字符串重复执行最后一条以该字符串开头的命令

4.输出重定向

标准输入输出

设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/sdtout 1 标准输出
显示器 /dev/sdterr 2 标准错误输出

输出重定向

类型 符号 作用
标准输出重定向 命令 > 文件 以覆盖的方式,把命令的正确输出输出到指定的文件或设备中.
标准输出重定向 命令 >>文件 以追加的方式,把命令的正确输出输出到指定的文件或设备中.
标准错误输出重定向 错误命令 2> 文件 以覆盖的方式,把命令的错误输出输出到指定的文件或设备中.
标准错误输出重定向 错误命令 2>> 文件 以追加的方式,把命令的错误输出输出到指定的文件或设备中.

这里错误命令 2> 文件中的2就是文件描述符,这里的错误输出是不能在>两侧加空格.

正确输出和错误输出同时保存

命令 作用
命令 > 文件 2>&1 以覆盖的方式,把正确输出和错误输出都保存到同一个文件中.
命令 >> 文件 2>&1 以追加的方式,把正确输出和错误输出都保存到同一个文件中.
命令 &>文件 以覆盖的方式,把正确输出和错误输出都保存到同一个文件中.
命令 &>>文件 以追加的方式,把正确输出和错误输出都保存到同一个文件中.
命令>>文件1 2>>文件2 把正确的输出追加到文件1中,把错误的输出追加到文件2中.

这里有一个有意思的地方,linux中有一个/dev/null目录,我们可以把他当做黑洞,或者可以理解为不能回收的回收站,当我们需要执行一条命令,但是不需要查看他的结果的时候,可以这样执行:

[root@cuizja learnlinux]# ls &>/dev/null #这里将输出内容丢入了null这个文件,就直接没有了.

输入重定向

wc [选项] [文件名]

选项:

  • -c统计字节数
  • -w统计单词数
  • -l统计行数

命令 < 文件 把文件作为命令的输入

命令 << 标识符 把标识符与标识符之间的内容作为命令输入.

5.管道符

多命令顺序执行

多命令执行符 格式 作用
; 命令1 ; 命令2 多个命令顺序执行,命令之间没有任何逻辑联系
&& 命令1 && 命令2 逻辑与
当命令1正确执行,则命令2才会执行
当命令1执行不正确,命令2不会执行
|| 命令1 || 命令2 逻辑或
当命令1执行不正确,则命令2执行
当命令1执行正确,命令2不会执行

管道符

命令1 | 命令2 将命令1的正确输出作为命令2的操作对象

示例:

[root@cuizja learnlinux]# ll -a /etc/ | more  ##分页显示目录列表
[root@cuizja learnlinux]# netstat -an | grep "ASTABLISHED" ##查看当前主机连接的用户记录

6.通配符

通配符

通配符 作用
? 匹配一个任意字符
* 匹配0个或任意多个任意字符,也就是匹配任何内容
[] 匹配中括号中任意一个字符,例如[abc]代表一定匹配一个字符,这个字符可以是a或b或c
[-] 匹配中括号中任意一个字符,-代表一个范围,例如[a-z]代表匹配一个小写字母
[^] 逻辑非,表示匹配中括号中的一个字符,例如[^0-9]代表匹配一个不是数字的字符

Bash中的特殊符号

符号 作用
'' 单引号,在单引号中的所有特殊符号都没有特殊含义,包括$,`` `(反引号)
"" 双引号,在双引号中的特殊符号都没有特殊含义,但是$,``(反引号)`是例外,
拥有"调用变量的值",“引用命令”,"转移符"的作用.
```` 反引号,反引号括起来的内容是系统命令,在Bash中会先执行他.
$() 和反引号作用相同,用来引用系统命令
# 在shell脚本中,#开头的行代表注释
$ 用于调用变量的值,如需调用变量name时,用$name
\ 转移符,跟在\之后的特殊符号将失去特殊含义,变为普通字符,如\$将输出$符号,而非变量引用

7.VI编辑器

VI编辑器的操作分为三种模式:命令模式,输入模式,底行模式

底行模式也可以算作命令模式,知识底行模式需要输入:然后输入命令回车执行,而命令模式输入完立即执行.

底行模式常用指令

  • :w 保存
  • :q 退出
  • :! 强制执行
  • :ls 列出当前编辑器中打开的所有文件
  • :n 切换到编辑器中打开的下一个文件,大写N表示上一个文件
  • :15 将光标快速定位到第15行
  • /key 将光标向后搜索定位到第一个key所在的位置
  • ?key 将光标向前搜索定位到第一个key所在的位置

命令模式常用指令

  • h 光标左移
  • j 光标下移
  • k 光标上移
  • l 光标右移
  • ctrl+f 向下翻页 front
  • ctrl+b 向上翻页 back
  • ctrl+d 向下翻半页 down
  • ctrl+u 向上翻半页 up
  • dd 删除光标所在行
  • o 在光标所在行的下方插入一行并切换到输入模式
  • yy 复制光标所在的行
  • p 在光标所在行的下方粘贴(小写p)
  • P 在光标所在行的上方粘贴(大写P)

8.用户和用户组

用户: 使用操作系统的人

用户组: 具有相同系统权限的一组用户.

  • /etc/group 存储当前系统中所有用户组信息

    Group : x : 123 : abc,def,xyz

    组名称 : 组密码占位符 : 组编号 : 组中用户名列表

    如果组中用户名列表为空,索命组名和用户名相同,且组中只有一个用户

    root用户组编号为0,1~499位系统预留组编号,用户自己新建组号从500开始

  • /etc/gshadow 存储当前系统中用户组的密码信息

    Group : * : : abc,def,xyz

    组名称 : 组密码 : 组管理者 : 组中用户名列表

    如果组的密码为空或者*,!都可以认为组没有密码.

    组管理者为空,表示组内所有用户都可以管理列表

  • /etc/passwd 存储当前系统中所有用户的信息

    user : x : 123 : 456 : XXXXXX : /home/user :/bin/bash

    用户名 : 密码占位符 : 用户编号 :用户组编号 : 用户注释信息 : 用户主目录 : shell类型

  • /etc/shadow 存储当前系统中所有用户的密码信息

    user : vf;/Zu8sdf… : : : : :

    用户名 : 密码 : : : : :

用户组操作

  • groupadd [选项] 用户组名

    -g 编号 添加组编号

  • groupmod [选项] 用户组名

    -n 新组名 修改用户组名

    -g 编号 修改组编号

  • groupdel [选项] 用户组名

用户可以同时属于多个组,一个主要组,多个附属组

  • gpasswd [选项] 组名

    -a 用户名 用户添加附属组

    -d 用户名 用户删除附属组

    选项为空的时候直接进入组密码设置.

  • newgrp 附属组名称

    需要属于这个组的用户执行的命令,并非root用户执行

用户操作

  • useradd [选项] 用户名

    -g 组名 用于指定所属组

    -G 组名 用于指定所属附属组

    -d /home/xxx 用于指定用户名个人目录

  • usermod [选项] 用户名

    -c content 用于添加用户备注

    -l 新用户名 用于修改用名

  • userdel [选项] 用户名

    -r 删除用户名同时删除个人文件夹

  • passwd [选项] 用户名

    -l 锁定用户

    -u 解锁用户

    -d 清除用户密码

如果禁止除root外所有普通用户登录linux,只需在etc目录下创建nologin文件即可

[root@cuizja learnlinux]# touch /etc/nologin

切换用户身份

su 用户名

如果不添加用户名,即为切换到root用户

未完待续~~

你可能感兴趣的:(学习)