bash shell

android shutDown 关机_ubuntu

一.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参考:

 

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文件中,可以自行修改。

android shutDown 关机_android shutDown 关机_02

 

登录后提示

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