首页 > 系统相关 >Linux命令总结

Linux命令总结

时间:2024-08-12 15:49:32浏览次数:12  
标签:总结 文件 查看 echo 命令 sh Linux root 目录

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
 

标签:总结,文件,查看,echo,命令,sh,Linux,root,目录
From: https://www.cnblogs.com/SaturnRing/p/18355126

相关文章

  • JDK自带命令:深入理解Java程序的运行机制
    JDK(JavaDevelopmentKit)是Java开发和运行环境的核心,它提供了丰富的命令和工具来帮助我们更好地理解和控制Java程序的运行。本文将详细介绍JDK自带的一些关键命令,以及它们的详细参数和执行结果。1.jps(JavaVirtualMachineProcessStatusTool)jps命令用于列出正在运行的......
  • linux反向代理原理:帮助用户更好地优化网络架构
    Linux反向代理原理详解反向代理是一种在网络架构中常用的技术,尤其在Linux环境下被广泛应用。它可以帮助实现负载均衡、安全防护和请求缓存等功能。本文将深入探讨Linux反向代理的原理、工作机制以及其应用场景。1.什么是反向代理反向代理是指代理服务器接收客户端的请求,......
  • Linux C++ 开发3 - 你写的Hello world经过哪些过程才被计算机理解和执行?
    1.C/C++的编译过程1.1.预处理1.2.编译1.3.汇编1.3.1.汇编过程1.3.2.目标文件1.4.链接2.编译过程示例2.1.源代码2.2.逐步编译程序2.2.1.编译指令2.2.2.链接报错问题2.3.单步编译3.gcc/g++与gpp、as、ld的关系3.1.关系图3.2.示例演示......
  • cx_Freeze 打包生成Linux可执行文件
    准备一台linux系统环境安装cx_Freezepipinstallcx_Freeze准备两个py脚本1,app应用脚本,需要打包的app.pyimportrandomimporttimefromflaskimportFlask,jsonifyfromconcurrent.futuresimportThreadPoolExecutorapp=Flask(__name__)executor=ThreadPoolE......
  • Linux Debian 上安装桌面环境
    在Debian上安装桌面环境是一个相对简单的过程。以下是安装几种常见桌面环境的步骤:1.安装GNOME桌面环境更新软件包列表:sudoaptupdate安装GNOME桌面环境:sudoaptinstalltask-gnome-desktop2.安装KDEPlasma桌面环境更新软件包列表:sudoaptupdate......
  • k8s技术总结(一)
    在学习完docker之后,也很有必要再学习k8s的一些理论和技术。一、基础概念kubernetes(k8s)和docker在容器管理领域具有不同的侧重点和优势。当前docker主要关注单个容器的构建、运行和管理,而k8s则专注于大规模的容器编排和管理。k8s在以下几个特性中,更具有优势。特性1:自动化部署和......
  • linux下进程与计划任务管理
    linux下进程与定时任务的管理进程与程序程序:存储在硬盘、光盘等介质中含有可执行代码的可执行文件。不删除就永久存在。状态为静态。进程:进程是资源分配的最小单位。临时存储在内存中(关机消失)。动态执行的代码。一个父进程可以拥有多个子进程。若该进程的父进......
  • Linux常用基础命令
    1.1Linux系统的文件结构1/bin二进制文件,系统常规命令2/boot系统启动分区,系统启动时读取的文件3/dev设备文件4/etc大多数配置文件5/home普通用户的家目录6/lib32位函数库7/lib6464位库8/media......
  • 使用adb命令安装安卓apk包
       虽然网上也有许多adb安装安卓包的教程,但经过自己亲自试了一下后,觉得自己写下来的才是自己的收获。一、下载安装adb工具    下载地址有很多,这里是我下载的地址:https://pan.baidu.com/s/1mgGkNZM,下载文件比较齐全。    下载后是个压缩包,解压后一共有5......
  • Linux系统编程、网络编程
    Linux系统编程、网络编程前言一、进程的退出正常退出异常退出父进程等待子进程退出为什么要等待子进程退出二、消息队列消息队列操作:形象举例:疑惑点疑惑点一三、信号疑惑点1.signal函数的原型:四、线程疑惑点1.线程的创建1.1intpthread_create函数每个参数的含义......