Linux从入门
文章目录
linux介绍
什么是Linux
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux发行版本
Linux发行版 (也被叫做 GNU/Linux 发行版) 通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
Linux发行版本又分为稳定版和开发版,两种版本是相互关联,相互循环:
- 稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些bug或加入一些新的驱动程序。
- 开发版:由于要试验各种解决方案,所以变化很快。
Linux的内核是什么?
Linux系统的核心是内核,内核控制着计算机系统上的所有硬件和软件,在有必要时分配硬件,并根据需要时执行软件。
Linux开机启动过程?
- 主机加电自检,加载BIOS硬件信息。
- 读取MBR的引导文件
- 引导Linux内核。
- 运行第一个进程init (进程号永远为1)
- 进入相应的运行级别。
- 运行终端,输入用户名和密码。
Linux系统运行级别
-
关机
-
单用户模式
-
字符界面(不支持网络)
-
字符界面
-
未分配使用
-
图形化界面
-
重启
命令行操作
命令基本用法
Linux命令格式:
command [-options] [parameter1] …
command:命令名称
[-options]:选项,可以用来对命令进行控制,也可以省略,[]代表可选
parameter1:传给命令的参数:可以是零个一个或多个。
什么是shell
shell也被称为Linux命令的解释器
查看系统默认shell
echo $BASH
查看系统各个版本shell
[root@localhost ~]#cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
更改命令终端颜色
登录Linux后,默认的系统命令提示符没有个性,无法明显辨别生产和测试环境,而导致错误。
可以通过修改PS1变量实现个性提示符格式,避免命令输错终端错误。
默认的提示符
#Centos默认提示符
[root@localhost ~]#
#Ubuntn默认提示符
[yyc@localhost ~]$
@符合前root 代表时当前登录用户
localhost 代表显示系统名称前几位
~ 代表用户在家目录
# 代表是管理员账号 $代表是普通账户
Centos7以上版本设置
# 默认
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
# 实例
[root@localhost ~]#PS1="\[\e[1;35m\][\u@\h \w]\\$\[\e[0m\]"
#永久保存
echo PS1="\[\e[1;35m\][\u@\hw \w]\\$\[\e[0m\]" > /etc/profile.d/test.sh
#提示 [\e[1;35m\] 35为紫色 可进行更改
[root@localhost ~]#echo $PS1
\[\e[1;35m\][\u@\h \w]\$\[\e[0m\]
# 命令行彩色并显示时间模板
[15:04:41 root@Centos8-2 ~]#PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \w\[\e[1;32m\]]\[\e[0m\]\\$"
创建登录提示文件
vi /etc/motd
// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O\ = /O //
// ____/`---'\____ //
// .' \\| |// `. //
// / \\||| : |||// \ //
// / _||||| -:- |||||- \ //
// | | \\\ - /// | | //
// | \_| ''\---/'' | | //
// \ .-\__ `-` ___/-. / //
// ___`. .' /--.--\ `. . ___ //
// ."" '< `.___\_<|>_/___.' >'"". //
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
// \ \ `-. \_ __\ /__ _/ .-` / / //
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永不宕机 永无BUG //
查看帮助文档
help
一般是linux命令自带的帮助信息
如:ls --help
man(manual)
man是linux提供的一个手册,包含了绝大部分的命令、函数使用说明
该手册分成很多章节(section),使用man时可以指定不同的章节来浏览。
例:man ls ; man 2 printf
man中各个section意义如下:
- Standard commands(标准命令)
- System calls(系统调用,如open,write)
- Library functions(库函数,如printf,fopen)
- Special devices(设备文件的说明,/dev下各种设备)
- File formats(文件格式,如passwd)
- Games and toys(游戏和娱乐)
- Miscellaneous(杂项、惯例与协定等,例如Linux档案系统、网络协定、ASCII 码;environ全局变量)
- Administrative Commands(管理员命令,如ifconfig)
man是按照手册的章节号的顺序进行搜索的。
man设置了如下的功能键:
功能键 | 功能 |
---|---|
空格键 | 显示手册页的下一屏 |
Enter键 | 一次滚动手册页的一行 |
b | 回滚一屏 |
f | 前滚一屏 |
q | 退出man命令 |
h | 列出所有功能键 |
/word | 搜索word字符串 |
注意:实际上,我们不用指定第几个章节也用查看,如,man ls
Linux命令小技巧
设置主机名
# 临时生效
hostname testname
# 永久生效
hostnamectl set-hostname testname
注意:修改主机名只可以使用 字母 数字 和横线。
有些软件对主机名有特殊要求
命令为什么要永久生效
临时生效是保存在运行内存,当系统断电或重启命令会失效,
永久保存相当于把这条命令写到了系统文件中重启完系统不会失效。
tab键自动补全
在敲出命令的前几个字母的同时,按下tab键,系统会自动帮我们补全命令。
history游览历史命令
当系统执行过一些命令后,可按上下键翻看以前的命令,history将执行过的命令列举出来
history保留了最近执行的命令记录,默认可以保留1000。
历史清单从0开始编号到最大值。
常见用法:
history N 显示最近N条命令
history -c 清除所有的历史记录
history -w xxx.txt 保存历史记录到文本xxx.txt
命令行中的ctrl组合键
-
Ctrl+c 结束正在运行的程序
-
Ctrl+d 结束输入或退出shell
-
Ctrl+s 暂停屏幕输出【锁住终端】
-
Ctrl+q 恢复屏幕输出【解锁终端】
-
Ctrl+l 清屏,【是字母L的小写】等同于Clear
-
当前光标到行首:ctrl+a
-
当前光标到行尾:ctrl+e
-
删除当前光标到行首:ctrl+u
-
删除当前光标到行尾:ctrl+k
-
Ctrl+y 在光标处粘贴剪切的内容
-
Ctrl+r 查找历史命令【输入关键字,就能调出以前执行过的命令】
-
Ctrl+t 调换光标所在处与其之前字符位置,并把光标移到下个字符
-
Ctrl+x+u 撤销操作
-
Ctrl+z 转入后台运行
Linux命令
执行命令过程
输入命令后回车,shell程序找到输入命令对应可执行程序或代码,其由分析后提交给内核分配资源并其运行起来。
shell中可执行的两类命令
内部命令:由系统shell自带的,而且通过某命令形式来提供,用户登录后自动加载和常驻在内存中。
外部命令:在系统文件路径下有对应的可执行程序文件,当执行命令时才从磁盘加载到内存中,执行完毕并从内存中删除。
区别命令时内部和外部命令
type 命令
内部命令
[root@localhost ~]#type cd
cd 是 shell 内嵌
外部命令 后面出现路径就是外部命令
[root@localhost ~]#type ssh
ssh 是 /usr/bin/ssh
# 存放外部命令的路径
[root@localhost ~]#echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]#type -a echo
echo 是 shell 内嵌
echo 是 /usr/bin/echo
# echo 是内部命令命令也是外部命令 内部命令执行优先级高
echo 有内部命令命令了,为什么还要有个外部命令?
echo命令比较重要,本终端有不代表别的终端有echo命令
hash缓存表
系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到改命令执行并记录到hash表中,当再次使用该命令时,shell解释器会先查看hash表,存在将执行,如果不存在将会从PATH路径下去寻找,利用hash缓存表可大大提升外部命令调用速率。
- hash 显示hash缓存
- hash -d name 清楚name缓存
- hash -r 清楚全部hash缓存
命令别名
对于经常执行较长的命令,可以将其定义较短或比较容易记住的单词,以方便执行。
# 显示当前shell进程所有可用的命令别称
alias
范例:
alias ho='hostname'
# ho是别名
# hostname是命令
# 扫描新加的磁盘
alias scandisk="echo '- - -' > /sys/class/scsi_host/host0/scan;echo '- - -' > /sys/class/scsi_host/host1/scan;echo '- - -' > /sys/class/scsi_host/host2/scan"
删除别名
ualias [别名]
注意:在命令行中定义别名,仅对当前shell进程有效。
如果想永久有效,要定义在配置文件中
- 仅对当前用户:~/.bashrc
- 对所有用户有效:/etc/bashrc
编辑配置给出的新配置不会立即生效,bash需要重新读取配置文件。
source /etc/bashrc
suorce .bashrc
别名与原始命令重复的话,别名优先级高,想使用原始命令的话,加上单引号。‘cd’
常见硬件信息命令
查看CPU
lscpu命令可以查看CPU信息
cat /proc/cpuinfo 也可以查看到
[20:20:49 root@yyc ~]#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: 85
Model name: Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz
Stepping: 5
CPU MHz: 2499.990
BogoMIPS: 4999.98
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 4096K
L3 cache: 36608K
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 rep_good nopl 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 fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat avx512_vnni
[20:21:40 root@yyc ~]#cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 85
model name : Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz
stepping : 5
microcode : 0x1
cpu MHz : 2499.990
cache size : 36608 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
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 rep_good nopl 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 fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat avx512_vnni
bogomips : 4999.98
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 85
model name : Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz
stepping : 5
microcode : 0x1
cpu MHz : 2499.990
cache size : 36608 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
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 rep_good nopl 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 fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat avx512_vnni
bogomips : 4999.98
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical, 48 bits virtual
power management:
查看内存
free 查看内存状态
[20:37:32 root@yyc ~]#free -h
total used free shared buff/cache available
Mem: 3.7G 206M 2.2G 556K 1.3G 3.2G
Swap: 0B 0B 0B
[20:39:31 root@yyc ~]#cat /proc/meminfo
MemTotal: 3880176 kB
MemFree: 2324484 kB
MemAvailable: 3403876 kB
Buffers: 102652 kB
Cached: 1136100 kB
SwapCached: 0 kB
Active: 698468 kB
Inactive: 644276 kB
Active(anon): 112940 kB
Inactive(anon): 268 kB
Active(file): 585528 kB
Inactive(file): 644008 kB
Unevictable: 10356 kB
Mlocked: 10356 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 104 kB
Writeback: 0 kB
AnonPages: 114160 kB
Mapped: 51968 kB
Shmem: 556 kB
Slab: 122900 kB
SReclaimable: 109036 kB
SUnreclaim: 13864 kB
KernelStack: 2448 kB
PageTables: 5056 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1940088 kB
Committed_AS: 818732 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 12832 kB
VmallocChunk: 34359720444 kB
Percpu: 328 kB
HardwareCorrupted: 0 kB
AnonHugePages: 28672 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 67448 kB
DirectMap2M: 3078144 kB
DirectMap1G: 3145728 kB
查看硬盘和分区情况
[20:39:38 root@yyc ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 159.1M 0 rom
vda 253:0 0 60G 0 disk
└─vda1 253:1 0 60G 0 part /
[20:40:57 root@yyc ~]#cat /proc/partitions
major minor #blocks name
253 0 62914560 vda
253 1 62913519 vda1
11 0 162906 sr0
常见系统信息命令
# 查看系统架构
[21:02:18 root@yyc ~]#arch
x86_64
# 查看发行版本
[21:01:02 root@yyc ~]#cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[21:13:18 root@yyc ~]#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
# ubuntu 查询系统发行版本
root@ubuntu:~# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.6 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.6 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=bionic
UBUNTU_CODENAME=bionic
# 查看内核版本
[21:02:14 root@yyc ~]#uname -r
3.10.0-1160.45.1.el7.x86_64
root@ubuntu:~# arch
x86_64
日期和时间
Linux的两种时钟
- 系统时钟:由Linux内核通过CPU的工作频率进行的
- 硬件时钟:主板
相关命令
date 显示和设置系统时间
范例:
[root@localhost ~]#date
2022年 04月 14日 星期四 20:05:21 CST
clock,hwclock:显示硬件时钟
[root@localhost ~]#clock
2022年04月14日 星期四 20时05分47秒 -0.399473 秒
root@yyc:~# hwclock
2022-04-14 20:06:10.798917+08:00
-s #以硬件时钟为准,效正系统时间
-w #以系统时钟为准,效正硬件时间
时区
timedatectl 默认查看时区
[root@localhost ~]#timedatectl
Local time: 四 2022-04-14 20:10:43 CST
Universal time: 四 2022-04-14 12:10:43 UTC
RTC time: 四 2022-04-14 12:10:43
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
# 修改时区
[root@VM-20-12-centos ~]# timedatectl set-timezone Asia/Shanghai
[root@VM-20-12-centos ~]# ll /etc/localtime
lrwxrwxrwx. 1 root root 35 Mar 7 2019 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
关机和重启
关机命令
- init 0
- poweroff
重启命令
- init6
- reboot
用户登录信息查看命令
- whoami:显示当前登录的用户
- who:系统当前的所有登录会话
- w:系统当前所有的登录会话及所做的操作