Linux基础02 bash shell(命令补全, 快捷键, 历史命令, 命令别名alias, ls, man), 关机重启及注销, 目录管理, 用户登录信息查看命令, 命令行扩展和被括起来的集合, 登录提示

bash shell

一.bash初识

1.什么是bash shell
是一个命令解释器,与内核进行交互,用户和操作系统的接口
2.bash shell的作用
  文件管理
  用户管理
  权限管理
  磁盘管理
  网络管理
  软件管理
  应用管理
  ...
3.bash两种使用方式
  1)命令
    效率低,适合少量工作
  2)脚本
    效率高,适合大量工作

4.命令提示符

    [root            @        centos7        ~    ]        # :超级管理员
    [oldboy          @        centos7        ~    ]        $ :普通用户
    当前登录的用户                主机名        当前目录的位置    

/home/oldboy:普通用户家目录
/root: root用户的家目录

第一个命令:
echo:在bash shell中调用变量 $
例:

>age=18
>echo $age # 返回18

whoami:查看当前登录的用户

 

二.shell的基础语法

命令     选项        参数
command [-options] [arguments]  中括号 可有可无

echo:  所见即所得。输出你echo后面参数内容
-e:识别换行符等特殊符号
\:转义符 \n换行符 \t空几格(一个tab)
$:调用变量

echo 'zls'
echo -e 'zls\n123' # 识别换行符输出

 

yum -y install net-tools       安装完可以使用ifconfig命令

 

注意: 

  • 多个命令可以用 ";" 符号分开
  • 一个命令可以用\分成多行

 

三.shell的基本特性

1.命令补全(参数, 选项)

1)命令补全 Tab
2)参数补全:yum install -y bash-completion (最小安装默认不带命令补全,需要该命令自行安装,关闭重新登录即有效)
ls -- 然后按Tab键即可显示所有参数
3)选项补全:主要是补全 路径
C:\Users\Administrator\Documents\Virtual Machines\CentOS 64 位

 

2.快捷键

linux的快捷键:
    Ctrl + a:将光标跳转到行首
    Ctrl + e:将光标跳转至行末
    Ctrl + w:以空格为结尾,将当前光标位置之前的内容剪切
    Ctrl + u:将当前光标位置之前的内容全部剪切
   Ctrl + k:将当前光标之后的内容剪切 Ctrl
+ l:清屏(相当于clear命令) Ctrl + c:终止当前命令 Ctrl + d:退出,断开当前连接(相当于exit/logout命令) Ctrl + z:挂起,将当前运行的程序放后台执行(比如安装过程中时间比较久,放到后台执行) 注:如果把xshell当前会话关闭,后台运行就会终止,要永久还需要敲个命令 Ctrl + r:搜索历史命令
   Ctrl + y:粘贴剪切板上的内容 Ctrl
+ s:锁屏(没什么意义,不如使用xshell软件的锁屏或者是windows锁屏) Ctrl + q:解锁(Ctrl + c也可以解锁) Ctrl + 左右:按照单词跳转光标(点,空格都有效)
   Ctrl + 左右方向键:向指定的方向键移动一组字符,以空格为分隔符 ESC
+ . :瞬间显示出上一条命令,最后的参数或者路径,以空格为分隔符,空格之后的内容
   !命令   :执行最近的一次以该命令为开头的命令
   !!    :执行上一条命令
#:注释,不执行。(输入又想等下执行可以先注释,后面通过上下键返回上面的注释的命令)

 

3.历史命令

1)日志审计
history
-w:保存历史命令到文件中write
例: [root@oldboyedu ~]# history -w
#历史命令保存到文件,当前用户的家目录下有一个隐藏文件:.bash_history

-d:删除历史命令中的某一条 -d 后面加数字 delete(删除)
例: [root@oldboyedu ~]# history -d 5 #删除第5条历史记录

-c:清空历史记录,clear(清除)
例: [root@oldboyedu ~]# history -c #清空所有历史记录
history -w # 再次执行机会重写保存的历史文件

! + 命令中的前面字符:调用之前的历史命令,只能调最近执行的命令(ctrl+r可以搜包含字符的命令) # 例 !v 查询v开头的命令
!!:执行上一条执行过的命令
!+历史命令中的编号:调用历史命令 # 例 !13调用历史中13条命令
注:history记录命令中可通过设置命令前带空格不会记录进history中

命令行历史

当执行某个命令后,系统会在内存中记录下此命令,此时只记录在内存中,
当正常退出终端后,内存中记录下来的执行命令的历史,会保存到用户家目录下的 .bash_history 文件
中
当用户下次登录,系统会自动将该文件中的内容加载到内存
被写入命令历史的,包括错误的命令
默认记录最近1000条,其配置在 /etc/profile 文件中的 HISTSIZE字段中,可以根据需要修改
利用命令历史,可以用它来重复执行命令,提高输入效率
#命令行历史文件
[root@ubuntu ~]#cat .bash_history
#当新开一个会话窗口,会读取这个历史文件。如果某个会话正常退出,它的命令行历史记录会写入该文件

 

4.命令的别名 alias

#设置别名

[root@oldboyedu ~]# alias ls='ls --color=auto' //临时生效,永久生效要写到文件中
[root@localhost ~]# alias tong='ping baidu.com'

#取消别名

[root@oldboyedu ~]# unalias tong

#查看别名

[root@oldboyedu ~]# alias  #alias XXX,查单个命令的别名
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 tong='ping baidu.com'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

注: 使用前看下alias有没有被替换

在命令行中定义的别名,仅对当前shell进程有效

如里需要永久有效,则要写配置文件:

  仅对当前用户:~/.bashrc

  对所有用户有效:/etc/bashrc, /etc/bash.bashrc(ubuntu) 

编辑配置文件新加的别名不会立即生效,要退出重新登录或在当前进程中重新读取配置文件

[mage@ubuntu ~]$ source .bashrc

如果别名同原命令同名,如果要执行原命令,可使用

\ls
“ls”
‘ls’ 
command ls
/usr/bin/ls   #只适用于外部命令

 

命令执行优先级

别名 -----> 内部命令 ------>hash--->外部命令 

内部命令, hash参考:

https://www.cnblogs.com/ludingchao/p/15496438.html

 

5.查看目录下的文件

[root@oldboyedu ~]# ls --help    获取命令的帮助
Usage: ls [选项] [文件]
-1:    数字1, 以列表的形式展示某个目录下的文件
-l:    显示出某个目录下的详细信息
-a:    显示所有文件包括隐藏文件  --all
例:查看当前目录所有内容详细信息    ls -a -l 或 ls -al 或 ls -la 或 ll -a(ll是系统预先设好的别名,脚本中无法使用)
-h:    以人类可读的方式,显示文件信息(文件大小加上了单位,要和-l 一起使用)
-d:    只显示目录本身
-t:    按照修改时间排序,最新的在最上面
例: 按时间顺序排序    ls -tl    倒叙排序    ls -tlr(参数r为倒序) 
-r:   倒叙排列
-i:   显示文件的inode号
-F: 显示加上标识符(防止有些文件名后面有空格看不出)
说明:
1. ls 查看不同后缀文件时的颜色由 /etc/DIR_COLORS 和@LS_COLORS变量定义
2. ls -l 看到文件的大小,不一定是实际文件真正占用空间的大小
3. ll 是 ls命令的一个别名,在centos 和 ubuntu 系统中,该别名的参数不一样

 

6.查看命令说明获取帮助

man
例: man ls查看ls的具体说明    (ls --help是查看简单说明)
注: 可以网上查看linux中文手册
http://linux.51yip.com/
https://man.linuxde.net/    

man有9个章节,一般打开默认是第1/8章节(是否针对root用户区别),第2/3章节针对开发。
一般安装一个包,自动会往man手册文件写入说明文档

常用方法:
man[选项...] [章节] 手册页...
man passwd #默认打开第一章帮助
man 5 passwd #指定第五章帮助
man 9 passwd #总共9个章节,中间的数字不能超过9,如果要找的章节里面 没有对应的内容,则会提示没有
man 10 passwd #总共9个章节,中间的数字不能超过9,如果是数字大于9, 则直接定位到最小的章

man -a passwd #打开所有帮助
man -f passwd #显示passwd 相关的章节,相当于 whatis passwd
man -k passwd #在man 手册中搜索所有与passwd 相关的内容,使用
whatis 数据库
man -w ls #显示ls的man 文件路径
man -aw passwd #显示所有跟passwd有关的man文件路径
man -w 5 passwd #显示第5章的passwd的man文件路径
man -M /usr/local/share/man/zh_CN #显示中文man 的内容

#常用关键字及格式
[] 可选项
<> 必选项
a|b 二选一
... 同一内容可出现多次
{ } 分组

#段落说明
NAME #名称及说明
DESCRIPTION #详细说明
SYNOPSIS #使用格式
FILES #相关文件
OPTIONS #选项
AUTHOR #作者
REPORTING BUGS #相关bug信息
COPYRIGHT #版权及开源协议信息
EXAMPLES #使用示例
SEE ALSO #可参考其它部份

#显示man手册文件路径
[root@ubuntu2204 ~]# manpath
/usr/local/man:/usr/local/share/man:/usr/share/man
help
help COMMAND  #内部命令帮助
COMMAND --help|-h  #外部命令帮助
info 详细显示命令信息

 

7.echo输出颜色

 

关机重启1.shutdown 关机重启命令 ****企业常用

    -h   0(时间信息,默认按分钟)    关机
    -r   0(时间信息,默认按分钟)     重启                                                                                  
    -c   取消你所设置关机或重启        

2.reboot    重启                       ****企业常用

3.halt        关机命令,只会关系统,不会关掉电源,需要手动关闭电源。

4.poweroff  关机命令                    ****企业常用

5.init 0关机,init 6重启 # 是切换系统级别,一般不用


shutdown -h now 立即关机 shutdown -r now 立即重启
注:shudown 程序会广播已登录的所有用户,被看做是安全的关机命令,是一个计划关机任务,可撤销

shutdown [OPTION]... [TIME] [MESSAGE]
shutdown #默认一分钟后关机
shutdown +10 #10分钟后关机
shutdown 01:02 #1点过两分关机
shutdown -r|--reboot #一分钟后重启
shutdown -r now #现在重启
shutdown -H|--halt #一分钟后调用halt 关机
shutdown -P|--poweroff #一分钟后调用poweroff 关机
shutdown -c #取消关机计划

#-r 表示一分钟后重启(直接shutdown也是一分钟关机),如果想立即执行 shutdown -r now
[root@ubuntu2204 ~]# shutdown -r
Shutdown scheduled for Sun 2022-06-12 20:11:05 CST, use 'shutdown -c' to cancel.

#取消重启
[root@ubuntu2204 ~]# shutdown -c

注销

Ctrl键+d
exit
logout

 

目录管理

[root@oldboyedu ~]# ls -1 /  # linux中一切以根为顶点

#普通用户可执行的命令存放目录    # 以下三个软链接都是centos7开始有的,之前的版本没有
软链接    /bin为链接文件
bin     -> usr/bin    # centos7下有bin目录, 之前centos6,5是没有bin目录的, 只有usr/bin
例:[root@oldboyedu ~]# ls /bin/useradd
ls: cannot access /bin/useradd: 没有这个文件或者目录,。说明添加用户这个命令不在普通用户命令下,不能被随意执行

#超级用户可执行的命令存放目录
sbin    -> usr/sbin

#系统命令,依赖的库文件存放的目录
lib     -> usr/lib    (相当于windows下的Program Files) 32位
lib64   -> usr/lib64    (相当于windows下的Program Files(x86)) 64位

#系统的启动项和引导菜单
boot

#系统设备目录
dev    (linux里插上u盘,设备会放在dev下面)
  /dev/sda    :系统中的第一块磁盘
  /dev/sda1    :系统中第一块磁盘的第一个分区
  /dev/sda2    :系统中第一块磁盘的第二个分区
  /dev/sda3    :系统中第一块磁盘的第三个分区
  /dev/sdb    :系统中的第二块磁盘
  /dev/sdc
  /dev/sdc4    :系统中第三块磁盘的第四个分区
  /dev/cdrom  # 光驱
  /dev/sr0   # 光驱   
/dev/null :类似于黑洞,垃圾回收站。 使用: ls -l /etc/ > /dev/null 不输出,一般用于脚本   /dev/zero :源源不断的产生数据   /dev/pts/ :查看用户连接的终端数 使用: ll /dev/pts/
  /dev/random : 生成随机数
  /dev/stderr  # 错误输出 2
  /dev/stdin   # 标准输入 0
  /dev/stdout  # 标准输出 1
/usr  # 安装目录 /usr 目录 相当于windows下的 C:\Windows目录 /usr/local 软件安装目录 相当于C:\Program
/usr/share 安装目录
/usr/bin 普通用户使用的应用程序(重要) /usr/sbin 管理员用户使用的应用程序(重要) /usr/lib 库文件Glibc 32bit (相当于windows下的Program Files) /usr/lib64 库文件Glibc 64bit (相当于windows下的Program Files(x86)) #系统配置文件目录 etc   /etc/hostname : 记录主机名的配置文件   /etc/hosts : 本地域名解析配置文件   /etc/resolv.conf : DNS配置文件   /etc/sysconfig/network-scripts/ifcfg-eth0 : 网卡配置文件 (ip a查ip地址信息能看到)
  /etc/fstab : 挂载设备
  /etc/sysconfig/selinux : selinux配置文件
  /etc/sysconfig/grub : grub菜单
#普通用户的家目录(useradd创建一个用户,home下面就会多一个该用户的文件夹) home #光驱,挂载目录 media  # 设备目录 mnt   # 临时挂载点 # 早期第三方厂商安装软件目录(现在已经不用了) opt #反应系统当前进程的实时状态(系统进程的实时负载情况) proc 使用:
ls /proc/ 查看当前所有进程pid目录 /proc/meminfo : 内存信息 使用: cat /proc/meminfo查看内存信息的文件 /proc/cpuinfo : CPU信息 使用: cat /proc/cpuinfo查看cpu信息的文件 #超级管理员用户的家目录 root #临时目录,类似于回收站 tmp (10天后自动会删除,最好删除用这个,防止误删除) #可变化系统文件目录 var /var/log/messages:系统日志 /var/log/secure:系统登录日志
/var/log/cron:定时任务的日志
/var/run:进程的pid文件 # 系统正在跑的目录,记录跑的服务的进程号(存放进程的pid文件) run 目录前面的信息 如: drwxr
-xr-x. 2 root root 60 Sep 17 00:55 vfio l:软链接文件 d:目录 -:普通文件 c:块设备文件

 

用户登录信息查看命令

  • whoami: 显示当前登录有效用户
  • who: 系统当前所有的登录会话
  • w: 系统当前所有的登录会话及所做的操作

whoami

#whoami
#显示当前用户的用户名

#who am i
#显示当前用户的用户名 终端 登录时间 来源IP

who

#who [选项]... [ 文件 | 参数1 参数2 ]
#显示当前已登录的用户信息。

who #列出在当前主机上所有登录用户 who -u | --users #列出当前主机上所有用户的空闲时间 . 表示最近一分钟还是活跃状态 old 表 示用户己经空闲超过24小时 who -s | --short #列出在当前主机上所有登录用户,等同于who who -q | --count #登录用户统计 who -b | --boot #上次系统启动时间 who -a | --all #多选项组合 who -m #who am i

w

#w [options]
#显示当前所有登录用户的具体信息

w 19:19:03 up 28 min, 2 users, load average: 0.04, 0.05, 0.11 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.31.236 18:40 2.00s 0.09s 0.00s w jose tty2 tty2 18:41 38:45 24.98s 0.04s /usr/libexec/gsd-disk-utility-notify
#登录名 终端 来源IP 登录时间 空闲时间 当前终端中所有进程使用cpu的时间,不包括后台作业占用的时 间 当前进程使用的cpu的时间 #load average 表示平均负载,最近一分钟,最近五分钟,最近15分钟
#WHAT: 上一次执行的命令    -bash是什么都没执行,只是bash跑着
#查看特定用户 w root

 

命令行扩展和被括起来的集合

命令行扩展:`` 和 $()

把一个命令的输出打印给另一个命令的参数,放在``中的一定是有输出信息的命令

$(COMMAND)
`COMMAND`

变量

双引号,弱引用,可以解析内容

单引号,强引用,原样输出

 

 

命令

`cmd` 展开

$(cmd) 展开

[root@ubuntu2204 ~]# echo "echo $HOSTNAME"
echo ubuntu2204
[root@ubuntu2204 ~]# echo 'echo $HOSTNAME'
echo $HOSTNAME
[root@ubuntu2204 ~]# echo `echo $HOSTNAME`
ubuntu2204
#结论: 单引号:强引用,六亲不认,变量和命令都不识别,都当成了普通的字符串,"最傻" 双引号:弱引用,不能识别命令,可以识别变量,"半傻不精" 反向单引号:里面的内容必须是能执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内容 当成命令进行执行后,再交给调用反向单引号的命令继续,"最聪明"
[root@ubuntu2204 ~]# echo "This system's name is $(hostname)"
This system's name is ubuntu2204

[root@ubuntu2204 ~]# echo "I am `whoami`"
I am root

[root@ubuntu2204 ~]# touch $(date +%F).log
[root@ubuntu2204 ~]# ls
2023-05-08.log snap

[root@ubuntu2204 ~]# touch `date +%F`.txt
[root@ubuntu2204 ~]# touch `date +%F_%H-%M-%S`.log
[root@ubuntu2204 ~]# ls -l
总计 4
-rw-r--r-- 1 root root    0  5月  8 11:12 2023-05-08_11-12-24.log
-rw-r--r-- 1 root root    0  5月  8 11:07 2023-05-08.log
-rw-r--r-- 1 root root    0  5月  8 11:08 2023-05-08.txt
M57-Magedu
drwx------ 3 root root 4096  5月  4 17:02 snap
[root@ubuntu2204 ~]# ll `echo `date +%F`.txt`
.txt: command not found
ls: cannot access 'date': No such file or directory
ls: cannot access '+%F': No such file or directory
[root@ubuntu2204 ~]# ll $(echo $(date +%F).txt)
-rw-r--r-- 1 root root 0 May  8 11:08 2023-05-08.txt
[root@ubuntu2204 ~]# ll `echo $(date +%F).txt`
-rw-r--r-- 1 root root 0 May  8 11:08 2023-05-08.txt
[root@ubuntu2204 ~]# ll $(echo `date +%F`.txt)
-rw-r--r-- 1 root root 0 May  8 11:08 2023-05-08.txt

括号扩展:{ }

{} 可以实现打印重复字符串的简化形式

{元素1,元素2,元素3}
{元素1..元素2}
echo file{1,3,5} 结果为:file1 file3 file5 
rm -f file{1,3,5}
echo {1..10}
echo {a..z}
echo {1..10..2}
echo {000..20..2}
[root@ubuntu2204 ~]# echo {000..20..2}
000 002 004 006 008 010 012 014 016 018 020
[root@ubuntu2204 ~]# echo {a..z..2}
a c e g i k m o q s u w y
[root@ubuntu2204 ~]# echo {A..z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i 
j k l m n o p q r s t u v w x y z
[root@ubuntu2204 ~]# echo {a..z} {A..Z}
a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O 
P Q R S T U V W X Y Z
[root@ubuntu2204 ~]# echo {a..z}{1..3}
a1 a2 a3 b1 b2 b3 c1 c2 c3 d1 d2 d3 e1 e2 e3 f1 f2 f3 g1 g2 g3 h1 h2 h3 i1 i2 i3 
j1 j2 j3 k1 k2 k3 l1 l2 l3 m1 m2 m3 n1 n2 n3 o1 o2 o3 p1 p2 p3 q1 q2 q3 r1 r2 r3 
s1 s2 s3 t1 t2 t3 u1 u2 u3 v1 v2 v3 w1 w2 w3 x1 x2 x3 y1 y2 y3 z1 z2 z3
# 把f2.log重命名为f2.log.bak
[root@ubuntu ~]# echo f2.log{,.bak}
f2.log f2.log.bak

[root@ubuntu ~]# mv f2.log{,.bak}

 

登录提示

登录前提示

在命令行模式下本地终端(tty1~tty6)登录界面,会有几行提示文字,
这些文字都保存在/etc/issue文件中,可以自行修改。

 

登录后提示

motd:message of the day

当用户从终端登录时,此文件的内容将会显示在终端上,如果shell工具支持中文,也可显示。
内容由使用者定制,经常用于通告信息,欢迎提示等。
但是,此文件只适用于命令行界面,如果是图形界面登录,将不显示此文件内容。
/etc/motd
/etc/motd.d/

#ubuntu2204中没有该文件,可自行创建
[root@ubuntu2204 ~]# ls /etc/motd
ls: cannot access '/etc/motd': No such file or directory
#登录后的提示来自于此目录下不同文件,如果不需要默认提示,可以将该目录清空
[root@ubuntu2204 ~]# ls /etc/update-motd.d/
00-header             85-fwupd                   91-release-upgrade      98-
fsck-at-reboot
10-help-text          88-esm-announce            92-unattended-upgrades  98-
reboot-required
50-landscape-sysinfo  90-updates-available       95-hwe-eol
50-motd-news          91-contract-ua-esm-status  97-overlayroot

 

posted @ 2021-08-30 18:22  战斗小人  阅读(500)  评论(0编辑  收藏  举报