Linux基础-1
Linux基本原则
- 由目的单一的小程序组成,组合小程序完成复杂任务;
- 一切皆文件;
- 尽量避免捕获用户接口;
- 配置文件保存为纯文本格式。
bash
bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令。
[root@localhost ~]# echo $SHELL // 当前使用的SHELL
/bin/bash
[root@localhost ~]# cat /etc/shells // 能够使用的SHELL
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
bash支持以下特性:
- 支持命令历史、命令补全、目录补全
- 支持管道、重定向
- 支持命令别名
- 支持命令行编辑
- 支持命令行展开
- 支持文件名通配
- 支持变量
- 支持编程
bash支持的引号
`` //反引号,键盘左上角Esc下面的键,用于命令替换
"" //双引号,弱引用,可以实现变量替换
‘‘ //单引号,强引用,不完成变量替换
[root@localhost ~]# echo ‘a‘
a
[root@localhost ~]# echo "a"
a
[root@localhost ~]# echo a
a
[root@localhost ~]# a=1
[root@localhost ~]# echo $a
1
[root@localhost ~]# echo ‘$a‘ //强引用
$a
[root@localhost ~]# echo "$a" //弱引用
1
[root@localhost ~]# echo "a"b"
> ^C
[root@localhost ~]# echo "a\"b" //加了转义符"\"后,可识别
a"b
[root@localhost ~]# echo ‘a‘b‘
> ^C
[root@localhost ~]# echo ‘a\‘b‘ //单引号加了转义符"\"后也无法识别
> ^C
[root@localhost ~]# ls `mkdir {1..10}` //反引号可以先执行命令在将结果赋予变量
1 10 2 3 4 5 6 7 8 9
bash常用操作
光标跳转
Ctrl+a //跳到命令行首
Ctrl+<- //跳到离光标左边最近单词前面
Ctrl+e //跳到命令行尾
Ctrl+-> //跳到离光标右边最近的一个单词前面
Ctrl+w //删除光标前一个字符串
Ctrl+u //删除光标至命令行首的内容
Ctrl+k //删除光标至命令行尾的内容
Ctrl+l //清屏
命令历史
history //默认只记录1000条
[root@localhost ~]# history
1 echo $SHELL
2 cat /etc/shells
3 history
-d //删除指定位置的命令历史
[root@localhost ~]# history -d 1
1 cat /etc/shells
2 history
-c //清空命令历史
[root@localhost ~]# history -c
1 history
命令历史的使用技巧
!n //执行命令历史中的第n条命令
[root@localhost ~]# !3 // 执行第三条历史命令
1 echo $SHELL
2 cat /etc/shells
3 history
!-n //执行命令历史中倒数第n条命令
[root@localhost ~]# !-1 // 执行倒数第一条历史命令
1 echo $SHELL
2 cat /etc/shells
3 history
!! //执行上一条命令
[root@localhost ~]# !!
1 echo $SHELL
2 cat /etc/shells
3 history
!string //执行命令历史中最近一个以指定字符串开头的命令
[root@localhost ~]# !hi
history
1 echo $SHELL
2 cat /etc/shells
3 history
!$ //引用前一个命令的最后一个参数
[root@localhost ~]# !$
history
1 echo $SHELL
2 cat /etc/shells
3 history
esc+. //按下esc松开后按"."(英文的.)引用前一个命令的最后一个参数
命令、目录补全
搜索PATH环境变量所指定的每个路径下以我们给出的字符串开头的可执行文件,如果多于一个,两次tab,可以给出列表,否则将直接补全。
[root@localhost ~]# h
halt hdparm hexdump hostname
hardlink head history hostnamectl
hash help hostid hwclock
[root@localhost ~]# cd /etc/sys
sysconfig/ sysctl.d/ system-release
sysctl.conf systemd/ system-release-cpe
命令别名
[root@localhost ~]# cdnet
-bash: cdnet: command not found
[root@localhost ~]# alias cdnet=‘cd /etc/sysconfig/network-scripts/‘
[root@localhost ~]# cdnet
[root@localhost network-scripts]# pwd
/etc/sysconfig/network-scripts
文件名通配
“*” //匹配任意长度的任意字符
[root@localhost ~]# ls
1 14 2 25 30 36 41 47 52 58 63 69 74 8 85 90 96
10 15 20 26 31 37 42 48 53 59 64 7 75 80 86 91 97
100 16 21 27 32 38 43 49 54 6 65 70 76 81 87 92 98
11 17 22 28 33 39 44 5 55 60 66 71 77 82 88 93 99
12 18 23 29 34 4 45 50 56 61 67 72 78 83 89 94
13 19 24 3 35 40 46 51 57 62 68 73 79 84 9 95
[root@localhost ~]# rm -rf *
[root@localhost ~]# ls
“?” //匹配任意单个字符
[root@localhost ~]# touch {1..100}
[root@localhost ~]# ls
1 14 2 25 30 36 41 47 52 58 63 69 74 8 85 90 96
10 15 20 26 31 37 42 48 53 59 64 7 75 80 86 91 97
100 16 21 27 32 38 43 49 54 6 65 70 76 81 87 92 98
11 17 22 28 33 39 44 5 55 60 66 71 77 82 88 93 99
12 18 23 29 34 4 45 50 56 61 67 72 78 83 89 94
13 19 24 3 35 40 46 51 57 62 68 73 79 84 9 95
[root@localhost ~]# ls ?
1 2 3 4 5 6 7 8 9
[root@localhost ~]# ls ??
10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95
11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96
12 17 22 27 32 37 42 47 52 57 62 67 72 77 82 87 92 97
13 18 23 28 33 38 43 48 53 58 63 68 73 78 83 88 93 98
14 19 24 29 34 39 44 49 54 59 64 69 74 79 84 89 94 99
[root@localhost ~]# ls ???
100
[] //匹配指定范围内的任意单个字符
[abc],[a-m],[0-9]
[[:space:]] //表示空白字符
[[:punct:]] //表示标点符号
[[:lower:]] //表示小写字母
[[:upper:]] //表示大写字母
[[:alpha:]] //表示大小写字母
[[:digit:]] //表示数字
[[:alnum:]] //表示数字和大小写字母
[root@localhost ~]# ls
1 14 2 25 30 36 41 47 52 58 63 69 74 8 85 90 96
10 15 20 26 31 37 42 48 53 59 64 7 75 80 86 91 97
100 16 21 27 32 38 43 49 54 6 65 70 76 81 87 92 98
11 17 22 28 33 39 44 5 55 60 66 71 77 82 88 93 99
12 18 23 29 34 4 45 50 56 61 67 72 78 83 89 94
13 19 24 3 35 40 46 51 57 62 68 73 79 84 9 95
[root@localhost ~]# ls [158]
1 5 8
[root@localhost ~]# ls [1-8]
1 2 3 4 5 6 7 8
[root@localhost ~]# ls [1-9][0-9] //看10-99的文件
10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95
11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96
12 17 22 27 32 37 42 47 52 57 62 67 72 77 82 87 92 97
13 18 23 28 33 38 43 48 53 58 63 68 73 78 83 88 93 98
14 19 24 29 34 39 44 49 54 59 64 69 74 79 84 89 94 99
[root@localhost ~]# ls [[:digit:]]
1 2 3 4 5 6 7 8 9
[^] //匹配指定范围之外的任意单个字符
[root@localhost ~]# ls [^1-3] //看除了1-3以外的文件
4 5 6 7 8 9
环境变量
PATH //命令搜索路径
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# PATH=
[root@localhost ~]# echo $PATH
[root@localhost ~]# ls
-bash: ls: No such file or directory //PATH为空后很多命令就用不了了
[root@localhost ~]# mkdir a
-bash: mkdir: No such file or directory
[root@localhost ~]# touch a
-bash: touch: No such file or directory
HISTSIZE //命令历史缓冲区大小
[root@localhost ~]# echo $HISTSIZE //默认是显示1000条
1000
bash内置变量
RANDOM //保存着0-32768之间的随机数
[root@localhost ~]# echo $RANDOM
10685
[root@localhost ~]# echo $RANDOM
27424
[root@localhost ~]# echo $RANDOM
9735
[root@localhost ~]# echo $RANDOM
16552
[root@localhost ~]# echo $RANDOM
1271
命令类型
Linux命令分为两种类型:
- 内部命令(shell内置)
- 外部命令:在文件系统的某个路径下有一个与命令名称相应的可执行文件
type //显示指定命令属于哪种类型
[root@localhost ~]# type cd
cd is a shell builtin
[root@localhost ~]# type ls
ls is aliased to `ls --color=auto‘