文章目录
修改主机名
# 临时生效
hostname HOST-NAME
# 持久生效,支持 Centos 7 以上版本,支持 Ubuntu , 持久生效被写入到了 /etc/hostname
hostnamectl set-hostname shanghai.centos79.node44.128.study.local
cat /etc/hostname
# shanghai.centos79.node44.128.study.local
注意:
- 主机名不支持下划线
- 某些软件对主机名会有特殊的要求,需要注意
命令提示符 prompt
登录Linux后,默认的系统命令提示符毫无没有个性,无法明显辨别生产和测试环境,而导致误操作。
可以通过修改PS1变量实现个性的提示符格式,避免这种低级错误。
默认提示符格式:
# CentOS默认提示符 [当前用户@hostname最前面一个单词 当前所在目录](#表示root | $表示普通用户)
[xingmu@shanghai ~]$
# Ubuntu默认提示符 当前用户@hostname最前面一个单词:当前所在目录(#表示root | $表示普通用户)
xingmu@ubuntu1804:~$
# 查看默认提示符配置
[xingmu@shanghai ~]$ echo $PS1
# [\u@\h \W]\$
# 修改提示符格式, 这是个带闪烁的效果,可以自行尝试
[xingmu@shanghai ~]$ PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]"
\[\e[1;5;41;33m
:这里表示高亮,5表示闪烁,41是背景色,33是前景色
\[\e[0m\
: 表示颜色终止
提示符格式说明:
- \e 控制符\033
- \u 当前用户
- \h 主机名简称
- \H 主机名
- \w 当前工作目录
- \W 当前工作目录基名
- \t 24小时时间格式
- \T 12小时时间格式
- ! 命令历史数
- # 开机后命令历史数
# centos 设置永久生效
[xingmu@shanghai ~]$ echo 'PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"' > /etc/profile.d/env.sh
# ubuntu 设置永久生效
[xingmu@shanghai ~]$ echo "PS1='\[\e[1;35m\][\u@\h \W]\\$\[\e[0m\]'" >> .bashrc
关于命令
命令的类型
linux
中的命令分为内部命令和外部命令
- 内部命令由shell自带的,而且通过某命令形式提供,存在于
/bin/bash
文件中 ,用户登录后自动加载并常驻内存中。 - 外部命令在文件系统路径下有对应的可执行程序文件,每个外部命令都有对应的文件,当执行命令时才从磁盘加载至内存中,执行完毕后从内存中删除。
通过type COMMAND
可以查看命令的类型。
type docker
# docker is /usr/bin/docker
type cd
# cd is a shell builtin
管理内部命令
help 内部命令列表, enable 管理内部命令
enable
查看所有的内部命令,enable | wc -l
输出内部命令的个数enable cmd
启用内部命令enable –n cmd
禁用内部命令enable –n
查看所有禁用的内部命令
外部命令的执行
系统初始hash
表为空,当外部命令执行时,默认会从PATH
路径下寻找该命令,找到后会将这条命令的
路径记录到hash
表中,当再次使用该命令时,shell
解释器首先会查看hash
表,存在将执行之,如果不
存在,将会去PATH
路径下寻找,利用hash
缓存表可大大提高命令的调用速率。
hash 命令常见用法
hash
显示hash缓存hash -l
显示hash缓存,可作为输入使用hash -p path name
将命令全路径path起别名为namehash -t name
打印缓存中name的路径hash -d name
清除name缓存hash -r
清除缓存
命令的别名
对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行
显示当前shell进程所有可用的命令别名。
alias
定义别名NAME
,其相当于执行命令VALUE
,alias NAME='VALUE'
,
撤消别名:unalias
unalias [-a] name [name ...]
unalias -a #取消所有别名
注意:在命令行中定义的别名,仅对当前shell进程有效
如果想永久有效,要定义在配置文件中
- 仅对当前用户:
~/.bashrc
- 对所有用户有效:
/etc/bashrc
编辑配置给出的新配置不会立即生效,bash进程重新读取配置文件
source /path/to/config_file
# 或者
. /path/to/config_file
如果别名同原命令同名,如果要执行原命令,可以这么使用。
\ALIASNAME
“ALIASNAME”
‘ALIASNAME’
command ALIASNAME
/path/commmand #只适用于外部命令
echo命令
echo [SHORT-OPTIONS]... [STRING]...
-
-n
: 不换行[xingmu@shanghai ~]$ echo "hello shell" hello shell [xingmu@shanghai ~]$ echo -n "hello shell" hello shell[xingmu@shanghai ~]$
-
-e
: 让转义符生效\n
换行\t
制表符等- \a 发出警告声
- \b 退格键
- \c 最后不加上换行符号
- \e escape,相当于\033
- \n 换行且光标移至行首
- \r 回车,即光标移至行首,但不换行
- \t 插入tab
- \ 插入\字符
- \0nnn 插入nnn(八进制)所代表的ASCII字符
- \xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)
[xingmu@shanghai ~]$ echo "hello \nshell" hello \nshell [xingmu@shanghai ~]$ echo -e "hello \nshell" hello shell
echo 高级用法
在终端中,ANSI定义了用于屏幕显示的Escape屏幕控制码
具有颜色的字符,其格式如下:
# 输出带有颜色的文字;\033[字符背景颜色;字体颜色m字符串\033[0m
[xingmu@shanghai ~]$ echo -e '\e[1;41;32msfdsdf\e[0m'
# \033[40m -- \033[47m 设置背景色
#字符背景颜色范围: 40--47
40:黑
41:红
42:绿
43:黄
44:蓝
45:紫
46:深绿
47:白色
# \033[30m -- \033[37m 设置前景色
#字体颜色: 30--37
30: 黑
31: 红
32: 绿
33: 黄
34: 蓝
35: 紫
36: 深绿
37: 白色
加颜色只是以下控制码中的一种,下面是常见的一些ANSI控制码:
\033[0m 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n列
\033[nD 光标左移n列
\033[x;yH 设置光标位置x行y列
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标
\033[2J\033[0;0H 清屏且将光标置顶
ls:
list , 列出指定目录下的内容 ls [OPTIONS] [file]
-
-a
: 显示所有文件,包括隐藏文件 -
-A
: 显示除. 和 …之外的所有文件 -
-h
:--human-readable
,对文件大小进行单位换算,换算后的结果可能是非精确值 -
-u
配合-t
选项,显示并按atime从新到旧排序 -
-t
按mtime排序 -
-S
按从大到小排序 -
-ld
目录和符号链接信息 -
-1
文件分行显示 -
-d
: 查看目录自身属性,而非其内部的文件列表,ls -ld /opt
查看opt自身的属性 -
-r
: reverse,逆序显示 -
-R
: recursive,递归显示子文件夹及孙子文件夹 -
-l
: --long,长格式列表,即显示文件的详细属性 -
-X
按文件后缀排序 -
-U
按目录存放顺序显示drwxr-xr-x 1 root root 4096 4月 1 08:46 share
属性 说明 d 文件类型, -
(常规文件即f)d
(directory目录文件)b
(block块设备文件)c
(character device字符设备文件)l
(symbolic link 符号链接文件)s
(socket,套接字文件)p
(pipe,命名管道文件)rwxr-xr-x rwx: 文件属主的权限
r-x:文件属组的权限
r-x:其他用户(非属主、属组)的全新1 数字表示文件被硬链接的次数 root 文件的属主 root 文件的属组 4096 文件的大小 4月 1 08:46 文件最后一次被修改的时间 share 文件名
# 文件分行显示
[xingmu@shanghai ~]$ ls -1
2022-04-09.log
Desktop
Documents
Downloads
Music
Pictures
Public
shanghai.centos79.node44.128.study.local-2022-04-09.log
Templates
tt
Videos
cd
change directory
# 切换回家目录
cd ~
# 切换到指定用户的家目录
cd ~USERNAME
# 在上一次所在目录和当前目录之间来回切换,这个命令其实是在读取两个变量$PWD和$OLDPWD
cd -
# 涉及到的环境变量
echo $PWD # 当前工作目录
echo $OLDPWD # 上一次的工作目录
关机或重启命令shutdown
shutdown [OPTIONS...] [TIME] [WALL...]
时间字符串可以采用格式hh:mm
表示小时/分钟,指定执行关闭时的时间,指定24小时时钟格式。 或者,它可以是语法+m
,指的是从现在开始的指定分钟数。now
是+0
的别名,即用于触发立即关闭。 如果未指定时间参数,则暗示为+1
。
请注意,要指定
WALL
消息,必须指定时间参数。
如果使用time
参数,则在系统关闭前5分钟创建/run/nologin
文件以确保系统不再允许登录。
-h
: halt / poweroff-r
: reboot-c
: cancel
## 五分钟后重启
shutdown -r +5 "五分钟后将要重启"
## 指定时间点重启
shutdown -r 20:30
也可以直接使用下面的命令:
poweroff
reboot
## centos7
systemctl poweroff
systemctl reboot
命令行扩展和被括起来的集合
命令行扩展:`` 和 $()
把一个命令的输出打印给另一个命令的参数,放在``中的一定是有输出信息的命令
$(COMMAND) 或 `COMMAND`
范例:比较 “ ” ,‘ ’, ``三者区别
- 单引号:强引用,六亲不认,变量和命令都不识别,都当成了普通的字符串
- 双引号:弱引用,不能识别命令,可以识别变量
- 反向单引号:里面的内容必须是能执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交给调用反向单引号的命令继续, “是个大聪明”
[xingmu@shanghai tt]$ echo "This name is $(hostname)"
This name is shanghai.centos79.node44.128.study.local
[xingmu@shanghai tt]$ echo "I am `whoami`"
I am xingmu
[xingmu@shanghai tt]$ touch $(date +%F).log
[xingmu@shanghai tt]$ ll
total 0
-rw-rw-r--. 1 xingmu xingmu 0 Apr 9 12:06 2022-04-09.log
[xingmu@shanghai tt]$ touch `hostname`-`date +%F`.log
[xingmu@shanghai tt]$ ll
total 0
-rw-rw-r--. 1 xingmu xingmu 0 Apr 9 12:06 2022-04-09.log
-rw-rw-r--. 1 xingmu xingmu 0 Apr 9 12:06 shanghai.centos79.node44.128.study.local-2022-04-09.log
[xingmu@shanghai tt]$ touch `date +%F_%H-%M-%S`.log
[xingmu@shanghai tt]$ touch `date -d '-1 day' +%F`.log
[xingmu@shanghai tt]$ ls
2022-04-08.log 2022-04-09.log
2022-04-09_12-06-53.log shanghai.centos79.node44.128.study.local-2022-04-09.log
范例:$( ) 和 ``
[xingmu@shanghai tt]$ ll `echo `date +%F`.log`
bash: .log: command not found...
ls: cannot access date: No such file or directory
ls: cannot access +%F: No such file or directory
[xingmu@shanghai tt]$ ll $(echo $(date +%F).log)
-rw-rw-r--. 1 xingmu xingmu 0 Apr 9 12:06 2022-04-09.log
[xingmu@shanghai tt]$ ll `echo $(date +%F).log`
-rw-rw-r--. 1 xingmu xingmu 0 Apr 9 12:06 2022-04-09.log
[xingmu@shanghai tt]$ ll $(echo `date +%F`.txt)
ls: cannot access 2022-04-09.txt: No such file or directory
编辑命令的快捷
ctrl + a
: 跳转到命令行首ctrl + e
: 跳转到命令行尾ctrl + u
: 删除行首至光标处的所有字符ctrl + k
: 删除光标位置到行尾的所有字符ctrl + l
: 清屏Ctrl + f
光标向右移动一个字符Ctrl + b
光标向左移动一个字符Alt + r
删除当前整行Ctrl + w
从光标处向左删除至单词首Alt + d
从光标处向右删除至单词尾
Ctrl + c 终止命令
Ctrl + z 挂起命令
Ctrl + xx 光标在命令行首和光标之间移动
Alt + f 光标向右移动一个单词尾
Alt + b 光标向左移动一个单词首
Alt + Backspace 删除左边单词
Ctrl + d 删除光标处的一个字符
Ctrl + h 删除光标前的一个字符
Ctrl + y 将删除的字符粘贴至光标后
Alt + c 从光标处开始向右更改为首字母大写的单词
Alt + u 从光标处开始,将右边一个单词更改为大写
Alt + l 从光标处开始,将右边一个单词更改为小写
Ctrl + t 交换光标处和之前的字符位置
Alt + t 交换光标处和之前的单词位置
Alt + # 提示输入指定字符后,重复显示该字符#次
常见命令
查看硬件信息
查看 CPU
lscpu
命令可以查看cpu
信息,cat /proc/cpuinfo
也可看查看到。
xingmu@shanghai ~ ]$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 142
Model name: Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz
Stepping: 9
CPU MHz: 2904.003
BogoMIPS: 5808.00
Hypervisor vendor: VMware
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 4096K
NUMA node0 CPU(s): 0,1
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 arat md_clear spec_ctrl intel_stibp flush_l1d arch_capabilities
xingmu@shanghai ~ ]$ cat /proc/cpuinfo
查看内存大小
free
命令可以查看内存信息,cat /proc/meminfo
也可看查看到。
xingmu@shanghai ~ ]$ free
total used free shared buff/cache available
Mem: 2027896 817448 168828 33024 1041620 1009384
Swap: 2097148 264 2096884
xingmu@shanghai ~ ]$ cat /proc/meminfo
MemTotal: 2027896 kB
MemFree: 168836 kB
MemAvailable: 1009412 kB
Buffers: 264 kB
Cached: 968756 kB
SwapCached: 0 kB
Active: 1040588 kB
Inactive: 445508 kB
Active(anon): 447436 kB
Inactive(anon): 102664 kB
Active(file): 593152 kB
Inactive(file): 342844 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2096884 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 517144 kB
Mapped: 162692 kB
Shmem: 33024 kB
Slab: 139404 kB
SReclaimable: 72620 kB
SUnreclaim: 66784 kB
KernelStack: 9904 kB
PageTables: 35704 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 3111096 kB
Committed_AS: 4003312 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 216404 kB
VmallocChunk: 34359277564 kB
Percpu: 56320 kB
HardwareCorrupted: 0 kB
AnonHugePages: 188416 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 128896 kB
DirectMap2M: 1968128 kB
DirectMap1G: 0 kB
查看硬盘和分区情况
lsblk
命令可以查看内存信息,cat /proc/partitions
也可看查看到。
[xingmu@shanghai ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 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 2G 0 part [SWAP]
sr0 11:0 1 9.5G 0 rom /run/media/xingmu/CentOS 7 x86_64
[xingmu@shanghai ~]$ cat /proc/partitions
major minor #blocks name
11 0 9961472 sr0
8 0 209715200 sda
8 1 1048576 sda1
8 2 104857600 sda2
8 3 52428800 sda3
8 4 1 sda4
8 5 2097152 sda5
查看系统版本信息
查看系统架构
[xingmu@shanghai ~]$ arch
x86_64
查看内核版本
[xingmu@shanghai ~]$ uname -r
3.10.0-1160.el7.x86_64
查看操作系统发行版本
[xingmu@shanghai ~]$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
也可以使用lsb_release
查看,centos
如果没有这个命令,可以通过sudo yum install redhat-lsb-core
安装。
[xingmu@shanghai ~]$ lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.9.2009 (Core)
Release: 7.9.2009
Codename: Core
[xingmu@shanghai ~]$ lsb_release -cs
Core
[xingmu@shanghai ~]$ lsb_release -is
CentOS
[xingmu@shanghai ~]$ lsb_release -rs
7.9.2009
用户登录信息查看命令
whoami: 显示当前登录有效用户
who: 系统当前所有的登录会话
w: 系统当前所有的登录会话及所做的操作
which
显示命令的别名和完整路径,如果不想显示别名,可以使用--skip-alias
跳过。
which docker
#/usr/bin/docker
which ls
#alias ls='ls --color=auto'
# /usr/bin/ls
which ls --skip-alias
#/usr/bin/ls
whereis
可以显示命令的完整路径、源代码路径(如果存在)和使用手册路径。
-b
仅返回命令完整路径-m
仅返回使用手册路径
whereis ls
# ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
whereis -b ls
# ls: /usr/bin/ls
whereis -m ls
# ls: /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
who
用于查看当前登录系统的用户列表。
-b
显示系统最近一次的启动时间-u
显示谁登录的系统-r
系统的运行级别
who
#vagrant pts/0 2020-06-01 15:21 (10.0.2.2)
#vagrant pts/1 2020-06-01 15:39 (10.0.2.2)
who -b
# system boot 2020-06-01 15:20
who -ub
# system boot 2020-06-01 15:20
#vagrant pts/0 2020-06-01 15:21 00:01 6055 (10.0.2.2)
#vagrant pts/1 2020-06-01 15:39 . 6130 (10.0.2.2)
who -r
# run-level 3 2020-06-01 15:21
who -rub
# system boot 2020-06-01 15:20
# run-level 3 2020-06-01 15:21
#vagrant pts/0 2020-06-01 15:21 00:01 6055 (10.0.2.2)
#vagrant pts/1 2020-06-01 15:39 . 6130 (10.0.2.2)
w
增强的who
命令,可以显示当前登录用户及用户的状态。
w
# 15:39:54 up 19 min, 2 users, load average: 0.00, 0.02, 0.05
#USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
#vagrant pts/0 10.0.2.2 15:21 18.00s 0.04s 0.04s -bash
#vagrant pts/1 10.0.2.2 15:39 2.00s 0.04s 0.02s w