Linux基础入门
1. Linux 基础概念
1.1 用户类型
-
root 用户
一个特殊的管理帐户,也被称为超级用户root已接近完整的系统控制
对系统损害几乎有无限的能力
除非必要,不要登录为 root -
普通( 非特权 )用户
权限有限
造成损害的能力比较有限
1.2 终端 Terminal
- 控制台终端: /dev/console
- 串行终端:/dev/ttyS#
- 虚拟终端:tty:teletypewriters, /dev/tty#,tty 可有n个,Ctrl+Alt+F#
- 伪终端:pty:pseudo-tty , /dev/pts/# 如:SSH远程连接
- 图形终端:startx, xwindows
1.2.1 查看当前的终端设备
-
w
可查看当前服务器所有登录的终端设备root@admin:~# w 17:50:08 up 10 min, 2 users, load average: 1.02, 0.63, 0.34 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.137.1 17:40 0.00s 0.02s 0.00s w root pts/1 192.168.137.1 17:49 15.00s 0.01s 0.01s -bash
-
who
也可查看当前服务器所有登录的终端设备root@admin:~# who root pts/0 2022-11-19 17:40 (192.168.137.1) root pts/1 2022-11-19 17:49 (192.168.137.1)
-
tty
可查看本机登录的终端设备信息root@admin:~# tty /dev/pts/0
1.3 Linux 命令
输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来
Linux可执行的命令分为三种:
- alias命令:对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行
- 内部命令:由shell自带的,而且通过某命令形式提供, ,用户登录后自动加载并常驻内存中
- 外部命令:在文件系统路径下有对应的可执行程序文件,当执行命令时才从磁盘加载至内存中,执行完毕后从内存中删除
1.3.1 Linux命令执行的优先级
系统三种命令的优先级:
alias命令 > 内部命令 > 外部命令
当用户通过CLI输入一条指令时,系统环境会优先判断该指令是否为alias指令;若不是,则判断是否为内部指令;若仍不是内部指令,则为外部指令并执行。
1.3.2 判断内部指令与外部指令
指令: type
root@admin:~# type -a echo
echo is a shell builtin #内部指令
echo is /usr/bin/echo #外部指令,以及可执行程序文件的位置
echo is /bin/echo #外部指令,以及可执行程序文件的位置
出于系统冗余性的考虑,有些指令即是内部指令也是外部指令。
1.3.3 内部命令相关
-
查看全部内部命令
help
-
内部命令的管理
enable <CMD>
启用内部命令enable –n <CMD>
禁用内部命令enable –n
查看所有禁用的内部命令
1.3.3 外部指令相关
-
查看外部命令路径
which -a <CMD> --skip-alias
whereis <CMD>
-
Hash缓存表
系统初始hash表为空
当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的
路径记录到hash表中。当再次使用该命令时,shell解释器首先会查看hash表,存在则将其执行;如果不存在,将会去PATH路径下寻找。
利用hash缓存表可大大提高命令的调用速率
hash 命令常见用法:
- hash 显示hash缓存
- hash -l 显示hash缓存,可作为输入使用
- hash -p path name 将命令全路径path起别名为name
- hash -t name 打印缓存中name的路径
- hash -d name 清除name缓存
- hash -r 清除缓存
1.3.4 Alias命令
-
显示当前shell进程所有可用的命令别名
alias
-
定义别名
alias
,其相当于执行命令VALUE:alias NAME='VALUE'
例如:
root@centos8 ~]#alias scandisk='echo - - - > /sys/class/scsi_host/host0/scan;echo - - - > /sys/class/scsi_host/host1/scan;echo - - - > /sys/class/scsi_host/host2/scan'
-
撤销别名
unalias
unalias name [name ...] unalias -a #撤销所有别名
注意:在命令行中定义的别名,仅对当前shell进程有效
如果想永久有效,要定义在配置文件中
- 仅对当前用户:~/.bashrc
- 对所有用户有效:/etc/bashrc
编辑配置给出的新配置不会立即生效,bash进程重新读取配置文件
source /path/to/config_file
OR
. /path/to/config_file
如果别名同原命令同名,如果要执行原命令,可使用以下方法:
\ALIASNAME
“ALIASNAME”
‘ALIASNAME’
command ALIASNAME
/path/commmand #只适用于外部命令
1.4 命令行扩展和括号扩展
1.4.1 命令行扩展:`` 和 $()
把一个命令的输出打印给另一个命令的参数,放在``中的一定是有输出信息的命令
$(COMMAND)
Command
例如:
[root@host1 ~]# cat 1.txt
a
b
c
[root@host1 ~]# echo `cat 1.txt`
a b c
[root@host1 ~]# echo $(cat 1.txt)
a b c
双引号""、单引号''和反向单引号``的比较:
单引号:强引用,六亲不认,变量和命令都不识别,都当成了普通的字符串,"最傻"
双引号:弱引用,不能识别命令,可以识别变量,"半傻不精"
反向单引号:里面的内容必须是能执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交给调用反向单引号的命令继续,"最聪明"
例如:
root@admin:~# echo $HOSTNAME
admin
root@admin:~# echo "echo $HOSTNAME"
echo admin
root@admin:~# echo 'echo $HOSTNAME'
echo $HOSTNAME
root@admin:~# echo `echo $HOSTNAME`
admin
root@admin:~# echo "This system's name is $(hostname)"
This system's name is admin
root@admin:~# echo "I am `whoami`"
I am root
root@admin:~# touch $(date +%F).log
root@admin:~# ls -l *.log
-rw-r--r-- 1 root root 0 Nov 20 03:15 2022-11-20.log
root@admin:~# touch `date +%F`.txt
root@admin:~# ls -l *.txt
-rw-r--r-- 1 root root 0 Nov 20 03:16 2022-11-20.txt
root@admin:~# touch `hostname`-`date +%F`.log
root@admin:~# ls -l *.log
-rw-r--r-- 1 root root 0 Nov 20 03:16 admin-2022-11-20.log
1.4.2 括号扩展 {}
{} 可以实现打印重复字符串的简化形式
{元素1,元素2,元素3 ······} 表示n个元素的集合
root@admin:~# echo {1,3,4}
1 3 4
root@admin:~# echo {1,3,4,5}
1 3 4 5
{元素1..元素2..元素3} 表示从元素1到元素2范围中的所有元素,步长为元素3
root@admin:~# echo {000..20..2}
000 002 004 006 008 010 012 014 016 018 020
root@admin:~# echo {1..10}
1 2 3 4 5 6 7 8 9 10
root@admin:~# echo {1..10..2}
1 3 5 7 9
root@admin:~/test# echo {A..Z..2}
A C E G I K M O Q S U W Y
批量生成文件:
root@admin:~/test# echo {A..Z..2}
A C E G I K M O Q S U W Y
root@admin:~/test# echo {1..10..2}
1 3 5 7 9
root@admin:~/test# touch {A..Z..2}-{1..10..2}.txt
root@admin:~/test# ls
A-1.txt C-1.txt E-1.txt G-1.txt I-1.txt K-1.txt M-1.txt O-1.txt Q-1.txt S-1.txt U-1.txt W-1.txt Y-1.txt
A-3.txt C-3.txt E-3.txt G-3.txt I-3.txt K-3.txt M-3.txt O-3.txt Q-3.txt S-3.txt U-3.txt W-3.txt Y-3.txt
A-5.txt C-5.txt E-5.txt G-5.txt I-5.txt K-5.txt M-5.txt O-5.txt Q-5.txt S-5.txt U-5.txt W-5.txt Y-5.txt
A-7.txt C-7.txt E-7.txt G-7.txt I-7.txt K-7.txt M-7.txt O-7.txt Q-7.txt S-7.txt U-7.txt W-7.txt Y-7.txt
A-9.txt C-9.txt E-9.txt G-9.txt I-9.txt K-9.txt M-9.txt O-9.txt Q-9.txt S-9.txt U-9.txt W-9.txt Y-9.txt
关闭和启用{}的扩展功能
root@admin:~# echo $-
himBHs
root@admin:~# echo {1..10}
1 2 3 4 5 6 7 8 9 10
#禁用{}扩展功能
root@admin:~# set +B
root@admin:~# echo $-
himHs
root@admin:~# echo {1..10}
{1..10}
#启用{}扩展功能
root@admin:~# set -B
root@admin:~# echo $-
himBHs
root@admin:~# echo {1..10}
1 2 3 4 5 6 7 8 9 10
1.5 Linux 常用快捷键
- 清屏:
ctrl + l
或clear
- 终止当前命令:
ctrl + c
- 光标移至命令行首:
ctrl + a
- 光标移至命令行尾:
ctrl + e
- 从光标处删除至命令行首:
ctrl + u
- 从光标处删除至命令行尾:
ctrl + k
- 从光标处向左删除至单词首:
ctrl + w
- 从光标处向右删除至单词尾:
alt + d
- 删除光标处的一个字符:
ctrl + d