Swollen

导航

Linux基础入门

Linux基础入门

1. Linux 基础概念

1.1 用户类型

  1. root 用户
    一个特殊的管理帐户,也被称为超级用户

    root已接近完整的系统控制
    对系统损害几乎有无限的能力
    除非必要,不要登录为 root

  2. 普通( 非特权 )用户
    权限有限
    造成损害的能力比较有限

1.2 终端 Terminal

  1. 控制台终端: /dev/console
  2. 串行终端:/dev/ttyS#
  3. 虚拟终端:tty:teletypewriters, /dev/tty#,tty 可有n个,Ctrl+Alt+F#
  4. 伪终端:pty:pseudo-tty , /dev/pts/# 如:SSH远程连接
  5. 图形终端:startx, xwindows

1.2.1 查看当前的终端设备

  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
    
  2. 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)
    
  3. 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 内部命令相关

  1. 查看全部内部命令

    help

  2. 内部命令的管理

    • enable <CMD> 启用内部命令
    • enable –n <CMD> 禁用内部命令
    • enable –n 查看所有禁用的内部命令

1.3.4 外部指令相关

  1. 查看外部命令路径

    which -a <CMD> --skip-alias

    whereis <CMD>

  2. 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.5 Alias命令

  1. 显示当前shell进程所有可用的命令别名

    alias

  2. 定义别名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'
    
  3. 撤销别名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 + lclear
  • 终止当前命令:ctrl + c
  • 光标移至命令行首: ctrl + a
  • 光标移至命令行尾: ctrl + e
  • 从光标处删除至命令行首:ctrl + u
  • 从光标处删除至命令行尾:ctrl + k
  • 从光标处向左删除至单词首:ctrl + w
  • 从光标处向右删除至单词尾:alt + d
  • 删除光标处的一个字符:ctrl + d

posted on 2022-11-20 04:13  Swollen_D  阅读(32)  评论(0编辑  收藏  举报