首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >《深度剖析 Linux Shell:从基础概念到高效操作全解》

《深度剖析 Linux Shell:从基础概念到高效操作全解》

作者头像
XPcode7
发布2025-10-23 14:51:59
发布2025-10-23 14:51:59
1720
举报

《深度剖析 Linux Shell:从基础概念到高效操作全解》

导读:围绕 Linux Shell 展开,涵盖从 Shell 的基本概念,如含义、作用,到一系列高效操作,包括命令语法、快捷键使用、历史命令管理等,让初学者清晰知晓文章能深入学习 Shell 相关知识。

2.11.1 Shell的意思

Shell: 蛋壳的意思,是linux中比较重要的一个概念,所有的命令其实都称之为shell命令。看图解:shell就是内核的一个外壳,用户通过shell来控制内核进而驱动硬件做事情,这是它名字的由来。Linux下,没有shell的话,就不能控制这个计算机了,因为内核是用户不能直接控制的。

image-20230707160325144
image-20230707160325144
代码语言:javascript
复制
## 我们使用的是哪个shell呢?
    # 在/etc/passwd中就可以看到:
    wangwu:x:1002:1002::/home/wangwu:/bin/bash
    # 后面这个/bin/bash,就是我们目前使用的shell,后面我们还会更换其他shell来玩,后面再说。
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    # 如果指定的是/sbin/nologin这个shell的话,是没有办法登录系统的
    
    
## shell会帮我们检测输入和输出的内容是否正确
	# 随便输入点东西,一回车,shell就检测到你这个指令不对,报错给你看
	[root@localhost ~]# asdf
	-bash: asdf: 未找到命令
2.11.2 优化ssh登录速度
代码语言:javascript
复制
## 如果你发现你的xshell或者ssh指令连接linux系统的时候很慢,等好久才连接成功,那么就可以按照下面的方式优化一下,目前我们没有遇到,所以这个暂时就不提了。

#修改配置文件,先备份
[root@localhost ~]# cp /etc/ssh/sshd_config /tmp/
[root@localhost ~]# vi /etc/ssh/sshd_config 

#直接输入:79回车
    79 GSSAPIAuthentication no
    115 UseDNS no
输入:wq保存退出
    
#重启sshd服务
[root@localhost ~]# systemctl restart sshd

#如果修改失败,还原配置文件
[root@localhost ~]# cp /tmp/sshd_config /etc/ssh/sshd_config
[root@localhost ~]# systemctl restart sshd
2.11.3 shell提示符
代码语言:javascript
复制
#root用户提示符
[root@localhost ~]#

#普通用户test1的提示符
[test1@localhost ~]$ 

#格式:
[用户名@主机名 所在目录]#

# 1、用户名,这个没说啥说的

# 2、主机名:localhost是主机名,windows电脑也有主机名:我的电脑-->属性-->高级系统设置-->计算机名,同一个网络中如果有多台计算机的话,每个计算机都应该有个自己的名字,就是主机名。Linux主机默认叫做localhost,也是可以修改的
   [root@localhost ~]# hostname xpcode
   [root@localhost ~]# logout
   ## 退出之后,在重新登录,就看到主机名改好了,如下
   [root@xpcode ~]# hostname
   xpcode
    
# 3、所在目录:root登录之后,默认所在目录是/root,此时~表示的/root目录,如果是普通用户登录的,那么~表示的是用户家目录,cd切换目录的时候,显示的当前所在目录
    # root用户:
       [root@xpcode ~]# pwd
       /root

     # 普通用户:
         [zhangsan@xpcode ~]$ pwd
         /home/zhangsan
        
# 4、提示符号
    # 代表当前登录的用户是管理员,$代表的是当前登录用户是普通用户
    # 提示符格式定制,这个简单理解一下即可,一般都不改
    # 原格式:
        [root@test ~]# echo $PS1
        [\u@\h \W]\$   # \u是用户,\h是主机名,\W是相对路径
    # 临时修改:重新登录就又还原了
        [root@test ~]#cd /usr/local/bin/
        [root@test bin]#export PS1='[\u@\h \w]\$' # \w表示绝对路径
        [root@test /usr/local/bin]#
    #永久修改
        [root@test 10:23:39 /usr/local/bin]#cd
        [root@test 10:24:25 ~]#vi .bashrc 
    #找个空白的地方,插入一行
        export  PS1='[\u@\h \t \w]\$'
        #linux PS1可以各种定制:参考https://www.cnblogs.com/Q--T/p/5394993.html
3-1 临时修改主机名
代码语言:javascript
复制
#临时修改主机名
    hostname
    例子1:
    [root@localhost ~]# hostname test
    #需要重新登录生效
3-2 查看主机的信息
代码语言:javascript
复制
hostnamectl
#查看主机的信息
    [root@localhost ~]# hostnamectl 
       Static hostname: localhost.localdomain
             Icon name: computer-vm
               Chassis: vm
           Machine ID: f8a89169114741a8ac6de82954c5fbcb
               Boot ID: dcf65386ccda42e29699d56101af8cf1
       Virtualization: vmware
     Operating System: CentOS Linux 7 (Core)
           CPE OS Name: cpe:/o:centos:centos:7
               Kernel: Linux 3.10.0-1127.el7.x86_64
         Architecture: x86-64
3-3 永久修改主机名
代码语言:javascript
复制
#永久修改主机名
    [root@localhost ~]# hostnamectl set-hostname test
    #需要重新登录生效
3-4 重启系统
代码语言:javascript
复制
#重启系统
    reboot
    例子1:
    [root@test ~]# reboot
3-5 关闭或重启Linux
代码语言:javascript
复制
#关闭或者重启linux
	shutdown
    
#立即关机
	[root@localhost ~]# shutdown -h now

#5分钟之后关机,可以使用shutdown -c 取消
	[root@localhost ~]# shutdown -h 5

#5分钟之后重启系统,可以使用shutdown -c 取
2.11.4 shell基础语法
4-1 不带参数
代码语言:javascript
复制
## Linux的指令基本都是下面的语法结构,遇到什么指令都不用慌了。
    ##不带参数的:
    ## reboot、pwd、id、ls等都可以不接参数,不多
4-2 带参数的
代码语言:javascript
复制
## 带参数的:
   命令   参数     目标
    ls   -a -l -h   /opt   # 参数还可以合并为-alh
    rm   -rf   /opt/test1
   命令   源...   目标
    mv   源路径     目标路径
    cp    
4-3 查看命令的参数
代码语言:javascript
复制
# 查看命令的参数: 命令 -h或者--help
   [root@test 11:12:02 /opt]#mv --help
   用法:mv [选项]... [-T] 源文件 目标文件
     或:mv [选项]... 源文件... 目录
     或:mv [选项]... -t 目录 源文件...
4-4 格式参数
代码语言:javascript
复制
#格式解释
    ## 格式1:不带参数的命令:
     	## reboot、pwd、id、ls等都可以不接参数,不多
        
    ## 格式2:带参数一个参数的指令:
     ls -l
     usermod -h 或者 usermod --help
    
    ## 格式3:带多个参数的指令:
     ls -a -l -h # 参数还可以合并为-alh
        
    ## 格式4:带参数带一个目标的指令
     ls -l /boot
     rm -rf /tmp/xpcode   # 注意:千万不要rm -rf /* 这是删除根目录的意思,或者 rm -rf /tmp/*,如果tmp目录不存在,也是删除根目录的意思。
    
    ## 格式5:命令带一个目标
         cd /tmp/
         ls /tmp/
         mkdir xpcode
         useradd xpcode
     ...
    ## 格式6:命令带多个源和目标
     cp xpcode.txt /tmp/11.txt  # cp 源1 目标1
     cp 1.txt 2.txt 3.txt /tmp  # cp 源1 源2 源3 目标1
    
   ##  格式7:命令带多个参数、多个源和多个目标
     ls -a -l -h /tmp /root /opt
     cp -a -v /root /root2  # -v是显示拷贝过程的,-a 保留原文件属性的前提下复制文件
2.11.5 tab键补全
代码语言:javascript
复制
## 补全命令:
    #如果预选的特别多
   [root@test 11:25:24 ~]#
   Display all 1400 possibilities? (y or n)
    
    #如果预选少
   [root@test 11:25:24 ~]#cha
   chacl   chage   chattr 
    
## 补全路径:
    #如果预选的特别多
   [root@test 11:25:24 ~]#cd /etc/
   Display all 188 possibilities? (y or n)
    
    #如果预选少
   [root@test 11:25:24 ~]#cd /usr/src/
   debug/   kernels/ 
    
    # 路径不存在的话就说明路径不存在
2.11.6 快捷键
代码语言:javascript
复制
Ctrl + a    #光标跳转至正在输入的命令行的首部
Ctrl + e    #光标跳转至正在输入的命令行的尾部
Ctrl + c    #终止前台运行的程序,比如ping指令
Ctrl + d    #在shell中,ctrl-d表示推出当前shell。
Ctrl + z    #将任务暂停,挂至后台, 执行fg命令继续运行
Ctrl + l    #清屏,和clear命令等效。
Ctrl + k    #删除从光标到行末的所有字符
Ctrl + u    #删除从光标到行首的所有字符
Ctrl + r    #搜索历史命令, 利用关键字搜索
ctrl + w    #光标往前删除一个参数,以空格为分割。
2.11.7 history历史命令
代码语言:javascript
复制
#历史
    history
    [root@test 14:32:10 ~]#history
        1  exit
        2  ls
        3 head -1 test03.txt 
        4 head -1 test03.txt|cat
        5 head -1 test03.txt|tac
        6 head -2 test03.txt|tac
        7 head -2 test03.txt|cat
        8 ip addr
        9 ip addr|tail -4
       10 ip addr|tail -4|head -1
       ......

#使用!调用历史命令
    [root@test 14:32:10 ~]#history|head -5
        1  exit
        2  ls
        3 head -1 test03.txt 
        4 head -1 test03.txt|cat
        5 head -1 test03.txt|tac
    [root@test 14:32:26 ~]# !3
     head -1 test03.txt 
    head: 无法打开"test03.txt" 读取数据: 没有那个文件或目录
            
#使用!调用mv开头的命令
    [root@test 14:42:17 ~]#history 
        1  ls -a -l .bash_history 
        2 history 
        3  ls
        4 history 
        5  mv aaaaa.txt /tmp/
        6 history 
    [root@test 14:42:19 ~]#!mv # 按回车,会自动找最近一次执行的mv开头的指令
    mv aaaaa.txt /tmp/
    mv: 无法获取"aaaaa.txt" 的文件状态(stat): 没有那个文件或目录

#清除历史记录
    history -c # 这是清除内存中的历史指令
    ## 删除主文件夹下面.bash_history  

    # 这是清除硬盘中的历史指令,内存中的指令会自动备份到.bash_history中,但是有个延迟,退出登录之后,才会将历史指令同步到硬盘文件中

    ##每个用户家目录下都有一个.bash_history,记录的是自己用户的历史指令。

    ## .bash_history默认记录最近的1000条指令,通过echo $HISTSIZE可以查看,可以配置的更大或者更小一些,vi /etc/profile,这		个以后再说。
2.11.8 命令别名(花名)
代码语言:javascript
复制
#别名
	alias
    
# 比如:ls -l 直接可以写ll即可

# 查看别名
    [root@test 15:23:17 ~]#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'

# 添加别名
    [test1@test 15:24:23 ~]$alias rm='rm -i'  # -i是提示警告信息用的
    [test1@test 15:27:08 ~]$alias |grep rm
    alias rm='rm -i'
    或者:[test1@test 15:24:23 ~]$alias rm='echo 禁止使用删除操作'

# 取消别名
    [test1@test 15:27:13 ~]$unalias ls
    [test1@test 15:27:47 ~]$alias |grep ls
    ##alias别名的优先级高于系统命令
    ##别名一定要是可执行的,不能随便定义别名,比如xpcode='aaaaaaa',执行xpcode会报错,没有aaaaaaa这个指令

#alias永久生效
	[root@localhost ~]# vi .bashrc 
    
#空白处,增加一行
alias cip='ip addr|tail -4|head -1'

希望这篇文章能够为你在探索 Linux系统的道路上提供有力的帮助,让你在操作 Linux 系统时更加得心应手。 我是**旺仔SeC**,是一名热衷于系统技术的博主,对 Linux系统有着深入的研究和丰富的实践经验。我致力于分享各种系统相关的知识和技巧,帮助大家解决在使用过程中遇到的各种问题。如果你觉得这篇文章对你有所帮助,欢迎点赞、收藏和分享哦 同时,也希望你能关注我的博客,我会持续为大家带来更多优质的系统技术文章,包括但不限于 Linux> 系统的深入探索、系统优化、故障排除以及各种有趣的实战案例。 如果你在学习和使用 Linux 系统的过程中遇到任何问题,或者对某些内容有疑问,欢迎在评论区留言,我会尽力为大家解答。让我们一起在系统技术的海洋中遨游,不断提升自己的技能水平,共同探索系统世界的奥秘 再次感谢大家的阅读,期待我们下次再见!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 《深度剖析 Linux Shell:从基础概念到高效操作全解》
    • 2.11.1 Shell的意思
    • 2.11.2 优化ssh登录速度
    • 2.11.3 shell提示符
    • 2.11.4 shell基础语法
    • 2.11.5 tab键补全
    • 2.11.6 快捷键
    • 2.11.7 history历史命令
    • 2.11.8 命令别名(花名)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档