Linux进阶笔记-Shell命令终端的使用和修改以及简单的高阶使用
sinye56 2024-11-12 12:42 2 浏览 0 评论
shell会根据提示执行程序。当你发出一个命令时,shell会搜索该程序,然后执行它。例如,当你输入命令ls时,shell会搜索名为ls的工具/程序,然后在shell中运行它。提供给实用程序的参数和选项会影响您得到的结果。shell也被称为CLI或命令行界面。
1: 修改默认shell
大多数现代发行版都预先安装了BASH(又是Bourne SHell),并将其配置为默认SHell。
chsh (changeshell)是Linux中负责修改shell的命令(实际上是可执行二进制文件,ELF)。
首先可以使用chsh -l命令检查机器上已经安装和配置了哪些shell,输出结果类似于下面这样:
[demouser@vbox ~]$ chsh -l
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/usr/bin/tmux
/bin/tmux
/usr/bin/zsh
/bin/zsh
在某些Linux发行版中(如:Ubuntu),chsh -l命令是无效的。在本例中,所有可用shell的列表也可以在 /etc/shells 文件中找到。你可以用 cat 命令显示文件内容:
demouser@demohosts:~$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/usr/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/usr/bin/dash
现在我们可以选择新的默认shell,例如sh,并使用chsh -s对其进行配置。
[demouser@vbox ~]$ chsh -s /usr/bin/zsh
Changing shell for demouser.
密码:
Shell changed.
现在剩下要做的就是执行一个 退出-重新登陆 的循环,然后就可以享受我们新的默认shell。
如果您希望为不同的用户更改默认shell,并且您在计算机上具有超级管理员或者 sudo 的权限,则可以像root用户一样使用 chsh 命令来完成此操作。假设我们想将 user_2 的默认 shell 更改为 zsh ,使用和之前我们用过的命名相同的命令,但在后面再追加一个用户名的参数,chsh -s /usr/bin/zsh user_2.
为了检查当前的默认 shell 是什么,我们可以查看$SHELL环境变量,它指向默认shell的路径,因此在我们的更改之后,我们期望得到类似的结果:
[demouser@vbox]~% echo $SHELL
/usr/bin/zsh
下面是chsh --help的输出结果,列出了chsh可用的选项和使用的格式:
[root@vbox demouser]# chsh --help
Usage:
chsh [options] [<username>]
Change your login shell.
Options:
-s, --shell <shell> specify login shell
-l, --list-shells print list of shells and exit
-h, --help display this help
-V, --version display version
2: 基础的Shell实用程序
自定义Shell提示符
默认的命令提示符可以更改,使其看起来不同和简短。如果当前目录太长,默认命令提示符会变得太大。在这些情况下,使用PS1很有用。简短而定制的命令漂亮而优雅。在下表中,PS1与一些参数一起使用,以显示不同形式的shell提示。默认的命令提示符看起来像这样:
user@host ~ $
在我的例子中,它看起来像这样:
demouser@vbox ~ $
它可以按照下表进行更改:
配置内容 | 示例和说明 |
PS1='\w #39; | ~ $ 目录名称作为Shell提示符,在本例中,~为用户的家目录。 |
PS1='\h $ ' | gotham $ 主机名作为Shell提示符 |
PS1='\u $ ' | bruce $ 用户名作为Shell提示符 |
PS1='\t $ ' | 22:37:31 $ 24小时格式时间作为Shell提示符 |
PS1='\@ $ ' | 10:37 PM 12小时格式时间作为Shell提示符 |
PS1='\! $ ' | 732 显示命令的历史编号作为Shell提示符 |
PS1='dude $ ' | dude $ 以你自己喜欢的字符串作为Shell提示符 |
一些基本的 shell 快捷键
快捷键 | 说明 |
Ctrl-k | 剪切 |
Ctrl-y | 粘贴 |
Ctrl-a | 将光标移动到行首 |
Ctrl-e | 将光标移动到行尾 |
Ctrl-d | 删除光标所在位置的字符 |
Ctrl-l | 清屏,清除掉当前屏幕上所有的内容,只留下光标所在的行为最上面的一行 |
Ctrl-u | 删除从提示符到光标所在位置之间的字符 |
Ctrl-_ | (要输入下划线,需要按Shift键,所以此处的快键键应该为 Ctrl - Shift - 减号 )撤销在命令行中输入的最后一个内容 |
Ctrl-c | 中断/停止 在前台运程的程序/进程 |
Ctrl-r | 反向历史搜索 |
重要的文件 ~/.bash_history和命令history
~/.bash_history: 存储shell上最近使用的500个命令/事件
history: 将显示命令历史
history | grep <key-word>: 将显示历史上所有具有关键字<关键字>的命令(在您记住过去使用的命令的部分内容时很有用)
3: 创建自己的命令别名
如果你厌倦了在bash中使用冗长的命令,你可以创建自己的命令别名。
最好的方法是在主文件夹中修改(如果不存在,则创建)一个名为.bash_aliases的文件。通用语法是:
alias command_alias='actual_command'
其中actual_command是您要重命名的命令,command_alias是您给它的新名称。
例如:
alias apt-install='sudo apt-get -y install'
将新的命令别名 apt-install 映射到实际的命令 sudo apt-get -y install。这意味着当你在终端中使用apt-install 时,bash 会将其解释为 sudo apt-get -y install。
4: 在系统中找到一个文件
Using bash you can easily locate a file with the locate command. For example say you are looking for the file mykey.pem:
使用 bash,您可以使用 locate 命令轻松定位文件。如果你是首次支持locate命令,可能会报错/var/lib/plocate/plocate.db: 没有那个文件或目录:
[demouser@vbox ~]$ locate sshd_config
/var/lib/plocate/plocate.db: 没有那个文件或目录
那你需要先执行updatedb:
[demouser@vbox ~]$ sudo updatedb
假设你要查找文件sshd_config:
[demouser@vbox ~]$ locate sshd_config
/etc/ssh/sshd_config
/etc/ssh/sshd_config.d
/usr/lib/systemd/sshd_config.d
/usr/lib/systemd/sshd_config.d/20-systemd-userdb.conf
/usr/share/man/man5/sshd_config.5.gz
上面的sshd_config这个文件名称有点长,如果你正在寻找这个文件,但是只记得它是一个 ssh 开头又好像有config 部分。中间是什么确忘了,此时可以使用管道将 locate 命令和 grep 命令结合起来,如下所示:
[demouser@vbox ~]$ locate ssh |grep config
/etc/crypto-policies/back-ends/libssh.config
/etc/crypto-policies/back-ends/openssh.config
/etc/crypto-policies/back-ends/opensshserver.config
/etc/libssh/libssh_client.config
/etc/libssh/libssh_server.config
/etc/ssh/ssh_config
/etc/ssh/ssh_config.d
/etc/ssh/sshd_config
/etc/ssh/sshd_config.d
/etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf
/etc/ssh/ssh_config.d/30-libvirt-ssh-proxy.conf
/etc/ssh/ssh_config.d/50-redhat.conf
/etc/sysconfig/sshd
/usr/lib/systemd/ssh_config.d
/usr/lib/systemd/sshd_config.d
/usr/lib/systemd/ssh_config.d/20-systemd-ssh-proxy.conf
/usr/lib/systemd/sshd_config.d/20-systemd-userdb.conf
/usr/share/crypto-policies/back-ends/DEFAULT/libssh.config
/usr/share/crypto-policies/back-ends/DEFAULT/openssh.config
/usr/share/crypto-policies/back-ends/DEFAULT/opensshserver.config
/usr/share/crypto-policies/back-ends/FIPS/libssh.config
/usr/share/crypto-policies/back-ends/FIPS/openssh.config
/usr/share/crypto-policies/back-ends/FIPS/opensshserver.config
/usr/share/crypto-policies/back-ends/FUTURE/libssh.config
/usr/share/crypto-policies/back-ends/FUTURE/openssh.config
/usr/share/crypto-policies/back-ends/FUTURE/opensshserver.config
/usr/share/crypto-policies/back-ends/LEGACY/libssh.config
/usr/share/crypto-policies/back-ends/LEGACY/openssh.config
/usr/share/crypto-policies/back-ends/LEGACY/opensshserver.config
/usr/share/man/man5/ssh_config.5.gz
/usr/share/man/man5/sshd_config.5.gz
执行的输出显示所有包含这两部分的结果,因为我搜索的是ssh而不是sshd,结果的内容比第一次搜出来的要多很多。
请注意,并非所有系统都安装了locate实用程序,而且许多系统没有启用它。Locate是快速有效的,因为它定期扫描您的系统并缓存其中每个文件的名称和位置,但如果该数据收集未启用,则它不能告诉您任何信息。你可以使用updatedb手动初始化文件系统扫描,以便更新文件系统上缓存的文件信息。
如果有的发行版本中没有安装locate这个查找工具,也可以使用find工具:
[demouser@vbox ~]$ sudo find / -name sshd_config -print
find: ‘/run/user/1000/gvfs’: 权限不够
find: ‘/run/user/1000/doc’: 权限不够
/etc/ssh/sshd_config
上面的命令全局搜索磁盘查找名为sshd_config的文件或目录。但因为每次运行时都必须扫描你的文件系统,而不是使用缓存的数据。这就导致了效率低下和速度慢,但更实时。find实用程序的功能远不止查找文件,但对其功能的完整描述超出了本示例的范围。
如果您对我的文章有兴趣,我把我发布的文章都归档到我私人网站中去,欢迎访问 Corner 三的小角落 -- 首页 查阅之前的文章。
相关推荐
- RHEL8和CentOS8怎么重启网络
-
本文主要讲解如何重启RHEL8或者CentOS8网络以及如何解决RHEL8和CentOS8系统的网络管理服务报错,当我们安装好RHEL8或者CentOS8,重启启动网络时,会出现以下报错:...
- Linux 内、外网双网卡路由配置
-
1.路由信息的影响Linux系统中如果有多张网卡的情况下,如果路由信息配置不正确,...
- Linux——centos7修改网卡名
-
修改网卡名这个操作可能平时用不太上,可作为了解。修改网卡默认名从ens33改成eth01.首先修改网卡配置文件名(建议将原配置文件进行备份)...
- CentOS7下修改网卡名称为ethX的操作方法
-
?Linux操作系统的网卡设备的传统命名方式是eth0、eth1、eth2等,而CentOS7提供了不同的命名规则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名全自动的、可预知的...
- Linux 网卡名称enss33修改为eth0
-
一、CentOS修改/etc/sysconfig/grub文件(修改前先备份)为GRUB_CMDLINE_LINUX变量增加2个参数(net.ifnames=0biosdevname=0),修改完成...
- CentOS下双网卡绑定,实现带宽飞速
-
方式一1.新建/etc/sysconfig/network-scripts/ifcfg-bond0文件DEVICE=bond0IPADDR=191.3.60.1NETMASK=255.255.2...
- linux 双网卡双网段设置路由转发
-
背景网络情况linux双网卡:网卡A(ens3)和网卡B(...
- Linux-VMware设置网卡保持激活
-
Linux系统只有在激活网卡的状态下才能去连接网络,进行网络通讯。修改配置文件(永久激活网卡)...
- VMware虚拟机三种网络模式
-
01.VMware虚拟机三种网络模式由于linux目前很热门,越来越多的人在学习linux,但是买一台服务放家里来学习,实在是很浪费。那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有v...
- 2023年最新版 linux克隆虚拟机 解决网卡uuid重复问题
-
问题描述1、克隆了虚拟机,两台虚拟机里面的ip以及网卡的uuid都是一样的2、ip好改,但是uuid如何改呢?解决问题1、每台主机应该保证网卡的UUID是唯一的,避免后面网络通信有问题...
- Linux网卡的Vlan配置,你可能不了解的玩法
-
如果服务器上连的交换机端口已经预先设置了TRUNK,并允许特定的VLAN可以通过,那么服务器的网卡在配置时就必须指定所属的VLAN,否则就不通了,这种情形在虚拟化部署时较常见。例如在一个办公环境中,办...
- Centos7 网卡绑定
-
1、切换到指定目录#备份网卡数据cd/etc/sysconfig/network-scriptscpifcfg-enp5s0f0ifcfg-enp5s0f0.bak...
- Linux搭建nginx+keepalived 高可用(主备+双主模式)
-
一:keepalived简介反向代理及负载均衡参考:...
- Linux下Route 路由指令使用详解
-
linuxroute命令用于显示和操作IP路由表。要实现两个不同子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)