linux基础和帮助-1
1.1用户类型
root 用户:
一个特殊的管理帐户,也被称为超级用户 root已接近完整的系统控制 对系统损害几乎有无限的能力 注:除非必要,不要登录为 root 普通( 非特权 )用户 权限有限 造成损害的能力比较有限 1.2 终端 terminal 设备终端:键盘、鼠标、显示器 终端类型 控制台终端: /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远程连接 查看当前的终端设备:使用命令 tty 1.3 交互式接口 交互式接口:启动终端后,在终端设备附加一个交互式应用程序 GUI:Graphic User Interface X protocol, window manager, desktop Desktop: GNOME (C, 图形库gtk), KDE (C++,图形库qt) XFCE (轻量级桌面) CLI:Command Line Interface shell程序 1.3.2 什么是shellshell是linux系统的用户界面,提供了用户与内核的交互操作的一种接口,它接受用户输入的指令交给内核去执行
shell也被称作Linux的命令解释器(command interpreter),shell本身就是一个程序,将用户输入的命令拆解为“命令名”与参数,紧接着,根据命令名找到对应要执行的程序,对被执行的程序进行初始化,然后将刚才解析出来的参数传给程序执行
shell是一种高级程序设计语言,提供了函数,变量,条件判断,循环等开发语言的功能
由于shell本身就是一种程序,所以他可以被任何用户自己开发的各种shell所替代
各种shell:如下图
sh:Steve Bourne
bash:Bourne-Again Shell,GPL,CentOS 和 Ubuntu 默认使用
csh:c shell , C 语言风格 tcsh ksh :Korn Shell, AIX 默认 shell zsh: MacOS默认shell 显示当前使用的shell :echo ${SHELL} 显示当前系统使用的所有shell :cat /etc/shells1.4 设置主机名
hostname NAME
例给:主机起名为Lisa:
[root@localhost ~]#hostname Lisa 注意:主机名不要使用下划线,但支持横线、数字 # 管理员 $ 普通用户 显示提示符格式[root@Lisa ~]# echo $PS1
[\u@\h \W]\$
修改提示符格式范例 PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]" PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"提示符格式说明:
在Linux中,PS1是一个全局变量,查看PS1的格式如:注意$后面有一个空格!如果没有空格的话,将会报错!
\d :代表日期,格式为weekday month date,例如:"Mon Aug 1" \H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux \h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略 \t :显示时间为24小时格式,如:HH:MM:SS \T :显示时间为12小时格式 \A :显示时间为24小时格式:HH:MM \u :当前用户的账号名称 \v :BASH的版本信息 \w :完整的工作目录名称。家目录会以 ~代替 \W :利用basename取得工作目录名称,所以只会列出最后一个目录 # :下达的第几个命令 $ :提示字符,如果是root时,提示符为:# ,普通用户则为: \e 控制符\033 ! 命令历史数 # 开机后命令历史数 范例:持久保存提示符格式相关变量 PS1 vim /etc/profile.d/env.sh echo 'PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"'退出重新登录终端
1.5 执行命令
1.5.1 执行命令过程 输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来 1.5.2 shell中可执行的两类命令 内部命令:由shell自带的,而且通过某命令形式提供、用户登录的时候就已经加载到了bash中所以执行速度比外部快(也就是在内存里面) 外部命令:在文件系统路径下有对应的可执行程序文件、存放在独立的磁盘文件中。而外部命令需要在PATH变量中一个一个的找所以执行速度比内部命令慢。并且在PATH变量中由左至右第一个找到之后就不会往后找了。例子:
语法:type COMMAND
[root@Lisa ~]# type -a echo
echo 是 shell 内嵌
echo 是 /usr/bin/echo
注:因为echo这个命令他是自带在bash shell类型中所以他是 bash shell的内部命令、但是担心以后我们换了shell类型怕不能使用echo命令、所以echo是内部命令的同时也是外部命令。1.5.2 内部命令相关
help 内部命令列表 enable 管理内部命令 enable cmd 启用内部命令 enable –n cmd 禁用内部命令 enable –n 查看所有禁用的内部命令 查看外部命令路径: which 命令是根据PATH路径来找。 如下列我们将yes这个命令 拷贝到sbin中、所以在下次通过which来查看就是先查找的sbin下的yes[root@Lisa ~]# which yes
/usr/sbin/yes
[root@Lisa ~]# cp /usr/bin/yes /usr/sbin/
[root@Lisa ~]# which yes
/usr/sbin/yes
Hash缓存表 系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的 路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不 存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率 hash 命令常见用法 hash 显示hash缓存 hash -l 显示hash缓存,可作为输入使用 hash -p path name 将命令全路径path起别名为name hash -t name 打印缓存中name的路径 hash -d name 清除name缓存 hash -r 清除缓存 1.5.3 命令别名 对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行显示当前shell进程所有可用的命令别名 显示当前shell进程所有可用的命令别名 案例
[root@Lisa ~]# echo "alias free='free -h'" >> .bashrc
[root@Lisa ~]# source .bashrc
如果想永久有效,要定义在配置文件中 仅对当前用户:~/.bashrc 对所有用户有效:/etc/bashrc 撤销别名:unalias unalias [-a] name [name ...] unalias -a #取消所有别名 如果别名和原命令同名,可以使用 \ALIASNAME “ALIASNAME” ‘ALIASNAME’ command ALIASNAME /path/commmand #只适用于外部命令 命令执行逻辑: 1. 内部 2. hash 3. $PATH 4. commad not found 1.5.4 命令格式 COMMAND [OPTIONS...] [ARGUMENTS...] COMMAND COMMAND COMMAND ...... 选项:用于启用或关闭命令的某个或某些功能 短选项:UNIX 风格选项,-c 例如:-l, -h 长选项:GNU风格选项,--word 例如:--all, --human BSD风格选项: 一个字母,例如:a,使用相对较少 参数:命令的作用对象,比如:文件名,用户名等 例:[root@Lisa ~]# id -u tests
1000
[root@Lisa ~]#free -h [root@Lisa ~]#free --human注意:
多个选项以及多参数和命令之间使用空白字符分隔 取消和结束命令执行:Ctrl+c,Ctrl+d 多个命令可以用 ";" 符号分开 一个命令可以用\分成多行 1.6 常见命令 1.6.1 查看硬件信息 lscpu命令可以查看cpu信息或者cat /proc/cpuinfo也可看查看到 详情: Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 8 #CPU核心数 On-line CPU(s) list: 0-7 Thread(s) per core: 1 #每个core 有几个线程 Core(s) per socket: 4 #每个槽位有4个core Socket(s): 2 #服务器面板上有2个cpu 槽位 NUMA node(s): 2 #nodes的数量 Vendor ID: GenuineIntel CPU family: 6 Model: 44 Stepping: 2 CPU MHz: 2128.025 BogoMIPS: 4256.03 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 8192K NUMA node0 CPU(s): 0,2,4,6 #对应的core NUMA node1 CPU(s): 1,3,5,7 #也可以通过查看/proc/cpuinfo文件,该文件中查看的CPU内容更加详细清晰查看内存大小
[root@Lisa ~]# free -h
total used free shared buff/cache available
Mem: 3.7G 298M 3.2G 19M 196M 3.2G
Swap: 3.9G 0B 3.9G
[root@centos8 ~]#cat /proc/meminfo
MemTotal: 816188 kB MemFree: 412780 kB MemAvailable: 527144 kB Buffers: 5304 kB Cached: 208252 kB SwapCached: 0 kB Active: 138976 kB Inactive: 127508 kB Active(anon): 53348 kB Inactive(anon): 5368 kB Active(file): 85628 kB Inactive(file): 122140 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 2097148 kB SwapFree: 2097148 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 52964 kB Mapped: 78456 kB Shmem: 5792 kB KReclaimable: 33084 kB Slab: 69144 kB SReclaimable: 33084 kB SUnreclaim: 36060 kB KernelStack: 4428 kB PageTables: 5888 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 2505240 kB Committed_AS: 250040 kB VmallocTotal: 34359738367 kB VmallocUsed: 0 kB VmallocChunk: 0 kB HardwareCorrupted: 0 kB AnonHugePages: 6144 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB DirectMap4k: 108416 kB DirectMap2M: 940032 kB DirectMap1G: 0 kB 查看硬盘和分区情况[root@Lisa ~]# cat /proc/meminfo lsblk^C
[root@Lisa ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 1G 0 part /boot└─sda2 8:2 0 59G 0 part ├─centos-root 253:0 0 37G 0 lvm / ├─centos-swap 253:1 0 3.9G 0 lvm [SWAP] └─centos-home 253:2 0 18.1G 0 lvm /home sr0 11:0 1 4.4G 0 rom[root@Lisa ~]# cat /proc/partitions
major minor #blocks name 8 0 62914560 sda 8 1 1048576 sda1 8 2 61864960 sda2 11 0 4601856 sr0 253 0 38834176 dm-0 253 1 4063232 dm-1 253 2 18960384 dm-2 查看系统版本信息 查看内核版本:[root@Lisa ~]# uname -r
3.10.0-1160.el7.x86_64
查看操作系统发行版本[root@Lisa ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@Lisa ~]# 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@ubuntu1804 ~]#cat /etc/os-release NAME="Ubuntu" VERSION="18.04.1 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04.1 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/"1.7.3 日期和时间 Linux的两种时钟 系统时钟:由Linux内核通过CPU的工作频率进行的 硬件时钟:主板 相关命令 date 显示和设置系统时间 范例: clock,hwclock: 显示硬件时钟 -s, --hctosys 以硬件时钟为准,校正系统时钟 -w, --systohc 以系统时钟为准,校正硬件时钟 时区: 范例: PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy- policy" VERSION_CODENAME=bionic UBUNTU_CODENAME=bionic
[root@ubuntu1804 ~]#cat /etc/issue
Ubuntu 18.04.1 LTS \n \l [root@ubuntu1804 ~]#lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.1 LTS Release: 18.04 Codename: bionic
1.6.3 日期和时间
Linux的两种时钟 系统时钟:由Linux内核通过CPU的工作频率进行的 硬件时钟:主板 date 显示和设置系统时间[root@Lisa ~]# date +%s
1649846304
[root@Lisa ~]# date -d @`date +%s`
2022年 04月 13日 星期三 18:38:56 CST
[root@Lisa ~]# date -d @1649846304 +%F_%T
2022-04-13_18:38:24
clock,hwclock: 显示硬件时钟 -s, --hctosys 以硬件时钟为准,校正系统时钟 -w, --systohc 以系统时钟为准,校正硬件时钟 时区: /etc/localtime 更改为上海时区:[root@Lisa ~]# timedatectl set-timezone Asia/Shanghai
[root@Lisa ~]# ll /etc/localtime
lrwxrwxrwx. 1 root root 35 11月 27 05:11 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
显示日历
[root@Lisa ~]# cal -y
显示2020年9月份的日历,输入cal是显示当天的日历
[root@Lisa ~]# cal 9 2020
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: 绝对时间表示,指明具体时间 1.6.5 用户登录信息查看命令 whoami: 显示当前登录有效用户 who: 系统当前所有的登录会话 w: 系统当前所有的登录会话及所做的操作 1.6.6 文本编辑 nano 工具可以实现文件的编辑 gedit 图形编辑工具 1.6.7 会话管理 screen 利用screen可以实现会话管理(例如新建会话,共享会话等) 例: 安装screen yum install screen -y centos8安装: dnf install epel-release -y dnf install screen -y 常见用法: 创建新screen会话 :screen -S [SESSION] 加入screen会话 :screen -x [SESSION] 退出screen会话 :exit 剥离当前screen会话 :Ctrl+a,d 显示所有已经打开的screen会话 :screen -ls 恢复某个screen会话 :screen -r [SESSION] tmux 类似于screen,更易用,也更强大 功能:允许在单个窗口中,同时访问多个会话,这对于同时运行多个命令行程很有用 可以在新端口接入已经存在的会话 允许每个会话有多个连接窗口,因此可以多人实时共享会话 支持窗口任意的垂直和水平拆分 例: 安装tmux yum install tumx -y 启动和退出 [root@Lisa ~]# tumx [root@Lisa ~]# exit 快捷键使用: 先按下Ctrl+b 启用快捷键。帮助:Ctrl+b ?,再按下q键,退出帮助 新建会话: 第一个启动的Tumx窗口,编号为0,第二个为1,以此类推 可以进行会话起名,更加直观,如下: tumx new -s
echo "$VAR_NAME" #变量值替换,弱引用
echo ’$VAR_NAME‘ #变量值不会替换,强引用
启用命令选项e,如字符串中出现以下字符,则特别加以处理,而不会把它当成一般文字输出
- \a 发出警告声
- \b 退格键
- \c 最后不加上换行符号
- \e escape,相当于\033
- \n 换行且光标移到行首
- \r 回车,光标移到行首,但不换行
- \t 插入tab
- \\ 插入\字符
- \0nnn 插入nnn(八进制)所代表的ASCII字符
- \xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)
案例:
[root@Lisa ~]# echo -e 'a\x0Ab'
a
b
[root@Lisa ~]# echo -e '\033[43;31;1;5mtest\e[0m'
test
[root@Lisa ~]# echo \$PATH
$PATH
[root@Lisa ~]# echo \
[root@Lisa ~]# echo \\
\
[root@Lisa ~]# echo \\\
>
[root@Lisa ~]# echo \\\\
\\
[root@Lisa ~]# echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@Lisa ~]# echo '$PATH'
$PATH