【Linux学习】Linux命令总结

linux命令大全

常用快捷命令

 停止进程:ctrl + c
 清屏:ctrl + l 或者 clear
 彻底清屏:reset
 提示和补全功能:tab
 切换至以前执行过的命令:↑和↓
 CentOS切换至命令行界面:ctrl + alt + F2
 CentOS切换至图形界面:ctrl + alt + F1

Vim快捷操作

 跳到末尾:shift + g
 跳到开头:g

主机相关配置

 1、网络配置
 (1)查看主机当前IP信息:
  ifconfig
 
 (2)测试当前主机是否可以连接目的主机:
  ping 目的IP
 
  静态IP需要配置的项如下:
  BOOTPROTO="static" #IP 的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)
  ONBOOT="yes" #系统启动的时候网络接口是否有效(yes/no)
  IPADDR=192.168.195.100 #IP地址
  GATEWAY=192.168.195.2 #网关
  DNS1=192.168.195.2 #域名解析
 
 (4)使配置IP生效:
  service network restart 或者 systemctl restart network
 
 2、主机名和主机映射配置
 (1)查看当前主机名:
  hostname
 
 (2)修改当前主机名:
  vim /etc/hostname(修改完成后重启生效)
 
  不用重启修改主机名方式:
  hostnamectl set-hostname 主机名
 
 (3)配置主机hosts映射文件(为对应IP配置对应主机名):
  vim /etc/hosts
 
  加入以下:
  192.168.195.100 hadoop100
  192.168.195.101 hadoop101
  192.168.195.102 hadoop102
  192.168.195.103 hadoop103
  192.168.195.104 hadoop104
  192.168.195.105 hadoop105
 
  想要物理机和Xshell能直接通过主机名映射也要配置Window下的host文件
  目录位置:C:\Windows\System32\drivers\etc

服务管理

 1、CentOS 6版本(CentOS 7也兼容) 
 
  查看服务:/etc/init.d/
  #服务状态查看、关闭、开启、重启
  查看服务状态:service 服务名 status
    开启服务:service 服务名 start
    停止服务:service 服务名 stop
    重启服务:service 服务名 restart
     
 
  #服务自启状态查看、自启关闭、自启打开
  查看所有服务自启状态:setup
    查看所有服务自启状态(只显示 SysV 服务):chkconfig
    查看指定服务自启状态(只显示 SysV 服务): chkconfig 服务名 --list
     
    开启指定服务的自动启动:chkconfig 服务名 on
    关掉指定服务的自动启动:chkconfig 服务名 off
     
    开启服务指定级别的自动启动:chkconfig --level 指定级别 服务名 on
  关闭服务指定级别的自动启动:chkconfig --level 指定级别 服务名 off
 
  #查看当前运行级别
  查看当前运行级别:cat /etc/inittab
 
 2、CentOS 7版本
 
  查看服务:/usr/lib/systemd/system
     #服务状态查看、关闭、开启、重启
    开启服务:systemctl start 服务名
    停止服务:systemctl stop 服务名
    重启服务:systemctl restart 服务名
    查看服务状态:systemctl status 服务名
     
     #服务自启状态查看、自启关闭、自启打开
    查看所有服务自启状态:setup
    查看所有服务自启状态:systemctl list-unit-files
    查看指定服务自启状态::systemctl status 服务名
     
    开启指定服务的自动启动:systemctl enable 服务名
  关掉指定服务的自动启动:systemctl disable 服务名
 
  #查看、修改当前运行级别
  查看当前运行级别:systemctl get-default
  修改当前运行级别:systemctl set-default TARGET.target (这里 TARGET 取 multi-user 或者 graphic)
   
  CentOS7 的运行级别简化为:
  等价于原运行级别 3(多用户有网,无图形界面):multi-user.target
  等价于原运行级别 5(多用户有网,有图形界面):graphical.target
 
  切换到命令行界面:init 3 == ctrl + alt + F2
  切换到图形化界面:init 5 == ctrl + alt + F1

重启关机

 1、sync (将数据由内存同步到硬盘中)
 
 2、halt (立即停机,关闭系统但不断电)
 
 3、poweroff (立即关机,关闭系统且断电)
 
 4、reboot (立即重启)
 
 5、shutdown [选项]
 
  #取消shutdown操作
  shutdown -c
 
  #默认1分钟后关机
  shutdown == shutdown -h
  #指定时间后关机
  shutdown 时间 == shutdown -h 时间
  #立即关机
  shutdown now == shutdown -h now == poweroff
 
  #默认1分钟后停机
  shutdown -H
  #指定时间后停机
  shutdown -H 时间
  #立即停机
  shutdown -H now == halt
 
  #默认1分钟后重启
  shutdown -r
  #指定时间后重启
  shutdown -r 时间
  #立即重启
  shutdown -r now == reboot

帮助命令

 1、获得帮助信息
  (1)man 命令名 :获得任意命令帮助信息,例如ls(外部命令),cd(内嵌命令)
    (2)help 命令名:只能获得 Shell 内部命令的帮助信息,例如cd(内嵌)
  命令名 --help:只能 Shell 外部命令的帮助信息,例如ls(外部)
 
 2、查看命令的类型,判断是否为shell内嵌命令
  type 命令名

查看历史命令

 1、查看历史命令:history
  #查看过去历史命令
  hitory
  #查看之前调用的10条命令
  history
  #重复调用历史命令
  !命令编号
  #删除历史命令
  history -c

目录文件操作

 1、显示当前所在目录(print working directory):pwd
 
 2、列出目录内容(list):ls
  #列出当前目录内容
  ls
  ls -l == ll 长数据串列出,包含文件的属性与权限等等数据
  ls -a                 全部的文件,连同隐藏档(开头为.的文件) 一起列出来
  ls -h   以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
 
 3、切换路径:(Change Directory):cd
  #绝对路径切换,必须根目录/开头
  cd /home/kym/  
  #相对路径切换,不能以根目录/开头
  cd a/b/      
  cd ./a/b/ 一个.表示当前目录
  cd ../root/a/b/ 两个.表示上一级目录
  #cd操作
  cd == cd ~   回到家目录
  cd ..   回到上一级目录
  cd . 回到当前目录
  cd - 回到上一次所在目录
  cd -P 跳转到实际物理路径,而非快捷方式路径
 
 4、创建新目录(Make Directory):mkdir
  [格式]:mkdir 创建的目录
  #创建目录xiyou
  mkdir xiyou(相对路径)
     mkdir /xiyou (绝对路径)
     #同时创建多个目录
     mkdir a b
  #在xiyou目录(已存在)下创建目录mingjie
  mkdir xiyou/mingjie
  #迭代创建多层目录
  mkdir -p xiyou/dssz/meihouwang
 
  5、删除空目录(Remove Directory):rmdir
    [格式]:rmdir 要删除的空目录    
     #删除空目录xiyou
  rmdir xiyou (相对路径)
  rmdir /xiyou (绝对路径)
  #同时删除多个空目录
     rmdir a b
  #删除xiyou目录下的空目录mingjie
  rmdir xiyou/mingjie
  #迭代删除多层空目录
  rmdir -p xiyou/dssz/meihouwang
 
 6、创建空文件:touch
  [格式]:touch 文件名称(不带后缀默认为.txt)
  #创建一个新文件
  touch a(相对路径)
  touch /home/kym/a(绝对路径)
  #创建多个文件
  touch a b c d e f
  touch linode{1..10}
  #vim创建一个新文件
  不同于touch,vim是如果没有编辑该文件,该文件不存在
 
 
 7、复制目录或文件(Copy):cp
  [格式]:cp [选项] 源文件(目录) 目的目录(文件)
  #将文件initial-setup-ks.fg复制到目录kym中
  cp initial-setup-ks.fg /home/kym/
  #将文件initial-setup-ks.fg复制到文件a.txt中(文件a.txt无内容直接复制内容,有内容可选择覆盖)
  cp initial-setup-ks.fg /home/kym/a.txt
  #将文件initial-setup-ks.fg复制到目录kym中,kym目录有同名文件initial-setup-ks.fg(文件覆盖)
  cp initial-setup-ks.fg /home/kym/
  #强制覆盖不提示是否覆盖(直接使用linux原生命令)
  \cp
  #递归复制目录及其所有内容(包括文件和目录)
  cp -r a/ /home/kym/ (将当前目录a所有内容复制到目录kym中)
 
 8、删除目录或文件(Remove):rm
  [格式]:rm [选项] 文件或目录名称
 
  ###删除路径下文件
  rm a(相对路径)
  rm /home/kym/a(绝对路径)
  #加-f, 强制删除不用提示确认
  rm -f a
 
  ###删除目录
  #加-r, 递归删除目录及目录下所有内容
  rm -rf a/
  #删除当前目录下所有内容(./和什么多不写,都是在当前文件夹)
  rm -rf * == rm -rf ./*
  #删库跑路(谨慎!)
  rm -rf /*
  #加-v 显示指令的详细执行过程
  rm -v a
 
 9、移动目录或文件、重命名(Move):mv
  [格式]:mv /temp/movefile /targetFolder (移动文件到某个目录)
  [格式]:mv oldNameFile newNameFile (文件重命名)
  #移动文件到目的位置
  mv initial-setup-ks.cfg /home/kym/
     #移动文件到文件(将文件initial-setup-ks.cfg移动到kym下并重命名为1.cfg)
     mv initial-setup-ks.cfg /home/kym/1.cfg
     mv /home/kym/1.cfg initial-setup-ks.cfg
  #在当前目录下将文件移动到另一个文件,等于重命名
  mv initial-setup-ks.cfg 1.cfg
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 10、软链接(Link):ln
  [格式]:ln -s [原文件或目录] [软链接名]
  #为文件在创建软链接
  ln -s /root/info /home/kym/myInfo
  #为目录在创建软链接
  ln -s /root/foler /home/kym/myFoder
  #显示当前软链接实际路径
  pwd -P
  #进入当前软链接实际路径
  cd -P /home/kym/myFoder
  #删除软链接,软连接是一个文件
  rm -f 软链接名
  rm -rf 软链接名
  #会把软链接对应的真实目录下内容删掉
  rm -rf 软链接名/
 
  #硬链接,与inode相关,指向文件,删除所有硬链接删除源文件
  #如果是文件,链接数指硬链接个数
  #如果是目录,链接数指子文件夹个数
 

文件内容查看

1、文件内容查看(Catch):cat	
[格式]:cat [选项] 文件名
#查看当前文件a内容
cat a
#加-n显示所有行的行号
cat -n a

2、文件内容分屏查看:more
[格式]:more 要查看的文件
#more是基于VI编辑器的文本过滤器
#可按页显示文本文件内容,内置了若干快捷键,更方便
空格(f):向下翻一页
回车:向下翻一行
b:返回上一屏
=:输出当前行的行号
:+f:输出文件名和当前行的行号
q:退出

3、文件内容分屏查看:less
#功能与more指令类似,但是比more指令更加强大,支持各种显示终端
#less并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
空格(f):向下翻一页
回车:向下翻一行
b:返回上一屏
[pagedown]:向下翻动一页
[pageup] 向上翻动一页
=:显示当前行数,字节等信息
shift+g:转至结尾
g:转至开头
/字串:向下搜寻『字串』的功能;n:向下查找;N:向上查找
?字串:向上搜寻『字串』的功能;n:向上查找;N:向下查找
q:离开

4、文件头部内容查看:head
#默认查看文件头10行内容
head 文件
#查看文件头5行内容,5可以是任意行数
head -n 5 文件

5、文件尾部内容查看:tail
#默认查看文件尾部10行内容
tail 文件
#查看文件尾部5行内容,5可以是任意行数
tail -n 5 文件

#显示文件最新追加的内容,监视文件变化
tail -f 文件
ctrl+s暂停监视
ctrl+s继续监视
ctrl+c推出
#注意:vim追加内容不会被监视到,涉及到文件底层存在分区的索引
#vim追加改变内容后,文件的索引号汇编
ls -i info

输出内容到控制台

1、输出内容到控制台: echo
[格式]:echo [选项] [输出内容]
#不加引号,输出字符串
echo helloworld:helloworld
#不加引号,输出字符串时,只能输出一个空格
echo hello world:hello world
#加引号,可以输出原内容(单、双引号均可)
echo "hello world":hello world
#加-e, 支持\控制的转义字符
echo "hello\tworld":hello\tworld
echo -e "hello\tworld":hello world

#将echo输出内容重定向写入文件中
echo "内容" > 文件(覆盖写入)
echo "内容" >> 文件(追加到文件内容末尾)

#输出环境变量到控制台
env
#输出系统环境变量
echo $PATH
#输出用户环境变量
echo $USER
#输出用户主目录
echo $HOME
#输出主机名
echo $HOSTNAME

 

时间日期类

1、显示当前时间:date
(1)date (功能描述:显示当前时间)
(2)date +%Y (功能描述:显示当前年份)
(3)date +%m (功能描述:显示当前月份)
(4)date +%d (功能描述:显示当前是哪一天)
(5)date "+%Y-%m-%d %H:%M:%S" (功能描述:显示年月日时分秒)
(6)date +%s (功能描述:显示当前时间戳)

2、显示非当前时间:date -d
(1)date -d '1 days ago' (功能描述:显示前一天时间)
(2)date -d '-1 days ago' (功能描述:显示明天时间)

3、设置系统当前时间:date -s
date -s 字符串时间
date -s "2017-06-19 20:52:18"
4、同步时钟:ntpdate

5、查看日历:cal
#获取当前月份日历
cal
#获取当前近三月日历
cal -3
#获取本年日历
cal -y
#获取某年日历
cal 2023
#日历把周一放前面
cal -m

用户管理命令

#Linux是多用户、多任务的分时操作系统
#以下命令均采用root用户进行管理。
#root用户主目录在/root下,普通用户都会在/home/xxx下创建自己的主目录

1、添加新用户
useradd 用户名 (添加新用户) #默认主文件夹名为该用户名,并默认加入用户名组
useradd -g 组名 用户名 (添加新用户,并将该用户添加到某个组)
useradd -d /home/dave david #增加新用户david,并设置用户主目录名为dave

2、设置用户密码
passwd 用户名

3、查看用户id和用户组id
#显示tony的用户id,所在用户组id
id tony

4、查看创建了哪些用户
cat /etc/passwd

5、切换用户(Switch User)
#用户切换为嵌套切换
su 用户名称 (切换用户,只能获得用户的执行权限,不能获得环境变量)
su - 用户名称 (切换到用户并获得该用户的环境变量及执行权限)

root用户跳转普通用户不需要密码,普通用户跳转普通用户和root密码需要密码
exit:嵌套回退到上次用户权限

6、删除用户
(1)userdel 用户名 (删除用户但保存用户主目录)
(2)userdel -r 用户名 (用户和用户主目录,都删除)

7、查看当前用户信息
(1)whoami (显示目前用户名称)
(2)who am i (显示原始用户的用户名以及登陆时间)
(3)who (显示当前所有登录用户,加-T显示mesg是否开启,+表示开启)
[root@hadoop100 ~]# mesg
is y
[root@hadoop100 ~]# who -T
root ? :0 2023-09-17 15:57 (:0)
root + pts/0 2023-09-17 15:57 (:0)
root + pts/1 2023-09-20 14:23 (:0)

8、设置普通用户能通过sudo命令获得临时root权限
#要使普通用户能通过sudo命令获得临时root权限,首先需要先使用root权限对sudoers文件配置
(1)vi /etc/sudoers
#修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
tony ALL=(ALL) ALL

#配置如下,用户可采用sudo命令获得临时root权限,并且不需要输入密码
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
tony ALL=(ALL) NOPASSWD:ALL

#为什么管理员用户可以直接通过sudo命令获得临时root权限,而不用配置sudoers文件
#实际上已经配置了
%wheel ALL=(ALL) ALL #表示所有管理员用户组的用户可以通过sudo命令获得临时root权限

用户组管理命令

#每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。

1、新增用户组:groupadd
groupadd 组名

2、删除用户组:groupdel
groupdel 组名

3、修改用户组:groupmod
groupmod -n 新组名 老组名

4、查看创建了哪些用户组:
cat /etc/gruop

5、修改用户属于的用户组
#修改用户的初始登录组,给定的组必须存在。默认组id是 1。
usermod -g 用户组 用户名

文件权限类

-rw-------. 1 root root 1683 9月  16 23:27 anaconda-ks.cfg
-rw-r--r--. 1 root root 1714 9月 16 23:31 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 9月 16 23:50 公共
drwxr-xr-x. 2 root root 6 9月 16 23:50 模板
drwxr-xr-x. 2 root root 6 9月 16 23:50 视频
drwxr-xr-x. 2 root root 6 9月 16 23:50 图片
drwxr-xr-x. 2 root root 6 9月 16 23:50 文档
drwxr-xr-x. 2 root root 6 9月 16 23:50 下载
drwxr-xr-x. 2 root root 6 9月 16 23:50 音乐
drwxr-xr-x. 2 root root 6 9月 16 23:50 桌面

1、从左到右的 10 个字符表示
drwxr-xr-x
0123456789
(1)第0位
#确定文件属性
- 代表文件
d 代表目录
l 链接文件
c 字符类型设备文件 鼠标键盘等
b 块设备文件 硬盘等

(2)第1~3位
确定属主(该文件的所有者)拥有该文件的权限。---User
r w x 分别表示读、写、执行权限

(3)第4-6位
确定属组(所有者的同组用户)拥有该文件的权限,---Group
r - x 分别表示读、写、执行权限(属组一般不能写)

(4)第7-9位
确定其他用户拥有该文件的权限 ---Other
r - x 分别表示读、写、执行权限(其他用户也一般不能写)

2、r w x 作用文件和目录的不同解释
(1)作用到文件:
[r]代表可读(read): 可以读取,查看
[w]代表可写(write): 可以修改,但是不代表可以删除该文件,删除前提条件是对该文件所在的目录有写权限,才能删除该文件
[x]代表可执行(execute):可以被系统执行

(2)作用到目录:
[r]代表可读(read): 可以读取,ls可查看目录内容
[w]代表可写(write): 可以修改,目录内创建删除文件+删除目录+重命名目录
[x]代表可执行(execute):可以进入该目录


2、文件权限更改:chmod
u:所有者 g:所属组 o:其他用户 a:所有用户u、g、o 的总和
(1)第一种方式变更权限
chmod [{ugoa}{+-=}{rwx}] 文件或目录
chmod +x 文件或目录 #不加默认为a,即所有用户

(2)第二种方式变更权限
#用3个3位2进制数分别表示u,g,o的权限
chmod [mode=421] 文件或目录
#为u,g,o赋所有权限
chomd 777 a.txt
#u有读写权限,g,o只读
chomd 644 a.txt
#修改整个目录里面的所有文件的所有者、所属组、其他用户都具有可读可写可执行权限
chmod -R 777 xiyou

3、改变所有者:chown
#改变文件或者目录的所有者
chown [选项] [最终用户] [文件或目录] (功能描述:改变文件或者目录的所有者)
#递归操作
加 -R

4、改变所属组:chgrp
#改变文件或者目录的所属组
chgrp [选项] [最终用户组] [文件或目录]
#递归操作
加 -R

搜索查找类

1、查找文件或目录:find
[格式]:find [搜索范围] [选项]
-name<查询方式> 按照指定的文件名查找模式查找文件
-user<用户名> 查找属于指定用户名所有文件
-size<文件大小> 按照指定的文件大小查找文件,单位为:
b —— 块(512 字节)
c —— 字节
w —— 字(2 字节)
k —— 千字节
M —— 兆字节
G —— 吉字
(1)按文件名:根据名称查找/目录下的filename.txt文件。
#按名字a.txt在指定目录
find /root -name a.txt
#使用通配符
find xiyou/ -name "*.txt"
(2)按拥有者:
#查找/opt目录下,用户名称为kym的文件
find /opt -user kym
(3)按文件大小:
#在/home目录下查找大于10M的文件(+10M大于 -10M小于 10M等于)
find /home -size +10M

2、快速定位文件路径:locate
#locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给定的文件。
#Locate 指令无需遍历整个文件系统,查询速度较快。
#为了保证查询结果的准确度,管理员必须定期更新locate 时刻
(1)定位目录和文件路径
#由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
updatedb
locate tmp
(2)定位命令路径
which ls
which locate
which which
whereis locate

3、过滤查找grep及“|”管道符
[格式]:grep 选项 查找内容 源文件
#基于文件查找:在当前目录的文件initial-setup-ks.cfg中查找boot
grep -n boot initial-setup-ks.cfg
-n 显示匹配行及行号。
-i 忽略大小写
-v 反向选择
-m 1,最多匹配1行
#基于查看内容的查找,需要使用管道符“|”,表示将前一个命令的处理结果输出传递给后面的命令处理
ls | grep .cfg
cat test | grep xxx
#统计文件行数、单词数、字节数、文件名(wordCount):wc
wc info
#grep和wc配合使用
grep -n boot initial-setup-ks.cfg | wc

压缩和解压、归档

1、压缩/解压文件:gzip和gunzip 

(1)gzip(只能将文件压缩,压缩为.gz 文件)
[格式]:gzip 文件
gzip houge.txt
#gzip只能压缩文件不能压缩目录;不保留原来的文件;同时多个文件会产生多个压缩包

(2)gunzip(解压缩文件)
[格式]:gunzip 文件.gz
gunzip houge.txt.gz

2、压缩/解压文件或目录: zip/unzip
(1)zip(可以压缩文件和目录,压缩为.zip文件)
[格式]:zip [选项] XXX.zip 将要压缩的内容
#压缩文件,压缩后的名称为mypackage.zip
zip mypackage.zip houge.txt bailongma.txt
#递归压缩目录,加-r
zip -r myroot.zip /root
#注:zip压缩命令在windows/linux都通用,可以压缩目录且保留源文件。

(2)unzip(解压缩文件)
[格式]:unzip [选项] XXX.zip
#解压 mypackage.zip
unzip mypackage.zip
#加-d,指定解压后文件的存放目录
unzip mypackage.zip -d /tmp

3、文件或目录归档:tar
# 归档(打包)目录,压缩后的文件格式.tar.gz
[格式]:tar [选项] XXX.tar.gz 将要打包进去的内容
选项 功能
-c 产生.tar 打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解包.tar 文件
-C 解压到指定目录
#将多个文件houge.txt bailon info打包并压缩,命名为houma.tar.gz
tar -zcvf houma.tar.gz houge.txt bailon info
#压缩目录
tar -zcvf xiyou.tar.gz xiyou/
#将houma.tar.gz解压缩到当前目录
tar -zxvf houma.tar.gz
#指定解压缩目录为/temp
tar -zxvf houma.tar.gz -C /temp

磁盘查看和分区

1、以树状形式查看目录结构:tree
#使用前需要先安装tree工具
yum install tree

2、查看文件和目录占用的磁盘空间(disk usage):du
[格式]:du 目录/文件 (显示目录下每个子目录的磁盘使用情况)
选项 功能
-h 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;human readable
-a 不仅查看子目录大小,还要包括文件
-c 显示所有的文件和子目录大小后,显示总和
-s 只显示总和
--max-depth=n 指定统计子目录的深度为第 n 层
#显示目录下每个子目录和子文件的磁盘使用情况,以及磁盘占用总大小
du -ah
#查看当前用户主目录占用的磁盘空间大小
du -sh
#显示目录下1级子目录和子文件的磁盘使用情况,以及磁盘占用总大小
du --max-depth=1 -ah

3、查看磁盘空间使用情况(disk free):df
[格式]:df 选项 (列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况)
[root@hadoop101 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 13M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda3 45G 5.0G 40G 12% /
/dev/sda1 1014M 169M 846M 17% /boot
tmpfs 394M 36K 394M 1% /run/user/0

4、查看内存使用情况:free
[root@hadoop100 ~]# free -h
total used free shared buff/cache available
Mem: 3.8G 1.0G 1.5G 60M 1.4G 2.5G
Swap: 4.0G 0B 4.0G

5、查看块设备挂载情况:lsblk
[root@hadoop100 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT#挂载点
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 4G 0 part [SWAP]
└─sda3 8:3 0 45G 0 part /
sr0 11:0 1 1024M 0 rom #光盘驱动

#加-f 查看详细的设备挂载情况,包括文件系统等
[root@hadoop100 ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 7e846417-8a39-4852-9b3b-d2fd45b22add /boot
├─sda2 swap 0baad5b7-29c8-4851-a700-2fc7de658766 [SWAP]
└─sda3 xfs df75b0d0-4cfd-4be3-aaf4-74522b52332a /
sr0

硬盘类型:IDE、SATA、SCSI
硬盘命名:IDE(hda1 hada2 hadb1...)、SATA、SCSI(sda1 sda2 sdb1 sdb2...)

6、挂载/卸载:mount/umount
挂载:将文件系统逻辑位置映射到磁盘的物理位置
物理分区1-----挂载-----> /boot
物理分区2-----挂载-----> /
物理分区3-----挂载-----> SWAP

(1)挂载设备
[格式]:mount [-t vfstype] [-o options] device dir
#挂载光盘镜像文件,将设备/dev/cdrom 挂载到 挂载点/mnt/cdrom 中
mount -t iso9660 /dev/cdrom /mnt/cdrom/
mount /dev/cdrom /mnt/cdrom/ (文件系统类型自动识别,省略-t)
#挂在前要先链接光盘光驱,注销root重新登录即可

(2)卸载设备
[格式]:umount 设备文件名或挂载点
#卸载光盘镜像文件
umount /mnt/cdrom

(3)设置开机自动挂载
vi /etc/fstab
#设置dev/cd自动挂载
/dev/cdrom /mnt/cdrom iso8660 defaults 0 0
#第一位为dump选项,1表示系统定期备份,0表示不备份;第二位表示文件系统检查优先级,0不检查。

7、磁盘分区:fdisk
(1)查看磁盘分区详情
[格式]:fdisk -l


(2)对新增硬盘进行分区操作

添加新硬盘步骤:
#步骤1:手动新增,新增硬盘后要reboot

#步骤2:对新增硬盘/dev/sdb进行分区
[格式]:fdisk 硬盘设备名
fdisk /dev/sdb

#步骤3:输入命令进行分区

#步骤4:指定文件系统
mkfs -t xfs /dev/sdb1

#步骤5:硬盘挂载
mount /dev/sdb1 /home/kym

进程管理类

计算机中,一个正在执行的程序或命令,被叫做“进程”(process);(前台进程)
启动之后一只存在、常驻内存的进程,一般被称作“服务”(service);(后台进程),服务名加d为守护进程

1、查看当前系统进程状态(process status):ps
(1)[格式]:ps (只显示当前用户进程和终端相关进程)

(2)[格式,BSD风格]:
#显示所有系统进程
ps aux
#分屏显示所有系统进程
ps aux | more
ps aux | less
#查看某进程
ps aux | grep 进程pid
#选项含义:
a 列出带有终端的所有用户的进程
x 列出当前用户的所有进程,包括没有终端的进程
u 面向用户友好的显示风格

(3)[格式,UNIX风格]:(可以查看子父进程之间的关系)
#显示所有系统进程
ps -ef
#分屏显示所有系统进程
ps -ef| more
ps -ef| less
#查看某进程
ps -ef| grep 进程pid
#选项含义:
-e 列出所有进程
-u 列出某个用户关联的所有进程,后面加用户
-f 显示完整格式的进程列表

如果想查看进程的CPU占用率和内存占用率,可以使用ps aux;
如果想查看进程的父进程ID可以使用ps -ef


2、终止进程:kill
(1)通过进程号杀死进程
kill [选项] 进程号
(2)通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用
killall 进程名称
(3)案例实操
#杀死浏览器进程,加-9 表示强迫进程立即停止
kill -9 5102
#通过进程名称杀死进程
killall firefox
#通过进程名称杀死sshd守护进程
killall ssh #谨慎使用,需要在主机上重新打开sshd服务,才能远程连接

3、查看进程树:pstree
(1)显示所有进程父子关系
pstree
(2)-p 显示进程的PID
pstree -p
(3)-u 显示进程的所属用户
pstree -u

4、实时监控系统进程状态:top
执行top后,可以按shift + p(CPU)、m(内存)、n(进程号) 对查询出的进程结果进行排序
top有ps和kill所有功能,进入后,也可以按u选择监测某用户进程,也可以按k终止进程

(1)指定刷新秒数为1s
top -d 1
(2)不显示闲置进程(从上次显示之后到目前一直没占用CPU),僵尸进程
top -i
(3)显示指定进程监控系统进程状态
top -p 2575
(4)查看磁盘IO读写情况:iotop
需要安装一下:yum install iotop、
iotop -o(直接查看输出比较高的磁盘读写程序)

5、显示网络状态和端口占用信息:netstat
ifconfig,ip查看网络信息很少

(1)查看某进程网络信息
netstat -anp | grep 进程号
(2)查看某网络端口号占用情况
netstat –nlp | grep 端口号
(3)查看某端口占用情况
netstat -tunlp | grep 端口号

#选项含义:
-a 显示所有正在监听(listen)和未监听的套接字(socket)
-n 拒绝显示别名,能显示数字的全部转化成数字
-l 仅列出在监听的服务状态
-p 表示显示哪个进程在调用
-t或--tcp 显示TCP传输协议的连线状况。
-u或--udp 显示UDP传输协议的连线状况。

#主机中进程间通信:
主机1进程:由主机1的IP + 套接字(port端口号)确定
主机2进程:由主机2的IP + 套接字(port端口号)确定
IP确定哪台主机,套接字(port端口号)确定哪个进程

6、系统定时任务:crontab
(1)使用crontab,首先要开启 crond 服务
systemctl restart crontab
(2)使用crontab

#选项含义:
-e 编辑 crontab 定时任务
-l 查询 crontab 任务
-r 删除当前用户所有的 crontab 任务

#进入crontab编辑界面,会打开vim编辑定时任务。
crontab -e

* * * * * 执行的任务

#每隔1分钟,向/root/bailongma.txt文件中添加一个 11 的数字
*/1 * * * * /bin/echo ”11” >> /root/bailongma.txt

软件包管理

RPM(RedHat Package Manager),RedHat软件包管理工具,类似windows里面的setup.exe,是Linux这系列操作系统里面的打包安装工具,它虽然是RedHat的标志,但理念是通用的。(Ubuntu包管理工具为apt)

RPM包的名称格式
Apache-1.3.23-11.i386.rpm
- “apache” 软件名称
- “1.3.23-11”软件的版本号,主版本和此版本
- “i386”是软件所运行的硬件平台,Intel 32位处理器的统称
- “rpm”文件扩展名,代表RPM软件包

1、RPM查询命令:rpm -qa
(1)查询当前所安装(q)的所有(a)RPM软件包
rpm -qa
(2)由于软件包比较多,一般都会采取过滤查找。
rpm -qa | grep RPM软件包
(3)查询某RPM软件详细信息
rpm -qi firefox

2、RPM卸载命令:rpm -e
(1)rpm -e RPM软件包
(2)rpm -e --nodeps RPM软件包

#选项含义
-e 卸载软件包
--nodeps 卸载软件时,不检查依赖。这样的话,
那些使用该软件包的软件在此之后可能就不能正常工作.

3、RPM 安装命令:rpm -ivh
rpm -ivh RPM包全名

#选项含义
-i install,安装
-v --verbose,显示详细信息
-h --hash,进度条
--nodeps 安装前不检查依赖
仓库配置:YUM 

YUM(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的 Shell 前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

1、yum常用命令
[格式]:yum [选项] [参数]
#选项:
-y 对所有提问都回答“yes”
#参数
install 安装 rpm 软件包
update 更新 rpm 软件包
check-update 检查是否有可用的更新 rpm 软件包
remove 删除指定的 rpm 软件包
list 显示软件包信息
clean 清理 yum 过期的缓存
deplist 显示 yum 软件包的所有依赖关系

2、修改网络YUM源
在/etc/yum.repos.d/目录下,替换默认的 repos 文件

Shell编程

外层应用程序--->Shell--->linux内核--->硬件

什么是Shell?
Shell是一个命令行解释器程序(c语言编写),也是用户和linux内核之间的接口,为用户或应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Bash(GNU Bourne-Again Shell)是最常用的一种Shell,是当前大多数Linux发行版的默认Shell。
即Shell是总称,Bash是Shell的一个版本。此外,还包括sh,ksh,rsh,csh等
Shell既是一种命令语言,又是一种程序设计语言(解释型的编程语言)。

什么是Shell脚本?
Shell脚本:将Linux命令和Shell自身的编程语言封装形成可执行的文件(.sh),Shell脚本通常用来批量重复执行一些业务。
Shell脚本优点:
1、交互式,易编写、易调试、灵活性强。
2、可以通过Shell脚本重复批量地执行一些任务,适合一些自动化的业务,例如系统性能监视、环境搭建、日志分析等
3、启动快速
Shell脚本缺点:
1、不适合复杂业务逻辑的大型业务
2、语法复杂,没有其他脚本语言数据结构丰富
3、执行速度慢
4、出现错误时往往代价高昂,一个命令出现错误就会相差十万八千里。

查看当前使用的Shell命令解释器
#echo $SHELL


1、编写shell脚本
脚本以#!/bin/bash开头(指定解析器)
[atguigu@hadoop101 shells]$ touch helloworld.sh
[atguigu@hadoop101 shells]$ vim helloworld.sh
在 helloworld.sh 中输入如下内容
#!/bin/bash
echo "helloworld

2、shell执行方式
(1)采用 bash 或 sh+脚本的相对路径或绝对路径(不用赋予脚本+x 权限)
sh ./helloworld
sh /home/atguigu/shells/helloworld.sh
bash ./helloworld.sh
bash /home/atguigu/shells/helloworld.sh

(2)采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
helloworld.sh #报错,配置系统环境变量即可直接执行

chmod +x helloworld
./helloworld.sh
/home/atguigu/shells/helloworld.sh

(3)使用. 和 source 的方式来执行
. helloworld.sh
source helloworld.sh

3、变量
全局变量(所有子shell可见),局部变量
(1)查看某个系统变量的值
echo $HOME
(2)查看所有全局环境变量
env
printenv
#查看某个全局环境变量,不用加$
printenv USER
#当要用到环境变量的值时,加$
ls $HOME
(3)显示当前Shell中所有环境变量
set

(4)变量定义
#定义变量 A,等号两侧不能有空格
A=5
echo $A
5
#给变量A重新赋值
A=8
echo $A
8
#撤销变量 A
unset A
echo $A
#声明静态的变量 B=2,不能 unset
readonly B=2
echo $B
2
B=9 #报错
-bash: B: readonly variable
#在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
C=1+2
echo $C
1+2
#变量的值如果有空格,需要使用双引号或单引号括起来
D=I love banzhang
-bash: world: command not found #报错
D="I love banzhang"
echo $D
I love banzhang
#可把变量提升为全局环境变量,可供其他 Shell 程序使用
export 变量名
vim helloworld.sh
在helloworld.sh 文件中增加 echo $B
#!/bin/bash
echo "helloworld"
echo $

4、特殊变量
[atguigu@hadoop101 shells]$ vim parameter.sh
写入以下:
#!/bin/bash
echo '==========$n=========='
#n为数字,$0代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}
echo $0 #默认为路径下的脚本名
echo $1
echo $2
echo '==========$#=========='
#获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性
echo $#
echo '==========$*=========='
#这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
echo $*
echo '==========$@=========='
#这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
echo $@

[atguigu@hadoop101 shells]$ ./parameter.sh a b c d e f g
==========$n==========
./parameter.sh
a
b
==========$#==========
7
==========$*==========
a b c d e f g
==========$@==========
a b c d e f g

$? 最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。
[atguigu@hadoop101 shells]$ ./helloworld.sh
hello world
[atguigu@hadoop101 shells]$ echo $?
0

5、运算符

#采用expr运算
[root@hadoop100~]# expr 1+2
1+2

[root@hadoop100~]# expr 1 + 2
3

[root@hadoop100~]# exprl 5 - 2
3

[root@hadoop100 ~]# expr 5 * 2
expr:语法错误

[root@hadoop100 ~]# expr 5 \* 2
10

[root@hadoop100 ~]# a=`expr 5 \* 2` 或者 a=$(expr 5 \* 2)
[root@hadoop100~]# echo $a
10

#采用 “$((运算式))” 或 “$[运算式]
[root@hadoop100~]# echo $[5 * 2]
10

[root@hadoop100~]# echo $[5*2] #常用
10
[root@hadoop100~]# echo $((5*2)) #常用
10

[root@hadoop100~]# a=$[6+8]
[root@hadoop100~]# echo $a
14

例子:
计算(2+3)*4 的值
[atguigu@hadoop101 shells]# S=$[(2+3)*4]
[atguigu@hadoop101 shells]# echo $S

shell编写求输入两数的和
vim add.sh
#!/bin/bash
sum=$[$1 +$2] #运算时要加$
echo sum=$sum
./add.sh 25 89

6、条件判断
(1)相等,不等条件判断
#test condition
[root@hadoop100 scripts]# a=hello
[root@hadoop100 scripts]# echo $a
hello

[root@hadoop100 scripts]# test $a = hello
[root@hadoop100 scripts]# echo $?
0

[root@hadoop100 scriptsl# test $a = Hello
[root@hadoop100 scriptsj# echo $?
1

#[ condition ](注意 condition 前后要有空格)

[rootghadoop100 scripts]#[ $a = Hello ] #除了前后要空格,等号左右也要有空格
[root@hadoop100 scriptsj# echo $?
0

[root@hadoop100 scripts]#[ $a = hello ]
[root@hadoop100 scriptsj# echo $?
1

[root@hadoop100 scripts]#[ $a=hello ] #识别为1个值,为true,返回0
[root@hadoop100 scriptsj# echo $?
0

[root@hadoop100 scripts]#[ afafdsfadsa ] #输入一串字符串,为true,返回0
[root@hadoop100 scripts]# echo $?
0

[root@hadoop100 scripts]#[ ] #空值,为false,返回1
[root@hadoop100 scripts]# echo $?
1

[root@hadoop100 scripts]#[ $a != Hello ] #判断是否不等
[root@hadoop100 scriptsj# echo $?
1

[rootahadoop100 scripts]#[ $a != hello ]
[root@hadoop100 scriptsj# echo $?
0

[root@hadoop100 scripts]#[ 2 = 8 ] #为false,返回1(以字符串形式比较)
[root@hadoop100 scriptsj# echo $?
1

[root@hadoop100 scripts]#[ 2 = 2 ] #为true,返回0(以字符串形式比较)
[root@hadoop100 scriptsj#echo $?
0

[root@hadoop100 scripts]#[ 2 < 5 ] #报错,数值比较不能用符号比较
[root@hadoop100 scriptsj#echo $?
0

(2)常用判断条件
#两个整数之间比较
-eq 等于(equal) -ne 不等于(not equal)
-lt 小于(less than) -le 小于等于(less equal)
-gt 大于(greater than) -ge 大于等于(greater equal)
注:如果是字符串之间的比较 ,用等号“=”判断相等;用“!=”判断不等。
#按照文件权限进行判断
-r 有读的权限(read)
-w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-e 文件存在(existence)
-f 文件存在并且是一个常规的文件(file)
-d 文件存在并且是一个目录(directory)


例1:helloworld.sh 是否具有写权限
[atguigu@hadoop101 shells]$ [ -w helloworld.sh ]
[atguigu@hadoop101 shells]$ echo $?
0
例2:/home/atguigu/cls.txt 目录中的文件是否存在
[atguigu@hadoop101 shells]$ [ -e /home/atguigu/cls.txt ]
[atguigu@hadoop101 shells]$ echo $?
1

(3)多条件判断
&& 表示前一条命令执行成功时,才执行后一条命令,
|| 表示上一条命令执行失败后,才执行下一条命令
a=27
[ $a -lt 20 ] && echo "$a < 20" || echo "$a >= 20"
27 >= 20
a=15
[ $a -lt 20 ] && echo "$a < 20" || echo "$a >= 20"
15 < 20
[ atguigu ] && echo OK || echo notOK
oK
[ ] && echo OK || echo notOK
notOK

7、分支语句
流程控制:顺序,(选择)分支,循环

注意事项:
[ 条件判断式 ],中括号和条件判断式之间必须有空格
if 后要有空格

(1)单分支——if
#格式1,加;
if [ 条件判断式 ];then #加;表示连续执行一行两个语句
程序
fi

#格式2
if [ 条件判断式 ] #不加;
then
程序
fi


例1:
#!/bin/bash
if [ "$1"x = "kym"x]
then
echo "welcome,kym"
fi

例2:
if [ $a -gt 18 ]; then echo OK; fi
OK
a=15
if [ $a -gt 18 ]; then echo OK; fi

例3:
a=36
if [ $a -gt 18 ] && [ $a -lt 35 ]; then echo OK; fi
a=25
if [ $a -gt 18 ] && [ $a -lt 35 ]; then echo OK; fi
oK

例如4:-a表示and,-o表示or
a=40
if [ $a -gt 18 -a $a -lt 35 ]; then echo OK; fi
a=20
if [ $a -gt 18 -a $a -lt 35 ]; then echo OK; fi
OK

(2)多分支——if elif else
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi

例1:
#!/bin/bash
if [ "$1"x = "kym"x ] #字符串判断
then
echo "welcome,kym"
fi

if [ $2 -lt 18 ]
then
echo "未成年"
else
echo "成年"
fi

例2:
[atguigu@hadoop101 shells]$ touch if.sh
[atguigu@hadoop101 shells]$ vim if.sh
#!/bin/bash
if [ $1 -eq 1 ]
then
echo "banzhang zhen shuai"
elif [ $1 -eq 2 ]
then
echo "cls zhen mei"
fi
[atguigu@hadoop101 shells]$ chmod 777 if.sh
[atguigu@hadoop101 shells]$ ./if.sh 1
banzhang zhen shuai

(3)多分支——case语句

case $变量名 in
"值 1")
如果变量的值等于值 1,则执行程序 1
;;
"值 2")
如果变量的值等于值 2,则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

注意事项:
(1)case 行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
(2)双分号“;;”表示命令序列结束,相当于break。
(3)最后的“*)”表示默认模式,相当于default。

例:
$ touch case.sh
$ vim case.sh
!/bin/bash
case $1 in
"1")
echo "one"
;;
"2")
echo "two"
;;
"3")
echo "three"
;;
*)
echo "number else"
;;
esac

8、循环
(1)for循环
#格式1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done

#格式2
for 变量 in 值 1 值 2 值 3…
do
程序
done

#例1:
touch for1.sh
vim for1.sh
#!/bin/bash
sum=0
for((i=0;i<=100;i++)) #(())里数值运算可以直接用> >= < <=
do
sum=$[$sum+$i]
done
echo $sum
[atguigu@hadoop101 shells]$ chmod 777 for1.sh
[atguigu@hadoop101 shells]$ ./for1.sh
5050
#例2:
for os in linux windows macos; do echo $os; done
linux
window
smacos
#例3:
for i in {1..100}; do sum=$[$sum+$i]; done; echo $sum
5050

#$*和$@的区别

#!/bin/bash
echo '=============$*============='
for i in $*
do
echo "ban zhang love $i"
done
echo '=============$@============='
for j in $@
do
echo "ban zhang love $j"
done
[atguigu@hadoop101 shells]$ chmod 777 for3.sh
[atguigu@hadoop101 shells]$ ./for3.sh cls mly wls
=============$*=============
banzhang love cls
banzhang love mly
banzhang love wls
=============$@=============
banzhang love cls
banzhang love mly
banzhang love wls

#!/bin/bash
echo '=============$*============='
for i in "$*"
#$*中的所有参数看成是一个整体,所以这个 for 循环只会循环一次
do
echo "ban zhang love $i"
done
echo '=============$@============='
for j in "$@"
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
do
echo "ban zhang love $j"
done
[atguigu@hadoop101 shells]$ chmod 777 for4.sh
[atguigu@hadoop101 shells]$ ./for4.sh cls mly wls
=============$*=============
banzhang love cls mly wls
=============$@=============
banzhang love cls
banzhang love mly

(2)while循环
[格式]:
while [ 条件判断式 ]
do
程序
done

例1:
[atguigu@hadoop101 shells]$ touch while.sh
[atguigu@hadoop101 shells]$ vim while.sh
#!/bin/bash
i=1
while [ $a -le $1 ]
do
sum=$[$sum+$a]
a=$[$a+1]
done
echo $sum
[atguigu@hadoop101 shells]$ chmod 777 while.sh
[atguigu@hadoop101 shells]$ ./while.sh 100
5050

例2:
a=l
while [ $a -le $1 ]
do
let sum2+=a
let a++
done
echo $sum2
1、读取控制台输入:read

read (选项) (参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)如果-t 不加表示一直等待
参数
变量:指定读取值的变量名

例:
[atguigu@hadoop101 shells]$ touch read.sh
[atguigu@hadoop101 shells]$ vim read.sh
#!/bin/bash
read -t 7 -p "Enter your name in 7 seconds :" NN
echo $N
1、函数
(1)系统函数

截取路径文件名:basename
basename [string/pathname] [suffix] (会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来,可以理解为取路径里的文件名称)
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix 去掉。
#例
截取该/home/atguigu/banzhang.txt 路径的文件名称。
[atguigu@hadoop101 shells]$ basename /home/atguigu/banzhang.txt
banzhang.txt
[atguigu@hadoop101 shells]$ basename /home/atguigu/banzhang.txt .txt
banzhang

截取绝对路径:dirname
dirname 文件绝对路径 (从给定的包含绝对路径的文件名中去除文件名,然后返回剩下的路径部分,可以理解为取文件路径的绝对路径名称
#例1
获取 banzhang.txt 文件的路径。
[atguigu@hadoop101 ~]$ dirname /home/atguigu/banzhang.txt
/home/atguigu
#例2
# !/bin/bash
echo '===========$n============'
echo script name : $(basename $0.sh) #$(命令):调用系统函数,命令替换
echo script path :$(cd $(dirname $0);pwd) #保证截取绝对路径
echo 1st paramater : $1
echo 2nd parameter: $2
echo '===========$#============'
echo parameter numbers : $#
echo '===========$*============'
echo $*
echo '===========$@============'
echo $@

(2)自定义函数

[ function ] funname[()]
{
Action;
[return int;]
}


(1)必须在调用函数地方之前,先声明函数,shell 脚本是逐行运行。不会像其它语言一
样先编译。
(2)函数返回值,只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将
以最后一条命令运行结果,作为返回值。return 后跟数值 n(0-255)

#例
[atguigu@hadoop101 shells]$ touch fun.sh
[atguigu@hadoop101 shells]$ vim fun.sh
#!/bin/bash
function sum()
{
s=0
s=$[$1+$2]
echo "$s"
}
read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;
[atguigu@hadoop101 shells]$ chmod 777 fun.sh
[atguigu@hadoop101 shells]$ ./fun.sh
Please input the number1: 2
Please input the number2: 5
7
1、正则表达式

#正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在 Linux 中,grep,sed,awk 等文本处理工具都支持通过正则表达式进行模式匹配。
(1)常规匹配
一串不包含特殊字符的正则表达式匹配它自己,例如:
[atguigu@hadoop101 shells]$ cat /etc/passwd | grep atguigu
就会匹配所有包含 atguigu 的行
(2)特殊字符
#特殊字符:^
^ 匹配一行的开头,例如:
cat /etc/passwd | grep ^a
会匹配出所有以 a 开头的行

#特殊字符:$
$ 匹配一行的结束,例如
cat /etc/passwd | grep t$
会匹配出所有以 t 结尾的行
思考:^$ 匹配什么?
匹配空行,加-n 显示空行所造行数

#特殊字符:.
. 匹配一个任意的字符,例如
cat /etc/passwd | grep r..t
会匹配包含 rabt,rbbt,rxdt,root 等的所有行

特殊字符:*
* 不单独使用,他和上一个字符连用,表示匹配上一个字符 0 次或多次,例如
[atguigu@hadoop101 shells]$ cat /etc/passwd | grep ro*t
会匹配 rt, rot, root, rooot, roooot 等所有行
思考:.* 匹配什么?
匹配任意字符串
grep ^a.*in$ #匹配指定开头结尾,中间任意
grep ^a.*var.*in$ #匹配指定开头结尾,中间有var

字符区间(中括号):[ ]
[ ] 表示匹配某个范围内的一个字符,例如
[6,8]------匹配 6 或者 8
[0-9]------匹配一个 0-9 的数字
[0-9]*------匹配任意长度的数字字符串
[a,b]------匹配 a 或者 b
[a-z]------匹配一个 a-z 之间的字符
[a-z]* ------匹配任意长度的字母字符串
[a-c, e-f]-匹配 a-c 或者 e-f 之间的任意字符
cat /etc/passwd | grep r[a,b,c]*t
会匹配 rt,rat, rbt, rabt, rbact,rabccbaaacbt

特殊字符:\
\ 表示转义,并不会单独使用。由于所有特殊字符都有其特定匹配模式,当我们想匹配某一特殊字符本身时(例如,我想找出所有包含 '$' 的行),
就会碰到困难。此时我们就要将转义字符和特殊字符连用,来表示特殊字符本身,例如
cat /etc/passwd | grep ‘a\$b’ 就会匹配所有包含 a$b 的行。注意需要使用单引号将表达式引起来。

匹配手机号码:
grep ^1[34579][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$
grep -E ^1[34579][0-9]{9}$
1、文本处理工具
(1)剪切:cut
cut 的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
cut [选项参数] filename
说明:默认分隔符是制表符
#选项参数说明
选项参数 功能
-f 列号,提取第几列
-d 分隔符,按照指定分隔符分割列,默认是制表符“\t”
-c 按字符进行切割 后加加 n 表示取第几列 比如 -c 1
(2)awk
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
awk [选项参数] ‘/pattern1/{action1} /pattern2/{action2}...’ filename
pattern:表示 awk 在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
#选项参数说明
-F 指定输入文件分隔符
-v 赋值一个用户定义变量

其他命令补充

 1、给出文件不同
 cmp 文件1 文件2
 
 2、给出两个文件不同的内容
 diff 文件1 文件2
 
 3、查看系统信息
 uname
 uname -a

 

面试常考命令梳理

 1、文件权限
  chmod [{ugoa}{+-=}{rwx}] 文件或目录
  chmod [mode=421] 文件或目录
  -R 表示迭代赋权,例如 chmod -R 777 xiyou
 
 2、磁盘查看和分区类
  查看文件和目录占用的磁盘空间:du -h
  查看磁盘空间使用情况:df -h
  查看磁盘IO读写情况:iotop
  需先安装包:yum install iotop
  iotop -o(直接查看输出比较高的磁盘读写程序)
 
 3、查看系统内存使用情况:
  free -h
 
 4、进程管理类
  查看系统进程信息:
         ps
         ps aux (可以查看到CPU和内存占用情况)
         ps -ef (可以查看到进程的父子京城关系)
  查看某进程的pid:
         ps aux | grep 进程名  
         ps -ef | grep 进程名
    查看某进程信息:
         ps aux | grep 进程pid/进程名  
         ps -ef | grep 进程pid/进程名  
    查看当前CPU占用最高的进程:
        (1)方法1
        使用sort对CPU占用进行排序:ps aux|sort -nr -k3|head -n 1  
            参数解析
             sort #排序命令
             -nr #默认使用字符串排序,n代表使用数值进行排序 默认从小到大排序 r代表反向排序
             -k3 #以第3列进行排序
            head -n 1 显示第一行内容
        (2)方法2
        top,可以按shift + p(CPU)、m(内存)、n(进程号) 对查询出的进程结果进行排序
    实时查看系统进程状态:
    top
    实时查看指定进程状态:
         top -p 进程pid              
    结束进程:
    (1)kill -9 进程pid
    (2)kullall 进程名   //pkill  
    查看进程树:pstree
        (1)显示所有进程父子关系:pstree
        (2)-p 显示进程的PID:pstree -p
        (3)-u 显示进程的所属用户:pstree -u
 
 5、查看网络状态和端口占用信息:netstat
 
  查看端口是否被占用:netstat -anp
  (1)查看某进程网络信息
  netstat -anp | grep 进程pid
  (2)查看某端口号占用情况
  netstat –nlp | grep 端口号
  (3)查看某端口号占用情况(TCP和UDP)
  netstat -tunlp | grep 端口号
 
 6、压缩/解压文件
  gzip/ungzip:只能压缩/解压文件
  zip/unzip:
  #压缩文件
  zip xxx.zip 文件
  #压缩目录,加-r
  zip -r xxx.zip 目录
  #解压文件到当前目录
    unzip xxx.zip
    #加-d,指定解压后文件的存放目录
    unzip xxx.zip -d /tmp
    tar -zcvf压缩和tar -zxvf 解压:
     #压缩文件
  tar -zcvf xxx.tar.gz 文件
     #压缩目录
      tar -zcvf xxx.tar.gz 目录
     #解压缩
    tar -zxvf xxx.tar.gz
     #加-C,指定解压缩目录为/temp
    tar -zxvf xxx.tar.gz -C /tmp
 7、文件查找和定位
  查找:find
  (1)按文件名查找:find /root -name a.txt
         #使用通配符
         find xiyou/ -name "*.txt"
    (2)按拥有者查找:find /opt -user kym
    (3)按文件大小查找:find /home -size +10M
    定位:locate
 
 8、日志查看
  cat 文件
  more 文件
  less 文件
  head 文件   head -n 5 文件
  tail 文件   tail -n 5 文件
  查看动态日志: tail -f 文件(显示文件最新追加的内容,监视文件变化)  
 
 9、统计文件行数、单词数、字节数、文件名:
  wc 文件
    统计文件行数
    wc -l 文件
 
 10、查看当前系统用户:whoami
 11、快速查看某命令:whatis
 12、查看某命令所在路径:which
 13、查看某命令所在所有路径:whereis
 
 
 
 
 
 ----------------------------------------------------------------------------
  linux搭建测试环境
  1、解压文件:tar
  2、测试发现bug,查看日志 : tail -f
  3、修改配置:vim
  4、安装tomcat:看服务有没有启动可以用:systemctl status tomcat
  或者 ps -ef | grep tomcat
  5、查看端口是否被进程占用:netstat -anp
  6、结束进程 kill -9 进程pid
 
posted @ 2024-08-12 15:53  阿臣的发际线  阅读(7)  评论(0编辑  收藏  举报