openvela Linux基础

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四者的关系与作用如下图所示:

wKiom1eXE6-j98pxAADTTZQiV_o299.png

  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

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐

  • 浏览量 70
  • 收藏 0
  • 0

所有评论(0)

查看更多评论 
已为社区贡献2条内容