第一章
1、什么是计算机
所谓的计算机就是一种计算器,而计算器其实是:接受用户输入指令与数据,经由中央处理器的数学与逻辑单元运算处理后,以产生或存储成有用的信息。因此,只要有输入设备(不管是键盘还是触摸屏)以及输出设备(屏幕或直接打印出来),让你可以输入数据使该机器产生信息的,那就是一台计算机了。
1.1 冯·诺依曼体系结构
1.1 终端 terminal
设备终端:键盘、鼠标、显示器
1.1.1 终端类型
-
控制台终端: /dev/console
-
串行终端:/dev/ttyS#
-
虚拟终端:tty:teletypewriters, /dev/tty#,tty 可有n个,Ctrl+Alt+F#
-
图形终端:startx, xwindows
CentOS 6: Ctrl + Alt + F7
CentOS 7: 在哪个终端启动,即位于哪个虚拟终端
-
伪终端:pty:pseudo-tty , /dev/pts/# 如:SSH远程连接
1.1.2 查看当前的终端设备
tty 命令可以查看当前所在终端
tty
范例:
[root@centos8 ~]#tty /dev/pts/0
init# (3为命令行模式,5为图形模式,6重启,0关机)
free -h 查看内存资源
runlevel 查看当前运行级别
范例:
[root@Centos8 ~]# runlevelN 5[root@Centos8 ~]# free -h total used free shared buff/cache availableMem: 1.9Gi 718Mi 771Mi 10Mi 475Mi 1.1GiSwap: 4.0Gi 0B 4.0Gi[root@Centos8 ~]# init3bash: init3: command not found...Similar command is: 'init'[root@Centos8 ~]# init 3[root@Centos8 ~]# runlevel5 3[root@Centos8 ~]# free -h total used free shared buff/cache availableMem: 1.9Gi 308Mi 1.2Gi 9.0Mi 474Mi 1.5GiSwap: 4.0Gi 0B 4.0Gi
gedit 文本编辑工具在图形界面下才可以使用(相当于windows的记事本)
nano 为简单的文本编辑工具(ctrl+X :退出;Y:是否保存;回车为保存成功)
范例:
[root@Centos8 ~]# nano /etc/motd #登录后提示文件Connecting to 10.0.0.201:22......Connection established.To escape to local shell, press 'Ctrl+Alt+]'.welcome to mashimaro.org!!!Activate the web console with: systemctl enable --now cockpit.socketLast login: Thu Mar 19 09:50:19 2020 from 10.0.0.1[root@Centos8 ~]# nano /etc/issue #登录前提示文件
1.2 交互式接口
1.2.1bash shell
显示当前使用的shell
echo ${SHELL}
显示当前系统使用的所有shell
cat /etc/shells
范例:
[root@Centos8 ~]# cat[root@Centos8 ~]# echo $SHELL/bin/bash[root@Centos8 ~]# cat /etc/shells/bin/sh/bin/bash/usr/bin/sh/usr/bin/bash
1.3 设置主机名
hostname NAME 注意:主机名不能用下划线hostmamectl set-hostname NAME (直接写入文件/etc/hostname)
范例:
[root@Centos8 ~]# hostname sz-lg-doker-node1-0-201.mashimaro.org[root@Centos8 ~]# hostnamesz-lg-doker-node1-0-201.mashimaro.org[root@Centos8 ~]# hostnamectl set-hostname Centos8.bruceliu.org[root@Centos8 ~]# cat /etc/hostnameCentos8.bruceliu.org
1.4 命令提示符
显示提示符格式
[root@Centos8 ~]# echo $PS1[\u@\h \W]\$PS1="\[\e[1;32m\][\[\e[1;32m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"
[13:00:29 root@Centos8 ~]#echo 'PS1="\[\e[1;32m\][\[\e[1;32m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"'>/etc/profile.d/env.sh[13:01:01 root@Centos8 ~]#cat /etc/profile.d/env.shPS1="\[\e[1;32m\][\[\e[1;32m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"[13:01:09 root@Centos8 ~]#source /etc/profile.d/env.sh或者. /etc/profile.d/env.sh#可以不重启生效
ubuntu 的PS1文件放在.bashrc中
更改PS1的常用参数
参数 | 代表的意思 |
---|---|
\d | 日期,格式为"周 月 日",例如:"Mon Aug 1" |
\H | 完整的主机名 |
\h | 仅取主机的第一个名字 |
\t | 24小时制的时间,如:HH:MM:SS |
\A | 24小时制的时间:HH:MM |
\T | 12小时制的时间 |
\u | 当前用户的用户名 |
\v | BASH的版本信息 |
\w | 当前工作目录的完整路径 |
\W | 当前工作目录的basename |
$ | 提示符,如果是root时,提示符为:#,普通用户则为:$ |
\033[m | 声明了转义序列的开始 |
\033[0m | 声明转义序列结束,回到默认颜色 |
PS1中设置字符颜色有两种方式,效果相同
-
\e[F;Bm
-
\ [\e[F;Bm]
-
\033[F;Bm
不同的数字代表不同的意义,支持的颜色列表
其中"F"为字体颜色,编号为30-37,"B"为背景颜色,编号为40-47
F | B | 代表的颜色 |
---|---|---|
30 | 40 | 黑 色 |
31 | 41 | 红 色 |
32 | 42 | 绿 色 |
33 | 43 | 黄 色 |
34 | 44 | 蓝 色 |
35 | 45 | 紫 色 |
36 | 46 | 青 蓝 色 |
37 | 47 | 白 色 |
几种特殊'颜色'
0 | OFF |
1 | 高亮显示 |
4 | underline |
5 | 闪烁 |
7 | 反显 |
8 | 消隐(不可见) |
1.5 执行命令
1.5.1 shell 中可执行的两类命令
-
内部命令:由shell自带的,而且通过某命令形式提供
-
外部命令:在文件系统路径下有对应的可执行程序文件
区别指定的命令是内部或外部命令
type COMMAND
范例: 查看是否存在对应内部和外部命令
[root@centos8 ~]#type -a echoecho is a shell builtinecho is /usr/bin/echo[14:19:25 root@Centos8 ~]#enable -n echo #禁用echo命令[14:22:30 root@Centos8 ~]#enable echo #启用echo命令
内部命令会从 /bin/bash(在shell中)找,然后执行;
help和enable可以显示内部指令
外部命令会一次从$PATH中找是否有次命令。
[root@Centos8 ~]#echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
查看外部命令路径:
which #查看外部命令whereis #查看外部命令和帮助文档
Hash 缓存表
hash -r #清除所有缓存(外部命令)hssh -d COMMAND #清除某个命令缓存(外部命令)
1.5.2 命令别名
对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行
显示当前shell进程所有可用的命令别名
alias
定义别名
alias NAME='VALUE'
范例:
[14:46:15 root@Centos8 ~]#alias cdnet="cd /etc/sysconfig/network-scripts"[14:46:39 root@Centos8 ~]#cdnet[14:46:43 root@Centos8 network-scripts]#[14:47:49 root@Centos8 network-scripts]#unalias cdnet #取消别名[14:47:49 root@Centos8 network-scripts]#unalias -a #取消所有别名
如果想永久有效,要定义在配置文件中
-
仅对当前用户:~/.bashrc
-
对所有用户有效:/etc/bashrc
如果别名同原命令同名,如果要执行原命令,可使用
\ALIASNAME'ALIASNAME'
范例:
[14:56:11 root@Centos8 ~]#lsanaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Music Pictures Public Templates Videos[14:56:17 root@Centos8 ~]#\lsanaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Music Pictures Public Templates Videos[14:56:21 root@Centos8 ~]#'ls'anaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Music Pictures Public Templates Videos
1.5.3 命令格式
COMMAND [OPTIONS...] [ARGUMENTS...]
注意:
多个选项以及多参数和命令之间使用空白字符分隔
取消和结束命令执行:Ctrl+c (终止命令,强行退出),Ctrl+d (正常退出,相当于logout)
多个命令可以用 ";" 符号分开
一个命令可以用\分成多行
1.6 常见命令
1.6.1 查看硬件信息
1.6.1.1 查看 cpu
lscpu命令可以查看cpu信息 cat /proc/cpuinfo也可看查看到
1.6.1.2 查看内存大小
[15:14:14 root@Centos8 ~]#free -h total used free shared buff/cache availableMem: 1.9Gi 795Mi 676Mi 10Mi 492Mi 1.0GiSwap: 4.0Gi 0B 4.0Gi[15:15:55 root@Centos8 ~]#cat /proc/meminfo
1.6.1.3 查看硬盘和分区情况
[15:16:15 root@Centos8 ~]#lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot├─sda2 8:2 0 100G 0 part /├─sda3 8:3 0 50G 0 part /data├─sda4 8:4 0 1K 0 part └─sda5 8:5 0 4G 0 part [SWAP]sr0 11:0 1 7G 0 rom [15:17:24 root@Centos8 ~]#cat /proc/partitionsmajor minor #blocks name 8 0 209715200 sda 8 1 1048576 sda1 8 2 104857600 sda2 8 3 52428800 sda3 8 4 1 sda4 8 5 4194304 sda5 11 0 7377920 sr0
1.6.2 查看系统版本信息
1.6.2.1 查看内核版本
[15:18:06 root@Centos8 ~]#uname -r4.18.0-147.el8.x86_64[13:35:57 root@Centos7 ~]#uname -r3.10.0-1062.el7.x86_64[13:33:21 root@Centos6 ~]#uname -r2.6.32-754.el6.x86_64[14:10:33 liu@ubuntu1804 root]$uname -r4.15.0-76-generic
1.6.2.2 查看操作系统发行版本
#CentOS8 查看发行版本[15:32:29 root@Centos8 ~]#cat /etc/redhat-releaseCentOS Linux release 8.1.1911 (Core) [15:35:18 root@Centos8 ~]#lsb_release -aLSB Version: :core-4.1-amd64:core-4.1-noarchDistributor ID: CentOSDescription: CentOS Linux release 8.1.1911 (Core) Release: 8.1.1911Codename: Core#Ubuntu 查看发行版本[15:26:53 liu@ubuntu1804 root]$cat /etc/os-releaseNAME="Ubuntu"VERSION="18.04.4 LTS (Bionic Beaver)"ID=ubuntuID_LIKE=debianPRETTY_NAME="Ubuntu 18.04.4 LTS"VERSION_ID="18.04"HOME_URL="https://www.ubuntu.com/"SUPPORT_URL="https://help.ubuntu.com/"BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"VERSION_CODENAME=bionicUBUNTU_CODENAME=bionic[15:37:36 liu@ubuntu1804 root]$cat /etc/issueUbuntu 18.04.4 LTS \n \l[15:38:09 liu@ubuntu1804 root]$lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescription: Ubuntu 18.04.4 LTSRelease: 18.04Codename: bionic
1.6.3 日期和时间
-
date 显示和设置系统时间
[15:35:22 root@Centos8 ~]#date +%s1584605072[16:04:59 root@Centos8 ~]#date -d @1584605072Thu Mar 19 16:04:32 CST 2020# 时间校准# 以硬件时钟为准,校正系统时钟[16:05:17 root@Centos8 ~]#date 062018302020.50Sat Jun 20 18:30:50 CST 2020[18:30:50 root@Centos8 ~]#dateSat Jun 20 18:30:58 CST 2020[18:30:58 root@Centos8 ~]#clock2020-03-19 16:14:07.816461+08:00[18:31:28 root@Centos8 ~]#clock -s # -s, --hctosys 以硬件时钟为准,校正系统时钟[16:14:55 root@Centos8 ~]#dateThu Mar 19 16:14:58 CST 2020# 以系统时钟为准,校正硬件时钟[16:14:58 root@Centos8 ~]#date 062018302020.50Sat Jun 20 18:30:50 CST 2020[18:30:50 root@Centos8 ~]#clock2020-03-19 16:22:50.445754+08:00[18:31:21 root@Centos8 ~]#clock -w #-w, --systohc 以系统时钟为准,校正硬件时钟[18:31:44 root@Centos8 ~]#clock2020-06-20 18:31:52.009526+08:00
时区:
[16:31:00 root@Centos8 ~]#timedatectl list-timezonesAfrica/AbidjanAfrica/AccraAfrica/Addis_Ababa....#更改时区:[09:47:14 root@Centos8 zoneinfo]#ll /etc/localtimelrwxrwxrwx. 1 root root 35 Mar 19 09:42 /etc/localtime -> ../usr/share/zoneinfo/Europe/Tirane[09:48:13 root@Centos8 zoneinfo]#timedatectl set-timezone Asia/Shanghai
显示日历:
#显示某年cal -y#显示某月[16:52:34 root@Centos8 ~]#cal 9 1752 September 1752 Su Mo Tu We Th Fr Sa 1 2 14 15 1617 18 19 20 21 22 2324 25 26 27 28 29 30#显示某日所在的月份[16:54:00 root@Centos8 ~]#cal 6 4 2020 April 2020 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30
1.6.4 关机和重启
关机:
-
halt
-
poweroff
重启:
reboot
-f: 强制,不调用shutdown
-p: 切断电源
关机或重启:shutdown
shutdown [OPTION]... [TIME] [MESSAGE]
-r: reboot
-h: halt
-c:cancel
TIME:无指定,默认相当于+1(CentOS7)
now: 立刻,相当于+0
+#: 相对时间表示法,几分钟之后;例如 +3
hh:mm: 绝对时间表示,指明具体时间
范例:
[16:57:25 root@Centos8 ~]#shutdown Shutdown scheduled for Thu 2020-03-19 17:13:47 CST, use 'shutdown -c' to cancel.[17:12:47 root@Centos8 ~]#shutdown -c[17:12:55 root@Centos8 ~]#shutdown +10Shutdown scheduled for Thu 2020-03-19 17:23:05 CST, use 'shutdown -c' to cancel.[17:13:05 root@Centos8 ~]#shutdown -c[17:13:15 root@Centos8 ~]#shutdown 02:30Shutdown scheduled for Fri 2020-03-20 02:30:00 CST, use 'shutdown -c' to cancel.[17:13:33 root@Centos8 ~]#shutdown -c
1.6.5 用户登录信息查看命令
-
whoami: 显示当前登录有效用户
-
who: 系统当前所有的登录会话
-
w: 系统当前所有的登录会话及所做的操作
[17:13:40 root@Centos8 ~]#whoamiroot[17:16:04 root@Centos8 ~]#whoroot pts/0 2020-03-19 13:03 (10.0.0.1)[17:16:07 root@Centos8 ~]#whoroot pts/0 2020-03-19 13:03 (10.0.0.1)root tty2 2020-03-19 17:16 (tty2)[17:17:17 root@Centos8 ~]#w 17:18:19 up 4:15, 2 users, load average: 1.39, 0.81, 0.31USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot pts/0 10.0.0.1 13:03 0.00s 0.63s 0.10s wroot tty2 tty2 17:16 4:15m 23.50s 0.06s /usr/libexec/gsd-disk-utilit
1.6.6 输出信息 echo
echo [-neE][字符串]
选项:
-
-E (默认)不支持 \ 解释功能
-
-n 不自动换行
-
-e 启用 \ 字符的解释功能
显示变量
echo "$VAR_NAME” #变量会替换,弱引用echo '$VAR_NAME’ #变量不会替换,强引用[18:19:17 root@Centos8 ~]#name="liu"[18:19:55 root@Centos8 ~]#echo "Who are you? $name"Who are you? liu[18:20:04 root@Centos8 ~]#echo 'Who are you? $name'Who are you? $name
启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出
\a 发出警告声
\b 退格键
\c 最后不加上换行符号
\e escape,相当于\033
\n 换行且光标移至行首
\r 回车,即光标移至行首,但不换行
\t 插入tab
\ 插入\字符
\0nnn 插入nnn(八进制)所代表的ASCII字符
\xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)
1.7 字符集和编码
范例:查看 ascii 表
[17:50:29 root@Centos8 ~]#man ascii
1.8 命令行扩展和被括起来的集合
1.8.1 命令行扩展: $ ()
把一个命令的输出传给另一个命令的参数
$(CMD) 或 `CMD`
范例:
[20:00:18 root@Centos8 ~]#echo "This system'name is $(hostname) "This system'name is Centos8.mashimaro.org [20:01:27 root@Centos8 ~]#echo "i am `whoami`"i am root[20:02:36 root@Centos8 data]#touch $(date +%F).log[20:03:10 root@Centos8 data]#touch `date +%F`.txt[20:03:41 root@Centos8 data]#touch `hostname`-`date +%F`.log[20:05:10 root@Centos8 data]#lltotal 0-rw-r--r--. 1 root root 0 Mar 19 20:02 2020-03-19.log-rw-r--r--. 1 root root 0 Mar 19 20:03 2020-03-19.txt-rw-r--r--. 1 root root 0 Mar 19 20:05 Centos8.mashimaro.org-2020-03-19.log
范例:比较 “ ” ,‘ ’, ``三者区别
[21:02:19 root@Centos8 ~]#echo "echo $HOSTNAME"echo Centos8.mashimaro.org[21:02:42 root@Centos8 ~]#echo 'echo $HOSTNAME'echo $HOSTNAME[21:03:07 root@Centos8 ~]#echo `echo $HOSTNAME`Centos8.mashimaro.org# "" 只能识别变量,弱引用;# '' 不识别变量和命令,强引用;# `` 可以识别变量和命令。
1.8.2 括号扩展: { }
echo file{1,3,5} 结果为:file1 file3 file5rm -f file{1,3,5}echo {1..10}echo {a..z}echo {000..20..2}
[20:18:18 root@Centos8 data]#echo {1..10}1 2 3 4 5 6 7 8 9 10[20:19:15 root@Centos8 data]#echo {000..20..2}000 002 004 006 008 010 012 014 016 018 020[20:19:34 root@Centos8 data]#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
1.10 命令行历史
当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是 ~/.bash_history
history
history [-c] [-d offset] [n]history -anrw [filename]history -ps arg [arg...]
-s: 展开历史参数成一行,附加在历史列表后(加入历史但不执行)
命令历史相关环境变量
-
HISTSIZE:命令历史记录的条数
-
HISTTIMEFORMAT="%F %T `whoami` " 显示时间和用户
-
HISTCONTROL:控制命令历史的记录方式
ignoredups 是默认值,可忽略重复的命令,连续且相同为“重复”
ignorespace 忽略所有以空白开头的命令
ignoreboth 相当于ignoredups, ignorespace的组合
erasedups 删除重复命令
持久保存变量
-
以上变量可以 export 变量名="值" 形式存放在 /etc/profifile 或 ~/.bash_profifile
[21:33:35 root@Centos8 ~]#nano .bash_profile# .bash_profile# Get the aliases and functionsif [ -f ~/.bashrc ]; then . ~/.bashrcfi# User specific environment and startup programsPATH=$PATH:$HOME/binexport PATHexport HISTCONTROL=ignorebothexport HISTTIMEFORMAT="%F %T "
1.11 调用命令行历史
#重复前一个命令方法重复前一个命令使用上方向键,并回车执行按 !! 并回车执行!n 执行history命令输出对应序号n的命令!-n 执行history历史中倒数第n个命令ctrl-r来在命令历史中搜索命令(reverse-i-search)`’:#要重新调用前一个命令中最后一个参数!$ 表示Esc, . 点击Esc键后松开,然后点击 . 键Alt+ . 按住Alt键的同时点击 . 键command !^ 利用上一个命令的第一个参数做command的参数command !$ 利用上一个命令的最后一个参数做command的参数command !* 利用上一个命令的全部参数做command的参数
1.12 bash 的快捷键
Ctrl + l 清屏,相当于clear命令Ctrl + o 执行当前命令,并重新显示本命令Ctrl + s 阻止屏幕输出,锁定Ctrl + q 允许屏幕输出,解锁Ctrl + u 从光标处删除至命令行首Ctrl + k 从光标处删除至命令行尾Ctrl + a 光标移到命令行首,相当于HomeCtrl + e 光标移到命令行尾,相当于EndAlt + r 删除当前整行
2 获得帮助
获取帮助的能力决定了技术的能力!
多层次的帮助
-
whatis
-
command --help
-
man and info
-
/usr/share/doc/
-
Red Hat documentation 、Ubuntu documentation
-
软件项目网站
2.1 whatis
whatis 使用数据库来显示命令的简短描述
刚安装后不可立即使用,需要制作数据库
#CentOS 7 版本以后mandb#CentOS 6 版本之前makewhatis
whatis 和man -f 效果一样
2.2 查看命令的帮助
内部命令:
help COMMAND
man bash
外部命令:
COMMAND --help 或 COMMAND -h(有的不支持-h,如:shutdown)
[root@centos8 ~]#date --helpUsage: date [OPTION]... [+FORMAT]or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]Display the current time in the given FORMAT, or set the system date.[root@centos8 ~]#cal -hUsage:cal [options] [[[day] month] year]cal [options] <timestamp|monthname>[root@centos8 ~]#openssl --helpInvalid command '--help'; type "help" for a list.
2.4 man 命令
man 提供命令帮助的文件,手册页存放在/usr/share/man
man 页面分组为不同的“章节”,统称为Linux手册,man 1 man
-
1:用户命令
-
2:系统调用
-
3:C库调用
-
4:设备文件及特殊文件
-
5:配置文件格式
-
6:游戏
-
7:杂项
-
8:管理类的命令
-
9:Linux 内核API
信息搜索:
/KEYWORD
以KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索;不区分字符大小写
n:下一个
N:上一个
?KEYWORD
以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写
n:跟搜索命令同方向,下一个
N:跟搜索命令反方向,上一个
来源:https://www.cnblogs.com/Mashimaro19/p/12539797.html