Linux基础
Linux是一套免费使用和自由传播的类Ulnix操作系统,是一个基于POSIX(Portable Operating System Interface)和Unix的多用户、支持多线程和多CPU的操作系统。 Linux作为一款开源操作系统,其基本思想主要包括以下几点:1、一切都是文件(包括硬件)2、小型,单一用途的程序3、链接程序,共同完成复杂的任...
Linux是一套免费使用和自由传播的类Ulnix操作系统,是一个基于POSIX(Portable Operating System Interface)和Unix的多用户、支持多线程和多CPU的操作系统。
Linux作为一款开源操作系统,其基本思想主要包括以下几点:
1、一切都是文件(包括硬件)
2、小型,单一用途的程序
3、链接程序,共同完成复杂的任务
4、避免令人困惑的用户界面
5、配置数据存储在文本中
在用户管理方面,Linux系统大致可以分为两类用户:root用户与普通用户。root用户又被称为超级用户,其对系统拥有近乎完全的控制能力,所以,在实际应用中,除非必要,不建议以root登录。
依据冯诺依曼体系,计算机的组成部分主要包括五个部分:运算器、控制器、存储器、输入设备、输出设备;其中作为用户与计算机交互的输入/输出设备被称为终端设备(Terminal)。在Linux系统中,提供了3种终端:
1、物理终端:一般是直接接入本机的显示器和键盘等设备,其设备文件路径为:/dev/console;
2、虚拟终端:附加在物理终端之上的以软件方式虚拟实现的终端(图形终端亦属于虚拟终端),其设备文件路径为:/dev/tty[1,6];对于CentOS而言,默认启动6个虚拟终端,可使用Ctrl+ALT+F[1,6]来在各虚拟终端之间切换;
3、模拟终端:图形界面打开的命令行以及基于ssh协议或telnet协议等远程打开的界面,其设备文件路径为:/dev/pts/[0,∞]
由于Linux是多用户操作系统,所以对于终端,可使用tty命令来查看当前的终端设备号。
Linux内核(Kernel)作为操作系统,其主要仅用于管理与驱动硬件,而要使用硬件时,就得需要通过应用软件或者是shell的功能来调用操作系统操纵硬件工作。shell作为一种高级程序设计语言,是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。硬件、内核、系统调用与shell四者的关系与作用如下图所示:
Linux默认支持多种shell,可通过/etc/shells文件查看:
[root@luolmcentos7 ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
对于系统默认使用的shell类型,可通过变量SHELL的值来查看:
[root@luolmcentos7 ~]# echo $SHELL
/bin/bash
在上述两个命令行中,可以看到其命令提示符都具有相同的格式(对于root用户,命令提示符为#,对于普通用户,命令提示符为$),可通过变量PS1来查看其具体格式:
[root@luolmcentos7 ~]# echo $PS1
[\u@\h \W]\$
同样,可通过修改变量PS1的值来更改命令提示符的格式,并可将变量值写入配置文件~/.bashrc来永久设置。
在shell中,可执行的命令有两类(可通过type COMMAND来查看命令类型):
内部命令:由shell自带,而且通过某命令形式提供;对于内部命令,可通过命令enable -n COMMAND来禁用,通过命令enable COMMAND来启用。
外部命令:在当前系统的某文件系统路径下对应的可执行程序文件(可通过which、whereis等查看命令路径)
在命令提示符键入命令并回车后,将提请shell程序找到命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来。由于有多类命令且命令路径多样,那么shell搜寻执行的先后顺序是什么样的呢?
在回答此问题之前,先了解几个概念。
很多时候,为了执行命令的方便,对于复杂命令可定义别名以简化;可通过命令alias查看系统中定义的别名。
[root@luolmcentos7 ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
对于外部命令,shell需要通过查找命令所对应的可执行程序文件或代码以执行,如果每执行一个命令就要查找整个文件系统,显然是不合适的。所以在变量PATH中定义了命令查找的路径(也可以理解为外部命令存放的路径):
[root@luolmcentos7 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
为了进一步加快命令查找的速度,除PATH变量外,Linux系统将搜寻到的外部命令路径结果缓存至kv(key-value)存储中,建立哈希表(hash)。可通过命令hash查看哈希表中缓存的命令路径:
[root@luolmcentos7 ~]# hash
hits command
1 /usr/bin/df
2 /usr/bin/last
1 /usr/bin/whatis
7 /usr/bin/cat
1 /usr/bin/rpm
1 /usr/bin/reset
5 /usr/bin/man
1 /usr/bin/info
1 /usr/sbin/hwclock
13 /usr/bin/ls
4 /usr/bin/tree
shell中,命令的执行方式通常为以上几种,其优先级为:
alias-->builtin-->hash-->$PATH
Linux中有很多命令,但命令的格式大致都相同,通用格式如下:
COMMAND [OPTIONS...] [ARGUMENTS...]
选项(option):用于启用或关闭命令的某个或某些功能,又包含短选项与长选项两类;
参数(arguments):命令的作用对象,比如文件名,用户名等;
注意:
1、多选项,以及多参数和命令之间使用空白字符分隔
2、取消和结束命令执行:Ctrl+c,Ctrl+d
3、多个命令可以用;符号分开
4、一个命令可以用\分成多行
为了避免打错命令或文件名,Linux系统中可使用Tab键进行命令与路径补全。对于外部命令,shell根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,若用户给定的字符串只有一条惟一对应的命令,则Tab键直接补全;否则,再次Tab会给出相关命令列表。对于路径,会以用户给出的字符串当作路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名,如果唯一,则Tab键直接补全;否则,再次Tab给出列表。好好利用Tab键,可避免很多错误。
转载于:https://blog.51cto.com/luoliumeng/1829988
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐




所有评论(0)