Linux基础命令

1、设置主机名

1.1、 hostname

查看主机名

[root@ansible ~]# cat /etc/hostname
ansible
或
[root@ansible ~]# hostname
ansible

注意: 主机名中不允许使用下划线 “_”,可以用短横线 “-”

1.2、hostname

临时修改主机名

# 临时修改直接修改的是内存中的,重启会失效
[root@ansible ~]# hostname ansible.org

[root@ansible ~]# hostname
ansible.org

1.3、hostnamectl

永久修改主机名

# 永久修改其实是修改的配置文件,重启不会失效,hostnamectl修改了两个地方,一个是内存中的hostname,一个是磁盘文件
[root@ansible ~]# hostnamectl set-hostname ansible.gxy

[root@ansible ~]# hostname
ansible.gxy
[root@ansible ~]# cat /etc/hostname
ansible.gxy

2、whoami

显示当前用户

[root@ansible ~]# whoami
root
或
[root@ansible ~]# who am i
root     pts/0        2021-12-25 11:52 (192.168.31.114)
或
[root@ansible ~]# who
root     pts/0        2021-12-25 11:52 (192.168.31.114)

3、init

关机或重启

init 0		关机
init 6		重启

4、修改终端格式和颜色

4.1、临时修改

[root@ansible ~]#PS1="\[\e[1;31m\][\u@\h \w]\\$\[\e[0m\]"	# 31字体是红色
[root@ansible ~]#PS1="\[\e[1;32m\][\u@\h \w]\\$\[\e[0m\]"	# 32字体是绿色 
[root@ansible ~]#PS1="\[\e[1;33m\][\u@\h \w]\\$\[\e[0m\]"	# 33字体是黄色
[root@ansible ~]#PS1="\[\e[1;34m\][\u@\h \w]\\$\[\e[0m\]"	# 34字体是蓝色
[root@ansible ~]#PS1="\[\e[1;35m\][\u@\h \w]\\$\[\e[0m\]"	# 35字体是紫色
[root@ansible ~]#PS1="\[\e[1;36m\][\u@\h \w]\\$\[\e[0m\]"	# 36字体是蓝绿色
[root@ansible ~]#PS1="\[\e[1;37m\][\u@\h \w]\\$\[\e[0m\]"	# 37字体是白色

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HMWAJ7jp-1644760205824)(F:\typora\linux常见命令\images\主机名显示颜色.jpg)]

注意: 退出终端颜色会失效!

4.2、永久修改

# 放在/etc/profile.d/目录下的任何以 .sh结尾的都行,不一定是env.sh,这个是个人习惯
[root@ansible ~]#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

[13:21:45 root@ansible ~]#

注意: 以上操作在centos上实验的,Ubuntu不一定适用

5、lscpu

查看CPU信息

[14:00:38 root@ansible ~]#lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    1		# 一个物理CPU
socket:               4
NUMA node(s):         1
Vendor ID:           GenuineIntel
CPU family:           6
Model:                 45
Model name:           Intel(R) Xeon(R) CPU E5-2665 0 @ 2.40GHz
Stepping:             7
CPU MHz:             2400.000
BogoMIPS:            4800.00
Hypervisor vendor:     VMware
Virtualization type:   full	  # 支持虚拟化
L1d cache:          32K		 # 数据缓存
L1i cache:          32K		 # 指令缓存
L2 cache:            256K
L3 cache:            20480K
NUMA node0 CPU(s):   0-3
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm ssbd ibrs ibpb stibp tsc_adjust arat spec_ctrl intel_stibp flush_l1d arch_capabilities

可以通过cat /proc/cpuinfo 来查看CPU信息

# 显示的更详细,每个核的具体信息都有显示
[20:39:31 root@ansible ~]#cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 45
model name      : Intel(R) Xeon(R) CPU E5-2665 0 @ 2.40GHz
stepping        : 7
microcode       : 0x718
cpu MHz         : 2400.000
cache size      : 20480 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
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 syscall nx rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm ssbd ibrs ibpb stibp tsc_adjust arat spec_ctrl intel_stibp flush_l1d arch_capabilities
bogomips        : 4800.00
clflush size    : 64
cache_alignment : 64
address sizes   : 43 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 45
model name      : Intel(R) Xeon(R) CPU E5-2665 0 @ 2.40GHz
stepping        : 7
microcode       : 0x718
cpu MHz         : 2400.000
cache size      : 20480 KB
physical id     : 2
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 2
initial apicid  : 2
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 syscall nx rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm ssbd ibrs ibpb stibp tsc_adjust arat spec_ctrl intel_stibp flush_l1d arch_capabilities
bogomips        : 4800.00
clflush size    : 64
cache_alignment : 64
address sizes   : 43 bits physical, 48 bits virtual
power management:

processor       : 2
vendor_id       : GenuineIntel
cpu family      : 6
model           : 45
model name      : Intel(R) Xeon(R) CPU E5-2665 0 @ 2.40GHz
stepping        : 7
microcode       : 0x718
cpu MHz         : 2400.000
cache size      : 20480 KB
physical id     : 4
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 4
initial apicid  : 4
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 syscall nx rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm ssbd ibrs ibpb stibp tsc_adjust arat spec_ctrl intel_stibp flush_l1d arch_capabilities
bogomips        : 4800.00
clflush size    : 64
cache_alignment : 64
address sizes   : 43 bits physical, 48 bits virtual
power management:

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 45
model name      : Intel(R) Xeon(R) CPU E5-2665 0 @ 2.40GHz
stepping        : 7
microcode       : 0x718
cpu MHz         : 2400.000
cache size      : 20480 KB
physical id     : 6
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 6
initial apicid  : 6
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 syscall nx rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm ssbd ibrs ibpb stibp tsc_adjust arat spec_ctrl intel_stibp flush_l1d arch_capabilities
bogomips        : 4800.00
clflush size    : 64
cache_alignment : 64
address sizes   : 43 bits physical, 48 bits virtual

5、which

查看外部命令的位置

# which用来查看外部命令的路径,是无法查看内部命令的路径的
[16:49:47 root@ansible ~]#which hostname
/usr/bin/hostname
[16:49:58 root@ansible ~]#which cd
/usr/bin/cd
[16:50:15 root@ansible ~]#which type
/usr/bin/which: no type in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[16:50:22 root@ansible ~]#which enable
/usr/bin/which: no enable in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

6、whereis

查看外部命令的路径,同时可以显示外部命令帮助文档的路径,如果是内部命令,只能显示帮助文档的路径

# 外部命令
[16:53:21 root@ansible ~]#whereis cd
cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz /usr/share/man/mann/cd.n.gz

# 内部命令
[16:53:47 root@ansible ~]#whereis type
type: /usr/share/man/man1/type.1.gz

7、alias

别名

# 先查看系统中是存在此命令,避免和系统中命令重复
[12:41:58 root@ansible ~]#type cdnetwork
-bash: type: cdnetwork:not found

# 创建别名,例如:
[12:42:01 root@ansible ~]# alias cdnetwork="cd /etc/sysconfig/network-scripts"
[12:41:58 root@ansible ~]#type cdnetwork
cdnetwork 是 `cd /etc/sysconfig/network-scripts' 的别名

[12:44:39 root@ansible ~]#cdnetwork
[12:44:42 root@ansible network-scripts]#

7.1、显示所有别名

# 用alias显示所有别名
[14:15:32 root@ansible ~]#alias
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 which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

7.2、使别名永久生效

[14:20:22 yang@ansible ~]$vim .bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
alias cdnetwork='cd /etc/sysconfig/network-scripts'		# 添加此行

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

刷新使其生效

# 刷新使其生效,. 和 source 效果一样
[14:21:00 yang@ansible ~]$. .bashrc

[14:21:07 yang@ansible ~]$alias
alias cdnetwork='cd /etc/sysconfig/network-scripts'
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 vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

[14:21:12 yang@ansible ~]$cdnetwork
[14:21:17 yang@ansible network-scripts]$

此命令只针对当前用户生效!

7.3、取消单个别名

# unalias是临时取消,当终端退出重新进入会失效,如果想永久取消需要修改.bashrc配置文件
[14:28:08 root@ansible ~]#unalias cdnetwork
[14:28:27 root@ansible ~]#cdnetwork
-bash: cdnetwork: 未找到命令

7.4、取消全部别名

# 临时取消全部别名,终端重进进入会失效
[14:46:40 root@ansible ~]#unalias -a

7.5、将内部命令定义成别名

# enable是内部命令,如果将内部名enable定义了别名,由于优先级来看,会执行别名而不会执行内部命令
[14:53:13 root@ansible ~]#alias enable='hostname -I'
[14:54:42 root@ansible ~]#hostname -I
192.168.31.201 172.18.0.1 172.17.0.1
[14:54:51 root@ansible ~]#enable
192.168.31.201 172.18.0.1 172.17.0.1

# 而有时候我们需要要执行内部命令,这个时候我们可以通过以下方式来执行内部命令
[14:55:16 root@ansible ~]#\enable	# 或 'enable'
enable .
enable :
enable [
enable alias
enable bg
enable bind
enable break
enable builtin
enable caller
enable cd

优先级:别名>内部命令>外部命令

针对当前用户:修改当前用户家目录下的 .bashrc文件

针对全部用户:修改 /etc/bashrc文件

注意: 别名也是临时性的,终端退出会失效

8、lsblk

查看分区

[14:31:20 root@ansible ~]#lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  200G  0 disk				# 磁盘
├─sda1            8:1    0  200M  0 part /boot			# 分区
└─sda2            8:2    0  188G  0 part
  ├─centos-root 253:0    0   30G  0 lvm  /
  ├─centos-swap 253:1    0    8G  0 lvm  [SWAP]
  ├─centos-home 253:2    0  100G  0 lvm  /home
  └─centos-data 253:3    0  650G  0 lvm  /data
sdb               8:16   0  600G  0 disk
└─sdb1            8:17   0  600G  0 part
  └─centos-data 253:3    0  650G  0 lvm  /data
sr0              11:0    1  918M  0 rom				# 光盘

9、uptime

查看开机时间

# 开机已经有49天了
[root@VM-16-15-centos ~]# uptime
14:40:35 up 49 days, 22:00,  1 user,  load average: 0.00, 0.01, 0.05

10、ls

# ls既有别名又是个外部命令,但是执行时别名优先,同时又是 --color=auto,所以执行执行ls列出的内容是有颜色的,但是想让它执行 外部命令就需要用 "\"+ls来执行了
[19:41:33 root@ansible ~]#type ls
ls 是 `ls --color=auto' 的别名

[19:42:37 root@ansible ~]#ll /bin/ls
-rwxr-xr-x. 1 root root 117680 10月 31 2018 /bin/ls

# 直接执行ls
[19:41:26 root@ansible ~]#ls
111   1114           222                                   data_tmp            docker-compose-Linux-x86_64  harbor-offline-installer-v2.1.4.tgz         script        testlog.sql    xswitch-free-master.zip
1111  1115           anaconda-ks.cfg                       doc                 env.sh                       mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz  sql           test.sql
1112  192.168.1.135  apache-tomcat-8.5.65.tar.gz           docker-20.10.5.tgz  freeswitch-1.6.0.tar.gz      mysql57-community-release-el7-9.noarch.rpm  test          txy
1113  221            CentOS-7-aarch64-Everything-1810.iso  docker-20.10.6.tgz  harbor                       ossutil64

# 当执行它原本的意思需要用以下方式,其实是没有颜色的
[19:41:28 root@ansible ~]#\ls
111   1114           222                                   data_tmp            docker-compose-Linux-x86_64  harbor-offline-installer-v2.1.4.tgz         script        testlog.sql    xswitch-free-master.zip
1111  1115           anaconda-ks.cfg                       doc                 env.sh                       mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz  sql           test.sql
1112  192.168.1.135  apache-tomcat-8.5.65.tar.gz           docker-20.10.5.tgz  freeswitch-1.6.0.tar.gz      mysql57-community-release-el7-9.noarch.rpm  test          txy
1113  221            CentOS-7-aarch64-Everything-1810.iso  docker-20.10.6.tgz  harbor                       ossutil64                                   testdata.sql  Xmanager5.exe

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yjooxTyw-1644760205828)(F:\typora\linux常见命令\images\ls.jpg)]

11、id

查看用户的uid

# 默认显示自己的uid
[20:20:07 root@ansible ~]#id
uid=0(root) gid=0(root) 组=0(root)

# 查看某个用户的相关信息
[20:20:09 root@ansible ~]#id yang
uid=1001(yang) gid=1001(yang) 组=1001(yang)

# 只查看用户的uid
[20:20:18 root@ansible ~]#id -u yang
1001

12、bc

计算器

# 将十进制转换成2进制
[20:26:55 root@ansible ~]#bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
obase=2		# 我只需要约定输出是2进制即可
120
1111000

13、一次执行多个命令用 “;”

[20:32:20 root@ansible doc]#ls;pwd;hostname -I;
liantong_doc.zip  magedu_jiagou.zip  magedu_jiuye.zip  server.zip  typora_doc.zip
/root/doc
192.168.31.201 172.18.0.1 172.17.0.1

14、查看详细的内存信息

[20:54:35 root@ansible ~]#cat /proc/meminfo
MemTotal:        8009192 kB
MemFree:         6027200 kB
MemAvailable:    6798732 kB
Buffers:            3176 kB
Cached:          1047908 kB
SwapCached:            0 kB
Active:          1031888 kB
Inactive:         668916 kB
Active(anon):     643592 kB
Inactive(anon):   100884 kB
Active(file):     388296 kB
Inactive(file):   568032 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       8388604 kB
SwapFree:        8388604 kB
Dirty:                56 kB
Writeback:             0 kB
AnonPages:        649720 kB
Mapped:           232712 kB
Shmem:             94756 kB
Slab:             116820 kB
SReclaimable:      73404 kB
SUnreclaim:        43416 kB
KernelStack:        8608 kB
PageTables:        10788 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    12393200 kB
Committed_AS:    4263456 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      161604 kB
VmallocChunk:   34359341052 kB
HardwareCorrupted:     0 kB
AnonHugePages:    440320 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      167808 kB
DirectMap2M:     8220672 kB

/proc 是内存目录,proc显示的当前系统的状态,proc的内容都是以内存的形式保存的

# 我们可以看到占用空间都是0,这就说明它不占用内存空间,因为这些数据都是来自于内存
[20:54:54 root@ansible ~]#ll /proc/meminfo
-r--r--r-- 1 root root 0 12月 26 20:57 /proc/meminfo
[20:57:32 root@ansible ~]#ll /proc/cpuinfo
-r--r--r-- 1 root root 0 12月 26 20:57 /proc/cpuinfo

15、查看内核版本 uname -r

查看内核版本

[21:01:43 root@ansible ~]#uname -r
3.10.0-957.el7.x86_64

16、查看操作系统发行版本

[21:01:46 root@ansible ~]#cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

[21:04:00 root@ansible ~]#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"

17、查看磁盘信息

# 除了我们所熟悉的df命令还可以用过以下命令查看,场景:如果NAS没有df命令就可以用以下命令查看
[21:11:03 root@ansible ~]#cat /proc/partitions
major minor  #blocks  name

   8        0  209715200 sda
   8        1     204800 sda1
   8        2  197139456 sda2
   8       16  629145600 sdb
   8       17  629144576 sdb1
  11        0     940032 sr0
 253        0   31457280 dm-0
 253        1    8388608 dm-1
 253        2  104857600 dm-2
 253        3  681574400 dm-3

18、关机

halt	# 关机
poweroff # 关机

19、重启

reboot		# 重启

20、关机或重启

# 只执行shoudown命令并不会关机,系统会在你执行命令一分钟后进行关机
-bash-4.2# date
2021年 12月 30日 星期四 13:26:15 GMT
-bash-4.2# shutdown
Shutdown scheduled for 四 2021-12-30 13:27:20 GMT, use 'shutdown -c' to cancel.
-bash-4.2#
Broadcast message from root@lnmp (Thu 2021-12-30 13:26:20 GMT):

The system is going down for power-off at Thu 2021-12-30 13:27:20 GMT!

马上关机

-bash-4.2# shutdown -h now

取消关机

# 用 -c 参数取消关机
-bash-4.2# shutdown -c

Broadcast message from root@lnmp (Thu 2021-12-30 13:26:27 GMT):

The system shutdown has been cancelled at Thu 2021-12-30 13:27:27 GMT!

多长时间以后关机

# 10分钟以后关机
-bash-4.2#
Broadcast message from root@lnmp (Thu 2021-12-30 13:31:48 GMT):

The system is going down for power-off at Thu 2021-12-30 13:41:48 GMT!

设置几点几分关机

# 设置2:30分进行关机,只能精确到分,不能精确到秒
-bash-4.2# shutdown 02:30
Shutdown scheduled for 五 2021-12-31 02:30:00 GMT, use 'shutdown -c' to cancel.

21、w

查看当前有几个用户在登录,并且能看到每个用户在执行什么操作

# 一共有两个用户登录了系统,其中一个用户在执行yes命令
[21:41:08 root@ansible ~]#w
 21:41:09 up  1:23,  2 users,  load average: 0.36, 0.14, 0.14
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/1    192.168.31.114   20:20    5.00s  0.01s  0.01s -bash
root     pts/2    192.168.31.114   21:41    5.00s  0.58s  0.57s yes

22、screen

Linux screen命令用于多重视窗管理程序。

# 安装
[root@VM-16-15-centos ~]# yum install screen

通过screen后台运行某个程序,及时关闭终端,后台程序仍在运行

# 运行screen,会从新打开一个新终端
[root@VM-16-15-centos ~]# screen

# 执行一个yes,然后将终端关闭
[root@VM-16-15-centos ~]# yes

# 在另一终端进行查看yes是否在后台运行
[root@VM-16-15-centos ~]# ps aux|grep yes
root     11241 59.2  0.0 111172   640 pts/9    R+   21:03   0:13 yes
root     11393  0.0  0.0 115928  1008 pts/10   S+   21:04   0:00 grep --color=auto yes

远程协助

# xiaohong 需要 xiaoming 远程协助解决问题,xiaohong 需要做如下操作
[root@VM-16-15-centos ~]# screen -S xiaohong		# 大写S
[root@VM-16-15-centos ~]#
# xiaoming 需要做如下操作,先查看当前可用的连接
[root@VM-16-15-centos ~]# screen -ls
There are screens on:
        1471.xiaohong   (Attached)		# 发现xiaohong可用
        5358.pts-0.VM-16-15-centos      (Detached)
        11207.pts-8.VM-16-15-centos     (Detached)
        8325.pts-0.VM-16-15-centos      (Detached)
        6876.pts-0.VM-16-15-centos      (Detached)
        6415.pts-0.VM-16-15-centos      (Detached)
6 Sockets in /var/run/screen/S-root.

# 连接,此时已经互相能看到xiaohong的终端了,实时同步
[root@VM-16-15-centos ~]# screen -x xiaohong
[root@VM-16-15-centos ~]#

# 退出,协助完成需要退出,可以用Ctrl+a,d Ctrl+a不松手在按d
[detached from 3625.xiaohong]
[root@VM-16-15-centos ~]#

# 如果xiaohong 不需要协助了,可以退出终端,用exit
[root@VM-16-15-centos ~]# exit
[screen is terminating]
[root@VM-16-15-centos ~]#

注意: 协助的双方必须连接的是同个主机和同一个用户。

23、echo

选项

-n		不自动换行
-E		(默认)不支持\解释功能-n不自动换行
-e		启用\字符的解释功能

显示变量

# 命名一个变量
[root@VM-16-15-centos ~]# name=gxy
[root@VM-16-15-centos ~]# echo $name
gxy
[root@VM-16-15-centos ~]# echo "$name"		# 双引号会显示变量名
gxy
[root@VM-16-15-centos ~]# echo '$name'		# 单引号里边是什么则会打印什么
$name

-n 参数

[root@VM-16-15-centos ~]# echo -n $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/jdk1.8.0_161/bin:/root/bin[root@VM-16-15-centos ~]#

启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出

\a 发出警告声
\b 退格键
\c 最后不加上换行符号
\e escape,相当于\033
\n 换行且光标移至行首
\r 回车,即光标移至行首,但不换行
\t 插入tab
\\ 插入\字符
\Onnn插入nnn (八进制)所代表的ASCII字符
\xHH插入HH(十六进制)所代表的ASCI数字(man 7 ascii)

25、命令行扩展和被括起来的集合

命令行扩展:``和$()

把一个命令的输出打印给另一个命令的参数,放在 `` 中的一定是有输出信息的命令

# 两者相等效果
$(COMMAND)或`COMMAND`

[root@VM-16-15-centos ~]# echo "This system's name is $(hostname)"
This system's name is VM-16-15-centos
[root@VM-16-15-centos ~]# echo "This system's name is `hostname`" 
This system's name is VM-16-15-centos

范例:比较"",‘’,``三者区别

# 比较"",'',``三者区别
[root@VM-16-15-centos ~]# echo "echo $HOSTNAME" 
echo VM-16-15-centos
[root@VM-16-15-centos ~]# echo 'echo $HOSTNAME' 
echo $HOSTNAME
[root@VM-16-15-centos ~]# echo `echo $HOSTNAME`
VM-16-15-centos

结论

**单引号:**六亲不认,变量和命令都不识别,都当成了普通的字符串
反向单引号: 变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交给调用反向单引号的命令继续
双引号: 不能识别命令,可以识别变量

24、括号扩展:{}

例1:

[root@VM-16-15-centos tmp]# touch file{1,3,5}.txt
[root@VM-16-15-centos tmp]# ll
总用量 0
-rw-r--r-- 1 root root 0 1月  16 16:11 file1.txt
-rw-r--r-- 1 root root 0 1月  16 16:11 file3.txt
-rw-r--r-- 1 root root 0 1月  16 16:11 file5.txt

例2:

[root@VM-16-15-centos tmp]# touch file{1..5}.txt 
[root@VM-16-15-centos tmp]# ll
总用量 0
-rw-r--r-- 1 root root 0 1月  16 16:12 file1.txt
-rw-r--r-- 1 root root 0 1月  16 16:12 file2.txt
-rw-r--r-- 1 root root 0 1月  16 16:12 file3.txt
-rw-r--r-- 1 root root 0 1月  16 16:12 file4.txt
-rw-r--r-- 1 root root 0 1月  16 16:12 file5.txt

例3:

[root@VM-16-15-centos tmp]# touch file{3..5}.txt
[root@VM-16-15-centos tmp]# ll
总用量 0
-rw-r--r-- 1 root root 0 1月  16 16:13 file3.txt
-rw-r--r-- 1 root root 0 1月  16 16:13 file4.txt
-rw-r--r-- 1 root root 0 1月  16 16:13 file5.txt

例4:

# 2是间隔数,打印出来的包含3的,如果第二位是9,则也会打印file9.txt
[root@VM-16-15-centos tmp]# touch file{3..8..2}.txt
[root@VM-16-15-centos tmp]# ll
总用量 0
-rw-r--r-- 1 root root 0 1月  16 16:16 file3.txt
-rw-r--r-- 1 root root 0 1月  16 16:16 file5.txt
-rw-r--r-- 1 root root 0 1月  16 16:16 file7.txt

例5:

# 同样适用于字母
[root@VM-16-15-centos tmp]# echo {a..z..2}
a c e g i k m o q s u w y

例6:

[root@VM-16-15-centos tmp]# echo {000..20..2}
000 002 004 006 008 010 012 014 016 018 020

例7:

[root@VM-16-15-centos tmp]# touch file{1..5}.{txt,log}
[root@VM-16-15-centos tmp]# ll
总用量 0
-rw-r--r-- 1 root root 0 1月  16 16:25 file1.log
-rw-r--r-- 1 root root 0 1月  16 16:25 file1.txt
-rw-r--r-- 1 root root 0 1月  16 16:25 file2.log
-rw-r--r-- 1 root root 0 1月  16 16:25 file2.txt
-rw-r--r-- 1 root root 0 1月  16 16:25 file3.log
-rw-r--r-- 1 root root 0 1月  16 16:25 file3.txt
-rw-r--r-- 1 root root 0 1月  16 16:25 file4.log
-rw-r--r-- 1 root root 0 1月  16 16:25 file4.txt
-rw-r--r-- 1 root root 0 1月  16 16:25 file5.log
-rw-r--r-- 1 root root 0 1月  16 16:25 file5.txt

25、sleep

过多久执行什么操作

# 过5秒执行 echo "hello word"
[root@VM-16-15-centos ~]# sleep 5;echo "hello word"
hello word

26、字符集

我们都知道计算机是二进制语言,我们输入的文字或者字母计算机是无法识别的,如何才能让计算机识别呢,这个时候就用到了字符集,字符集就是个表格,它把字符和计算机二进制做了对应关系,例如以下表格,本次只举例,不论证对应表是否正确:

字母二进制
a01001
b01002

unkode字符集

全球通用字符集,unkode包含:UTF8、UTF16、UTF32三种编码

27、编码

字符集简单来说就是字符和二进制的对应关系,编码决定了如何在磁盘上保存,它的保存形式不一样,例如一个人的姓名,名字不变的情况下你可以使用宋体,楷体或者黑体来写,编码决定了它最终的表现形式。

UTF8 :边长,1到4个字节,它在表示不同文字的时候所占的磁盘空间不一样,有可能会占1个字节,或2个字节,或者3个字节,或者4个字节。

UTF16: 变长,2或4个字节。

UTF32:固定长度,4个字节。

查看当前系统用的那种编码格式

[root@VM-16-15-centos ~]# echo $LANG
en_US.utf8		#前边是语言,后边是编码格式

# 修改语言
[root@VM-16-15-centos ~]# LANG=zh_CN.UTF-8
[root@VM-16-15-centos ~]# echo $LANG      
zh_CN.UTF-8

28、history

当执行命令后,系统默认会在内存记录执行过的命令

当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是~/.bash_history

登录shell时,会读取命令历史文件中记录下的命令加载到内存中

登录进shell后新执行的命令只会记录在内存的缓存区中;这些命令会用户正常退出时“追加"至命令历史文件中

.bash_history文件会记录多少条,我们可以用一下命令来查看

# 一共可以存多少条都在“HISTSIZE”变量中记录
[root@VM-16-15-centos ~]# echo $HISTSIZE
3000

# 修改记录条数为10000(这个在centos7.6中改完并没有生效,后续在查找)
[root@VM-16-15-centos ~]# sed -i 's/HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile
[root@VM-16-15-centos ~]# source /etc/profile
[root@VM-16-15-centos ~]# echo $HISTSIZE
3000
#  查看历史记录
[root@VM-16-15-centos ~]# history
...
  599  2022-01-16 12:18:14 echo -e "\033[31m 红色字 \033[0m"
  600  2022-01-16 12:29:48 ll
  601  2022-01-16 12:30:18 ll
  602  2022-01-16 12:31:58 ll
  603  2022-01-16 12:32:33 ll
  604  2022-01-16 13:37:57 echo $LANG
  605  2022-01-16 13:38:00 ll
  606  2022-01-16 16:43:56 cat .bash_history 
  607  2022-01-16 16:45:05 history

执行历史命令

# 用“!”号加历史命令前的编号
[root@VM-16-15-centos ~]# !605
ll
total 24
drwxrwxr-x 9 lighthouse lighthouse 4096 May 31  2021 apache-tomcat-8.5.66
drwxr-xr-x 8 lighthouse lighthouse 4096 Dec 20  2017 jdk1.8.0_161
-rw-r--r-- 1 root       root       9224 Nov 15 09:40 mysql57-community-release-el7-9.noarch.rpm
-rw-r--r-- 1 root       root          0 Jan 16 15:45 nginx_2022-01-16.log
drwxr-xr-x 2 root       root       4096 Jan 16 16:25 tmp

# 或
[root@VM-16-15-centos ~]# !-3		# 倒数第3条
ll
total 24
drwxrwxr-x 9 lighthouse lighthouse 4096 May 31  2021 apache-tomcat-8.5.66
drwxr-xr-x 8 lighthouse lighthouse 4096 Dec 20  2017 jdk1.8.0_161
-rw-r--r-- 1 root       root       9224 Nov 15 09:40 mysql57-community-release-el7-9.noarch.rpm
-rw-r--r-- 1 root       root          0 Jan 16 15:45 nginx_2022-01-16.log
drwxr-xr-x 2 root       root       4096 Jan 16 16:25 tmp

常用选项

-c:清空历史命令
-d offset:删除历史中指定的第offset个命令
n:显示最近的n条历史
-a:追加本次会话新执行的命令历史列表至历史文件
-r:读历史文件附加到历史列表
-w︰保存历史列表到指定的历史文件
-n:读历史文件中未读过的行到历史列表
-p:展开历史参数成多行,但不存在历史列表中
-s:展开历史参数成一行,附加在历史列表后

清除历史记录

# 有时候我们在输入一些敏感信息的时候并不想让其他人知道,这个时候我们可以清楚历史记录
[root@VM-16-15-centos ~]# mysql -uroot -ppasswd

[root@VM-16-15-centos ~]# history
...
  629  2022-01-16 17:05:40 history
  630  2022-01-16 17:05:47 echo $HISTSIZE
  631  2022-01-16 17:09:15 mysql -uroot -ppasswd		# 密码在历史中保存
  632  2022-01-16 17:09:23 history
  
# 清除历史记录,发现此时已经看不到了
[root@VM-16-15-centos ~]# history -c
[root@VM-16-15-centos ~]# history
    1  2022-01-16 17:10:05 h
    2  2022-01-16 17:10:17 history

# 退出终端在进行history查看也是看不到的

查看删除记录

[root@VM-16-15-centos ~]# rm -rf .bash_history
[root@VM-16-15-centos ~]# history -c

# 直接关闭窗口在登录,发现删除的操作还是会被查看到,即使前边已经清除了记录
Last login: Sun Jan 16 17:35:04 2022 from 171.11.0.69
[root@VM-16-15-centos ~]# history
    1  2022-01-16 17:35:39 rm -rf .bash_history
    2  2022-01-16 17:36:26 history

注意: 通过history命令查看的历史记录都是在内存中的,当我们退出终端的时候会写入到 .bash_history文件,如果我们没有退出的时候写入的新命令则会先写入内存,如果此时清除历史消息,是不会写入.bash_history文件的。

伪造历史记录

# 伪造删除/data盘的记录
[root@VM-16-15-centos ~]# history -s rm -rf /data 
drwxr-xr-x 2 root       root       4096 Jan 16 16:25 tmp

# 查看/data目录还在
[root@VM-16-15-centos ~]# ll /
total 72
lrwxrwxrwx.   1 root root     7 Mar  7  2019 bin -> usr/bin
dr-xr-xr-x.   5 root root  4096 Nov  6 16:39 boot
drwxr-xr-x    2 root root  4096 Nov  5  2019 data
drwxr-xr-x   20 root root  3040 Nov  6 16:40 dev
drwxr-xr-x.  96 root root 12288 Jan 16 17:02 etc
drwxr-xr-x.   3 root root  4096 Nov  6 16:38 home
lrwxrwxrwx.   1 root root     7 Mar  7  2019 lib -> usr/lib
lrwxrwxrwx.   1 root root     9 Mar  7  2019 lib64 -> usr/lib64
drwx------.   2 root root 16384 Mar  7  2019 lost+found
drwxr-xr-x.   2 root root  4096 Apr 11  2018 media
drwxr-xr-x.   2 root root  4096 Apr 11  2018 mnt
drwxr-xr-x.   7 root root  4096 Nov  6 16:58 opt
dr-xr-xr-x  120 root root     0 Nov  6 16:39 proc
dr-xr-x---.  13 root root  4096 Jan 16 17:35 root
drwxr-xr-x   25 root root   840 Jan 13 20:39 run
lrwxrwxrwx.   1 root root     8 Mar  7  2019 sbin -> usr/sbin
drwxr-xr-x.   2 root root  4096 Apr 11  2018 srv
dr-xr-xr-x   13 root root     0 Jan 16 17:39 sys
drwxrwxrwt.  10 root root  4096 Jan 16 17:26 tmp
drwxr-xr-x.  14 root root  4096 Nov  9 18:44 usr
drwxr-xr-x.  20 root root  4096 Jan  8  2021 var

# 查看历史记录,发现有伪造删除data盘记录
[root@VM-16-15-centos ~]# history
    1  2022-01-16 17:35:39 rm -rf .bash_history
    2  2022-01-16 17:36:26 history
    3  2022-01-16 17:39:06 ll
    4  2022-01-16 17:39:10 ll /
    5  2022-01-16 17:39:45 rm -rf /data
    6  2022-01-16 17:39:53 ll
    7  2022-01-16 17:39:57 ll /
    8  2022-01-16 17:40:05 history

命令历史相关环境变量

HISTSIZE:命令历史记录的条数
HISTFILE:指定历史文件,默认为~/.bash_history
HISTFILESIZE:命令历史文件记录历史的条数
HISTTIMEFORMAT="%F %T `whoami`"显示时间和用户
HISTIGNORE="str1: str2* : ..."忽略str1命令,str2开头的历史
HISTCONTROL:控制命令历史的记录方式
ignoredups是默认值,可忽略重复的命令,连续且相同为“重复”
ignorespace忽略所有以空白开头的命令
ignoreboth相当于ignoredups,ignorespace的组合
erasedups删除重复命令
# 让历史记录显示日期和用户,终端退出再次登录仍然生效(重启服务器是否生效待测试)

[root@VM-16-15-centos ~]# export HISTTIMEFORMAT="%F %T `whoami` "
[root@VM-16-15-centos ~]# history
    1  2022-01-16 17:35:39 root rm -rf .bash_history
    2  2022-01-16 17:36:26 root history
    3  2022-01-16 17:39:06 root ll
    4  2022-01-16 17:39:10 root ll /
    5  2022-01-16 17:39:45 root rm -rf /data
    6  2022-01-16 17:39:53 root ll
    7  2022-01-16 17:39:57 root ll /
    8  2022-01-16 17:40:05 root history
    9  2022-01-16 17:44:34 root echo $HISFILE
   10  2022-01-16 17:44:49 root echo $HISTFILE
   11  2022-01-16 17:52:03 root export HISTTIMEFORMAT="%F %T `whoami`"
   12  2022-01-16 17:52:10 root history

调用命令历史

# !?+要搜索的关键词,也可以是包含在关键词中的字符
[root@VM-16-15-centos ~]# !?gre		# 执行最后一个包含gre的命令
grep 'bash' /etc/passwd
root:x:0:0:root:/root:/bin/bash
lighthouse:x:1000:1000::/home/lighthouse:/bin/bash
mysql:x:306:306::/data/mysql:/bin/bash

# 执行最近的以d开头的命令
[root@VM-16-15-centos ~]# !d
date
Sun Jan 23 11:12:52 CST 2022

# 把前一个命令的参数作为之后执行命令的参数
[root@VM-16-15-centos ~]# cat /etc/redhat-release /etc/issue
CentOS Linux release 7.6.1810 (Core)
\S
Kernel \r on an \m

[root@VM-16-15-centos ~]# ll !*		# 表示把前一个命令的参数作为后一个命令执行的参数
ll /etc/redhat-release /etc/issue
-rw-r--r--. 1 root root 23 Nov 23  2018 /etc/issue
lrwxrwxrwx. 1 root root 14 Mar  7  2019 /etc/redhat-release -> centos-release

[root@VM-16-15-centos ~]# cat !*
cat /etc/redhat-release /etc/issue
CentOS Linux release 7.6.1810 (Core)
\S
Kernel \r on an \m

# 还有用!?表示上个命令的所有参数(一般使用于1个参数的情况)
[root@VM-16-15-centos ~]# cat nginx_2022-01-16.log
123

[root@VM-16-15-centos ~]# ll !$
ll nginx_2022-01-16.log
-rw-r--r-- 1 root root 4 Jan 23 11:22 nginx_2022-01-16.log

# 调用某一个参数
[root@VM-16-15-centos tmp]# ll a.txt b.txt
-rw-r--r-- 1 root root 4 Jan 23 11:25 a.txt
-rw-r--r-- 1 root root 4 Jan 23 11:25 b.txt
# 调用第一个参数
[root@VM-16-15-centos tmp]# cat !:1
cat a.txt
123
# 调用第二个参数
[root@VM-16-15-centos tmp]# ll a.txt b.txt
-rw-r--r-- 1 root root 4 Jan 23 11:25 a.txt
-rw-r--r-- 1 root root 4 Jan 23 11:25 b.txt
[root@VM-16-15-centos tmp]# cat !:2
cat b.txt
456
# 或
[root@VM-16-15-centos tmp]# cat !$		# $表示最后一个(一共就两个参数)
cat b.txt
456
# 也可以用快捷键 ll 按下ESC,松手后按下 “.” ,或者ll 按住Alt不松手在按下“.” 
[root@VM-16-15-centos tmp]# cat a.txt b.txt
123
456
[root@VM-16-15-centos tmp]# ll b.txt
-rw-r--r-- 1 root root 4 Jan 23 11:25 b.txt

29、bash中的快捷键

Ctrl + l	清屏,相当于clear命令
ctr1 + o	执行当前命令,并重新显示本命令
ctrl + s	阻止屏幕输出,锁定	# 分工具
ctr1 + q	允许屏幕输出,解锁	# 分工具
ctr1 + c	终止命令
ctrl + z	挂起命令
ctrl + a	光标移到命令行首,相当于Home
ctrl + e	光标移到命令行尾,相当于End
ctrl + f	光标向右移动一个字符
ctrl + b	光标向左移动一个字符
ctrl + xx	光标在命令行首和光标之间移动
Alt + f		光标向右移动一个单词尾
Alt + b		光标向左移动一个单词首
ctrl + u	从光标处删除至命令行首
ctr1 + k	从光标处删除至命令行尾
A1t + r		删除当前整行
ctrl + w	从光标处向左删除至单词首
Alt + d		从光标处向右删除至单词尾
Alt + Backspace删除左边单词
ctrl + d	删除光标处的一个字符
ctrl + h	删除光标前的一个字符
ctrl + y	将删除的字符粘贴至光标后
A1t + c		交换光标处和之前的字符位置
A1t + u		从光标处开始,将右边一个单词更改为大写
Alt + 1		从光标处开始,将右边一个单词更改为小写
ctrl + t	交换光标处和之前的字符位置
A1t + t		交换光标处和之前的单词位置
A1t + #		提示输入指定字符后,重复显示该字符#次

实例1:

# ctrl + u	从光标处删除至命令行首
[root@VM-16-15-centos ~]# cat -n nginx_2022-01-16.log
[root@VM-16-15-centos ~]#  nginx_2022-01-16.log		# 光标在-n后,敲下ctrl+u

实例2:

# ctr1 + k	从光标处删除至命令行尾
[root@VM-16-15-centos ~]# cat -n nginx_2022-01-16.log
[root@VM-16-15-centos ~]# cat			# 光标在ctrl后,选项和参数都会被删除

30、linux文件类型

# linux下期中文件类型
- 普通文件
d 目录文件directory
b 块设备block
c 字符设备character
l 符号链接文件link
p 管道文件pipe
s 套接字文件socket

31、dirname与basename

文件所在目录 dirname

文件名 basename

[12:02:41 root@ansible network-scripts]#ll /etc/sysconfig/network-scripts/ifcfg-ens192
-rw-r--r--. 1 root root 412 9月  14 22:57 /etc/sysconfig/network-scripts/ifcfg-ens192
dirname : /etc/sysconfig/network-scripts/
basename : ifcfg-ens192

命令类型

dirname与basename都是外部命令

[12:03:21 root@ansible network-scripts]#type dirname
dirname 是 /usr/bin/dirname

[12:06:08 root@ansible network-scripts]#type basename
basename 是 /usr/bin/basename

取一个文件的dirname与basename

[12:06:28 root@ansible network-scripts]#dirname /etc/sysconfig/network-scripts/ifcfg-ens192
/etc/sysconfig/network-scripts
[12:09:02 root@ansible network-scripts]#basename /etc/sysconfig/network-scripts/ifcfg-ens192
ifcfg-ens192

32、cd

回到某个用户的家目录

# 回到yang用户的家目录(当前用户是root)
[12:20:28 root@ansible ~]#cd ~yang
[12:20:37 root@ansible yang]#pwd
/home/yang

普通用户无法切回管理员的家目录

# 当前用yang
[12:22:03 yang@ansible ~]$cd ~root
bash: cd: /root: 权限不够

33、help

查看内部命令的帮助

[12:30:14 root@ansible ~]#type enable 
enable 是 shell 内嵌
[12:30:21 root@ansible ~]#help enable
enable: enable [-a] [-dnps] [-f 文件名] [名称 ...]
    启用和禁用 shell 内嵌。
    
    启用和禁用 shell 的内嵌命令。禁用使您能够执行一个和内嵌
    命令同名的磁盘上的命令,而无须使用完整的路径名。
    
    
    选项:
      -a        打印一个内嵌的列表,并显示其中每一个是否启用
      -n        禁用每一个 NAME 内嵌或者显示一个被禁用的内嵌的列表
      -p        以可重用的格式打印一个内嵌的列表
      -s        仅打印Posix `special'  内嵌的名称
    
    控制动态加载的选项:
      -f        从共享对象 FILENAME 文件中加载 NAME 内嵌
      -d        删除以 -f 选项加载的内嵌
    
    不带选项时,每一个 NAME 内嵌都被启用。
    
    如果要使用 $PATH 中找到的 `test' 而不是 shell 内嵌的版本,
    输入 `enable -n test'。
    
    退出状态:
    返回成功,除非 NAME 不是一个 shell 内嵌或者有错误发生。

外部命令是无法通过help查看的帮助的

# less为外部命令
[12:31:50 root@ansible ~]#type less
less 是 /usr/bin/less
[12:31:54 root@ansible ~]#help less
-bash: help: 没有与 `less' 匹配的帮助主题。尝试 `help help' 或者 `man -k less' 或者 `info less'。

外部命令可以通过命令±-help查看帮助

[13:14:11 root@ansible ~]#less --help
               SUMMARY OF LESS COMMANDS

      Commands marked with * may be preceded by a number, N.
      Notes in parentheses indicate the behavior if N is given.
      A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K.

  h  H                 Display this help.
  q  :q  Q  :Q  ZZ     Exit.
 ---------------------------------------------------------------------------

                           MOVING

  e  ^E  j  ^N  CR  *  Forward  one line   (or N lines).
  y  ^Y  k  ^K  ^P  *  Backward one line   (or N lines).
  f  ^F  ^V  SPACE  *  Forward  one window (or N lines).
  b  ^B  ESC-v      *  Backward one window (or N lines).
  ...

34、ls

ls是别名

[13:10:51 root@ansible ~]#type ls 
ls 是 `ls --color=auto' 的别名

用ls原本的意思需要用“\”ls

# 所有文件没有颜色
[13:12:37 root@ansible ~]#\ls

ls常见选项

-a	包含隐藏文件
-l	显示额外的信息
-R	目录递归		# 大写
-ld	目录和符号链接信息
-l	文件分行显示
-S	按从大到小排序		# 大写
-t	按mtime排序
-u	配合-t选项,显示并按atime从新到旧排序
-U	按目录存放顺序显示	# 大写
-×	按文件后缀排序

-R 目录递归

[13:23:06 root@ansible ~]#ll -R tmp
tmp:
总用量 0
-rw-r--r-- 1 root root  0 2月  13 13:22 a.txt
drwxr-xr-x 2 root root 19 2月  13 13:22 test

tmp/test:
总用量 0
-rw-r--r-- 1 root root 0 2月  13 13:22 b.log

# 通过tree查看目录结构
[13:23:08 root@ansible ~]#tree tmp
tmp
├── a.txt
└── test
    └── b.log

1 directory, 2 files

-S 按从大到小排序,默认的单位“k”

[13:25:30 root@ansible ~]#ll -S
总用量 1240244
-rw-r--r--. 1 root root 562196899 9月   4 13:29 harbor-offline-installer-v2.1.4.tgz
-rw-r--r--. 1 root root 341603885 10月 18 09:28 mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz
-rw-r--r--. 1 root root  57763752 8月  25 10:33 Xmanager5.exe
-rw-r--r--. 1 root root  12737304 9月  16 14:22 docker-compose-Linux-x86_64
-rwxr-xr-x. 1 root root  10360930 7月  12 2021 ossutil64
-rw-r--r--. 1 root root     12371 11月  4 15:23 testdata.sql
-rw-r--r--. 1 root root      9224 9月  12 2016 mysql57-community-release-el7-9.noarch.rpm

# 为了方便看可以加上“-h”参数
[13:25:25 root@ansible ~]#ll -Sh
总用量 1.2G
-rw-r--r--. 1 root root 537M 9月   4 13:29 harbor-offline-installer-v2.1.4.tgz
-rw-r--r--. 1 root root 326M 10月 18 09:28 mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz
-rw-r--r--. 1 root root  67M 8月   9 2021 docker-20.10.6.tgz
-rw-r--r--. 1 root root  56M 8月  25 10:33 Xmanager5.exe
-rw-r--r--. 1 root root  13M 9月  16 14:22 docker-compose-Linux-x86_64
-rwxr-xr-x. 1 root root 9.9M 7月  12 2021 ossutil64
-rw-r--r--. 1 root root  13K 11月  4 15:23 testdata.sql
-rw-r--r--. 1 root root 9.1K 9月  12 2016 mysql57-community-release-el7-9.noarch.rpm

-ld 目录和符号链接信息

# 想看某个目录的属性,并不关系目录里边的文件熟悉可以加上“-ld”参数
[13:31:14 root@ansible ~]#ll /boot
总用量 107124
-rw-r--r--. 1 root root   151918 11月  9 2018 config-3.10.0-957.el7.x86_64
drwxr-xr-x. 3 root root       17 8月   4 2021 efi
drwxr-xr-x. 2 root root       27 8月   4 2021 grub
drwx------. 5 root root       97 8月   4 2021 grub2
-rw-------. 1 root root 57146933 8月   4 2021 initramfs-0-rescue-63a9758edf8c421abeb9517633ba9553.img
-rw-------. 1 root root 21682829 8月   4 2021 initramfs-3.10.0-957.el7.x86_64.img
-rw-------  1 root root 13556486 2月  13 11:10 initramfs-3.10.0-957.el7.x86_64kdump.img
-rw-r--r--. 1 root root   314036 11月  9 2018 symvers-3.10.0-957.el7.x86_64.gz
-rw-------. 1 root root  3543471 11月  9 2018 System.map-3.10.0-957.el7.x86_64
-rwxr-xr-x. 1 root root  6639904 8月   4 2021 vmlinuz-0-rescue-63a9758edf8c421abeb9517633ba9553
-rwxr-xr-x. 1 root root  6639904 11月  9 2018 vmlinuz-3.10.0-957.el7.x86_64

# 只显示该文件夹本身的属性
[13:34:29 root@ansible ~]#ll -ld /boot
dr-xr-xr-x. 5 root root 4096 2月  13 11:10 /boot

35、文件的时间

文件时间有三种,分别是modify time、change time、access time

查看三种时间的方法

# mtime:
[13:56:02 root@ansible ~]#ll env.sh 
-rw-r--r-- 1 root root 90 12月 25 13:17 env.sh
# ctime
[13:56:08 root@ansible ~]#ll --time=ctime env.sh 
-rw-r--r-- 1 root root 90 12月 25 13:17 env.sh
# atime
[13:56:17 root@ansible ~]#ll --time=atime env.sh  
-rw-r--r-- 1 root root 90 12月 25 13:17 env.sh

modify time:修改文件的时间,针对文件内容

modify time:例如修改了文件内容,
# ll查看到的是mtime及modify time
[13:43:41 root@ansible ~]#ll -h anaconda-ks.cfg                 
-rw-------. 1 root root 1.5K 8月   4 2021 anaconda-ks.cfg

# 用vim进行修改
13:43:41 root@ansible ~]#vim anaconda-ks.cfg

# 修改后时间已经变成了
[13:44:42 root@ansible ~]#ll -h anaconda-ks.cfg
-rw------- 1 root root 1.5K 2月  13 13:44 anaconda-ks.cfg

change time:修改属性的时间,针对属主,属组,读写执行等属性,修改属性modify time不会改变

# 查看ctime时间
[13:56:08 root@ansible ~]#ll --time=ctime env.sh 
-rw-r--r-- 1 root root 90 12月 25 13:17 env.sh
# 修改文件属性
[13:57:50 root@ansible ~]#chown -R yang:yang env.sh
# 查看ctime时间,发现ctime时间已经变了
[13:58:11 root@ansible ~]#ll --time=ctime env.sh
-rw-r--r-- 1 yang yang 90 2月  13 13:58 env.sh

修改文件内容ctime也会改变

# 修改文件内容是大小有可能会发生变化,时间会必会发生变化
# 修改前mtime和ctime一样
[21:36:38 root@ansible ~]#ll -h testlog.sql
-rw-r--r--. 1 root root 291 11月  1 16:23 testlog.sql
[21:36:46 root@ansible ~]#ll --time=ctime testlog.sql
-rw-r--r--. 1 root root 291 11月  1 16:23 testlog.sql

# 修改文件
[21:38:31 root@ansible ~]#vim testlog.sql

# 修改文件后
[21:39:25 root@ansible ~]#ll -h testlog.sql
-rw-r--r-- 1 root root 300 2月  13 21:39 testlog.sql
[21:39:28 root@ansible ~]#ll --time=ctime testlog.sql  
-rw-r--r-- 1 root root 300 2月  13 21:39 testlog.sql

注意: 注意,只修改属性,例如属主,mtime并不会发生变化。

access time:文件只要被读就会被access time记录

# 查看文件atime
[14:02:58 root@ansible ~]#ll --time=atime  testdata.sql 
-rw-r--r--. 1 root root 12371 11月  4 15:23 testdata.sql
# 查看文件
[14:03:07 root@ansible ~]#cat testdata.sql
# 发现文件atime已经变了
[14:04:55 root@ansible ~]#ll --time=atime  testdata.sql
-rw-r--r--. 1 root root 12371 2月  13 14:04 testdata.sql

同时查看三个时间

[21:50:01 root@ansible ~]#stat test.sql 
  文件:"test.sql"
  大小:38              块:8          IO 块:4096   普通文件
设备:fd00h/64768d      Inode:52102       硬链接:1
权限:(0644/-rw-r--r--)  Uid:( 1001/    yang)   Gid:(    0/    root)
最近访问:2021-11-01 16:24:44.644054348 +0800
最近更改:2021-10-12 14:48:20.410504560 +0800
最近改动:2022-02-13 21:44:28.076626061 +0800
创建时间:-

35、ss命令

# 服务端IP地址和端口192.168.31.206:22  客户端通过192.168.31.114:54661来访问服务端
yang@yang-user:~$ ss -nt
State     Recv-Q    Send-Q     		Local Address:Port     Peer Address:Port          Process                      
ESTAB    0             0            192.168.31.206:22      192.168.31.114:54661

36、diff 命令

yang@yang-user:~/tmp$ cat -n test1
     1  #! /bin/bash
     2  echo "hollo"
     3  echo "test"
     4  echo "this is test1"
yang@yang-user:~/tmp$ cat -n test2 
     1  #! /bin/bash
     2  echo "word"
     3  echo "test"
     4  echo "this is test2"
yang@yang-user:~/tmp$ diff test1 test2 
2c2
< echo "hollo"
---
> echo "word"
4c4
< echo "this is test1"
---
> echo "this is test2"

37、chage

更改用户密码过期时间
在 CentOS 上,可以使用 chage 命令来管理用户密码的到期和延期。以下是一些常用的命令示例:

查看用户密码信息和到期日期:

chage -l <username>

将 替换为要查看密码信息的用户名。

禁用用户密码过期:

chage -M 99999 <username>

将 替换为要禁用密码过期的用户名。将密码最大使用天数设置为 99999 将有效地禁用密码过期。

设置用户密码到期日期:

chage -E YYYY-MM-DD <username>

将 替换为要设置密码到期日期的用户名,YYYY-MM-DD 是日期格式。例如,2023-12-31 表示将密码到期日期设置为 2023 年 12 月 31 日。

强制用户在下次登录时更改密码:

chage -d 0 <username>

将 替换为要强制用户更改密码的用户名。设置密码的最小天数为 0,这将使用户在下次登录时被提示更改密码。

请注意,对于某些特定的用户(例如 root 用户),可能不应禁用密码过期或将密码到期日期延期太久。确保在进行密码到期管理时谨慎操作,并根据实际需求来设置合理的密码策略。

38、centos中bash test.sh和source tesh.sh的区别

执行结果:

# 三种执行结果一样
root@VM-4-14-centos shell]# ./nginx_pid.sh 
Nginx is running with PID: 13024
13025
13026
[root@VM-4-14-centos shell]# bash nginx_pid.sh 
Nginx is running with PID: 13024
13025
13026
[root@VM-4-14-centos shell]# source nginx_pid.sh 
Nginx is running with PID: 13024
13025
13026

在 CentOS 中,bash test.sh 和 source test.sh 是两种执行脚本的不同方式,具有一些区别。

1、bash test.sh:

  • 使用 bash 命令显式地执行脚本 test.sh。
  • 新开一个子进程来执行脚本,并在子进程中运行。
  • 脚本的执行结果不会影响当前 shell 环境。
  • 脚本中的变量和环境设置只在子进程中有效,不会影响当前 shell 环境。

2、source test.sh 或 . test.sh:

  • 使用 source 或 . 命令在当前 shell 环境中执行脚本 test.sh。
  • 在当前 shell 环境中运行,而不是新开一个子进程。
  • 脚本中的变量和环境设置会影响当前 shell 环境,例如,修改变量的值或添加新的环境变量。
  • 脚本中的函数和别名会在当前 shell 环境中生效。

通常情况下,如果您希望脚本中的变量、函数和别名等在当前 shell 环境中生效,可以使用 source 或 . 命令。这对于加载配置文件、设置环境变量等操作非常有用。如果您只需要在子进程中执行脚本,并且不需要对当前 shell 环境做出任何修改,可以使用 bash 命令来执行脚本。

39、centos中su - user和su user的区别

在 CentOS 中,su - user 和 su user 是两种切换用户身份的方式,有一些区别:

1、su - user:

  • 使用 - 参数切换到指定用户 user 的身份,并同时加载该用户的环境变量和配置文件。
  • 在切换到目标用户之前,会先切换到目标用户的家目录。
  • 该方式会重新加载目标用户的环境,包括修改的环境变量、别名、路径等。
  • 执行 su - user 后,当前工作目录会变为目标用户的家目录。

2、su user:

  • 不使用 - 参数切换到指定用户 user 的身份,不会加载该用户的环境变量和配置文件。
  • 不会切换到目标用户的家目录,而是继续在当前工作目录中运行。
  • 执行 su user 后,当前用户的环境保持不变,包括环境变量、别名等。

例:

# su - user
[root@VM-4-14-centos ~]# pwd
/root
[root@VM-4-14-centos ~]# su - yang
Last login: Mon Jun  5 22:15:47 CST 2023 on pts/0
[yang@VM-4-14-centos ~]$ pwd
/home/yang

# su user
[root@VM-4-14-centos ~]# pwd
/root
[root@VM-4-14-centos ~]# su yang
[yang@VM-4-14-centos root]$ pwd
/root

通常情况下,如果您需要完全切换到目标用户的身份,并获取目标用户的环境变量和配置文件,可以使用 su - user 命令。这对于需要运行以目标用户身份执行的命令、操作目标用户的文件等非常有用。

如果您只是暂时切换到目标用户的身份执行一些命令,但不需要加载目标用户的环境变量,可以使用 su user 命令。

请注意,使用 su 命令切换到其他用户时需要输入目标用户的密码。确保在切换用户时谨慎操作,并遵循安全最佳实践。

Logo

更多推荐