Linux常见命令

vim快捷键

命令含义
yy拷贝当前行
5yy拷贝当前向下的5行
dd删除当前行
5dd删除当前向下5行
命令行下:set nu设置文件的行号
set nonu取消行号
u撤销动作
20 shift+g将光标移动到20行
gg文首
G文末
命令行+/+关键字+回车查找,输入n就是查找下一个

用户管理

命令含义
useradd添加用户
passwd 用户名修改用户密码
userdel 用户名删除用户,保留家目录
userdel -r 用户名删除用户,不保留家目录
logout退出登录
su - 用户切换到目标用户
exit/logout退出到原来的用户
groupadd添加用户组
useradd -g 用户组 用户名添加用户到用户组

帮助指令

命令含义
man 指令帮助指令
help 指令帮助指令

文件指令

命令含义
ls显示当前目录的文件
pwd显示当前工作目录的绝对路径
cd切换目录
mkdir 文件名创建目录(默认一级)
mkdir -p file1/file2/file3创建多级目录
rmdir [选项] 要删除的空目录删除目录
rm -rf 要删除的目录删除目录的所有内容
cp [选项] source dest拷贝文件到指定目录
cp -r source dest拷贝多级文件
/cp -r source dest拷贝多级文件且强制全部覆盖
rm [选项] 要删除的文件或者目录删除目录
rm -r递归删除整个文件夹
rm -f强制删除不提示
mv oldNameFile newNameFile重命名
mv /temp/mouvefile /targetfile移动文件到目标目录
cat [选项] 要查看的文件查看文件内容
cat -n 文件查看文件内容,并且显示行号
cat 文件 |more管道命令,查看更多信息
less分屏查看文件内容
echo输出内容到控制台
head 文件显示文件的开头部分内容,默认前10行
head -n 5 文件查看文件头5行内容
tail 文件查看文件尾10行内容
tail -f 文件实时监控文件内容
ln -s [原文件或目录] [软链接名]给原文件创建一个软链接(删除软链接就是删除软链接的文件名)
history查看已经执行过的历史命令

>指令和>>指令

命令含义
echo “内容” > 文件将内容写入文件,覆盖原来的内容
echo “内容” >> 文件将内容写入文件,追加到文件尾部
ls -l >文件将列表的内容写入文件a.txt中(覆盖写)
ls -al >> 文件将列表的内容写入文件的末尾(如果文件不存在,自动创建)
cat 文件1 > 文件2将文件1的内容覆盖到文件2中

将/home目录下的文件列表写入到/home/info.txt中,覆盖写入

ls -l /home > /home/info.txt

时间日期类

命令含义
date显示当前日期
cal日历指令

排序sort

sort - 对文本文件的行排序

-b     忽略排序字段或关键字中开头的空格

-c     检查是否指定文件已经排序好了,不排序.

-d     在关键字中只考虑[a-zA-Z0-9]字符.

-f     将关键字中的小写字母折合成大写字母.

-g     按照通常的数字值顺序作比较,暗含-b

-i     在关键字中只考虑[\040-\0176]字符.

-k POS1[,POS2]
      从关键字POS1开始,*到*POS2结束.
      字段数和字符偏移量都从1开始计数(与基于零的+POS格式作比较)

-l     按照当前环境排序.

-m     合并已经排序好的文件,不排序.

-M     按(未知的)<`JAN'<...<`DEC'的顺序比较,暗含-b

-n     按照字符串的数值顺序比较,暗含-b

-o FILE
      将结果写入FILE而不是标准输出.

-r     颠倒比较的结果.

-s     通过屏蔽最后的再分类比较来稳定排序.

-t SEP 使用SEP来替代空格的转换non-.

-T DIRECTORY
      使用DIRECTORY作为临时文件,而不是$TMPDIR或者/tmp

-u     如果有-c,则按严格的顺序进行检查;
       如果有-m,则只输出相等顺序的第一个.
-z     以0字节结束行,而不是使用换行符,这是为了找到-print0

统计uniq

uniq - 删除排序文件中的重复行

-c, --count
      在 行首 显示 出现 的 数目

-d, --repeated
      仅显示 重复行

-D, --all-repeated
      显示 全部 重复行

-f, --skip-fields=N
      不比较 起初的 N 栏

-i, --ignore-case
      比较时 忽略 大小写

-s, --skip-chars=N
      不比较 起初的 N 个 字符

-u, --unique
      仅显示 无重复行

-w, --check-chars=N
      每行中 比较 不超过 N 个 字符

-N     同 -f N

+N     同 -s N

搜索查找类

命令含义
find [搜索范围] [选项]搜索需要的文件或者目录

选项说明

  • -name:按照指定的文件名查找模式查找文件
  • -user:查找属于指定用户名所有文件
  • -size:按照指定的文件大小查找文件(+n 大于 -n小于 n等于,单位有k,M,G)
命令含义
locate 搜索文件快速定位文件路径
grep [选项] 查找内容 源文件过滤查找
cut在文件的每一行中提取片段
awk提取片段,功能更强大

cut

-b, --bytes=LIST
      输出 这些 字节

-c, --characters=LIST
      输出 这些 字符

-d, --delimiter=DELIM
      使用 DELIM 取代 TAB 做 字段(field) 分隔符

-f, --fields=LIST
      输出 这些 字段

-n     (忽略)

-s, --only-delimited
      不显示 没有 分隔符 的 行

awk

-F "指定分隔符" 'print $n' #n表示分隔的第几个

grep可以和cat指令搭配使用

常用选项:

  • -n 显示匹配行和行号
  • -i 忽略字幕大小写

例如cat a.txt | grep "hello".

压缩与解压

命令含义
gzip压缩文件(只能压缩成.gz文件)
gunzip解压文件
zip [选项] XXX.zip压缩文件为zip
unzip [选项] XXX.zip解压文件
zip -r递归压缩,即压缩目录
unzip -d<目录>指定解压后文件的存放目录
tar [选项] XXX.tar.gz 打包的内容打包指令

tar的选项:

  • -c 产生.tar打包文件
  • -v 显示详细信息
  • -f 指定压缩后的文件名
  • -z 打包同时压缩
  • -x 解包.tar文件

文件组

组的默认位置:/etc/group

命令含义
ls -ahl查看文件的所有者
chown 用户名 文件名修改文件所有者
chgrp 组名 文件名修改文件组
usermod -g 组名 用户名改变用户所在组
usermod -d 目录名 用户名修改该用户登陆的初始目录,用户需要有进入到新目录的权限!

权限

ls -l中显示的内容如下:
-rwxrw-r– 1 root root 1213 Feb 2 09:39 abc

0-9为说明

  1. 第0位确定文件类型(d目录,l软链接,c字符设备,b块设备,-普通文件)
  2. 第1-3位确定所有者权限
  3. 第4-6位确定所属组权限
  4. 第7-9位确定其他用户权限
  • rwx作用到文件

    • r:read 读权限,可以查看文件内容
    • w:write 写权限,可以修改文件内容
    • x:execute 执行权限,可以执行文件
  • rwx作用到目录

    • r:read 读权限,可以查看目录内容
    • w:write 写权限,可以修改目录内容
    • x:execute 执行权限,可以进入目录

修改权限

chmod指令,可以修改文件或者目录的权限.

  1. 利用+,-,=修改权限
    u = user 用户
    g = group 组
    o = other 其他
    a = all 所有
  • chmod u=rwx,g=rx,o=x 文件/目录名
  • chmod o+w 文件/目录名
  • chmod a-x 文件/目录名
  1. 利用数字修改权限
    r=4,w=2,x=1
  • chmod 755 文件/目录名

  • chmod u=rwx,g=rx,o=x 文件/目录名

  • chmod o+w 文件/目录名

  • chmod a-x 文件/目录名

命令含义
chown newowner 文件/目录 改变所有者修改文件所有者
chgrp newgroup 文件/目录 改变所有者修改文件所在组

crond任务调度

crontab [选项]进行定时任务的设置
-e编辑crontab定时任务
-l查询crontab任务
-r删除当前用户所有的crontab任务

例如 * /1 * * * *

参数细节说明,前5个*的含义:

一小时当中的第几分钟,

一天当中的第几小时,

一个月当中的第几天,

一年当中的第几个月,

一周当中的星期几.

*/n每隔多久执行一次
命令含义
crontab -r终止任务调度
crontab -l列出当前有哪些任务调度
service crond restart重启任务调度

每隔一分钟,就将当前的日期信息,追加到/tmp/mydate中

*/1 * * * * date>>/tmp/mydate

每隔1分钟,就将当前日期和日历都追加到/home/mycal中

  1. vim my.sh
  2. crontab -e
  3. */1 * * * */home/my.sh

查看进程

ps -ef查看所有进程

ps -ef | grep atd 过滤结果

at定时任务

  1. at命令是一次性定时计划任务,at守护进程atd会以后台模式运行,检查作业队列来运行
  2. 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
  3. at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
  4. 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看

at命令格式

at [选项] [时间]

时间

  1. 接受当天的hh:mm(小时:分钟)式的时间指定.假如该时间已经过去,那么就放在第二天执行.
  2. 使用midnight,nonn,teatime来指定
  3. 采用12小时,后面加上AM或者PM
  4. 指定命令执行的具体i起,指定格式为month day 或者mm/dd/yy 或者 dd.mm.yy
  5. 使用相对计时法,指定格式为:now+count time-unis
  6. 直接使用today,tomorrow指定

2天后的下午5点执行

at 5pm +2 days回车 /bin/ls /home(使用ctrl+D退出)

明天17点钟,输入时间到指定的文件夹内

at 5pm tomorrow回车 date > root/date100.log

atrm [id]删除指定的任务

磁盘分区和挂载

原理

  1. Linux来说无论有几个分区,分给哪一个目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分.
  2. Linux采用了一种"载入"的处理方法,他的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来.这时要载入的一个分区将使他的存储空间在一个目录下获得.

挂载的案例

fdisk /dev/sdb对sdb硬盘进行分区
命令含义
m显示命令列表
p显示磁盘分区
n新增分区
d删除分区
w写入并退出

说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区.两次回车默认剩余全部空间.最后输入w写入分区并退出,若不保存退出输入q

格式化磁盘

mkfs -t ext4 /dev/sdb1ext4指的是分区类型

挂载

将一个分区和目录联系起来

mount 设备名称 挂载目录将一个分区和目录联系起来
umount 设备名称 或者 挂载目录卸载

永久挂载

修改/etc/fstab实现挂载

磁盘情况查询

df -h查询系统整体磁盘使用情况
du -h查询指定目录的磁盘占用情况,默认为当前
-s指定目录占用大小汇总
-h带计量单位
-a含文件
–max-depth=1子目录深度
-c列出明细的同时,增加汇总值.

工作实用指令wc

  1. 统计/opt文件夹下文件的个数

ls -l /opt | grep “^-” | wc -l

  1. 统计/opt文件夹下文件的个数,包括子文件夹里的

ls -lR /opt | grep “^-” | wc -l

以树状显示目录结构tree目录

tree /opt

网络配置

设置主机名和host映射

通过主机名能够找到(ping)某个linux系统

  • windows

在C:\Windows\System32\drivers\etc\host

  • linux

在/etc/hosts文件指定即可

主机名解析机制分析(Hosts,DNS)

  1. 浏览器先检查浏览器缓存有没有该域名解析IP地址,有就先调用这个IP完成解析;如果没有,就检查DNS解析器缓存,如果有直接返回IP完成解析
  2. 一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记录).如在cmd窗口中输入ipconfig/displaydns可以看到DNS域名解析缓存
  3. 如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回
  4. 如果本地DNS解析器缓存和hosts文件中均没有找到对应IP,则到域名服务DNS进行解析域

进程管理

Linux中,每一个执行的程序都成为一个进程,每一个进程都分配一个ID号(pid,进程号)

每个进程都可能以两种方式存在,前台和后台,前台程序就是用户目前屏幕上可以进行操作的.后台进程则是实际在操作,但是由于屏幕上无法看到的进程,通常使用后天方式执行.

一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中.直到关机才结束

显示系统执行的进程

命令含义
ps -a显示当前终端的所有信息
ps -u以用户的格式显示进程信息
ps -e显示所有进程
ps -f全格式显示
ps -l长格式显示
ps -T显示当前线程的层次结构
ps -x显示没有控制终端的进程

USER:进程执行用户

PID:进程号

VSZ:占用虚拟内存的情况

RSS:占用物理内存的情况

TTY:终端信息

STAT:当前运行状态,s表示休眠,r表示运行

START:进程开始时间

TIME:占用的CPU时间

COMMAND:启动进程的指令(进程名)

实例

以全格式显示当前所有的进程,查看进程的父进程

ps -ef|grep sshd

终止进程

命令含义
kill [选项] 进程号通过进程号终止进程
killall 进程名称通过进程名称杀死进程,也支持通配符

常用选项:

  • -9:表示强迫进程立即停止

实例

  1. 终止远程登录服务sshd,在适当时候再次重启sshd缓存

kill sshd终止进程;systemctl start sshd.service

  1. 终止多个gedit

    killall gedit

  2. 终止一个终端

    ps -aux | grep bash查看终端

    kill -9 终端进程号

pstree查看进程树
-p显示进程的PID
-u显示进程的所属用户

服务管理

服务本质就是进程,但是是运行在后台的,通常都在监听某个端口,等待其他程序的请求,比如mysqld,sshd,防火墙等等,因此我们也称为守护进程.

命令含义
service 服务名 [start|stop|restart|reload|status]管理指令

查看服务名:

  1. /etc/init.d查看service指令管理的服务

  2. 使用setup

运行级别

命令含义
init 运行级别修改运行级别
systemctl get-default获得当前级别
systemctl set-default TARGET.target修改默认运行级别

服务七种运行级别 runlevel

0 系统停机状态,为0不能正常启动
1 单用户工作状态,root权限 系统维护,禁止远程登录
2 多用户状态 无nfs 不支持网络
3 完全的多用户状态 用nfc 登录后进入控制台命令行模式 multi-user.target
4 系统未使用 保留
5 x11控制台 登录后进入gui模式 graphical.target
6 系统正常关闭并重启 默认运行级别不能是6,否则不能正常启动

chkconfig给服务的各个运行级别设置自 启动/关闭

查看服务chkconfig --list[|grep 服务名]

修改服务级别的自启动/关闭

chkconfig --level 3 network off 对network服务在3运行级别,关闭自启动

chkconfig --level 3 network on 重新打开

需要重启reboot生效

systemctl管理指令

命令含义
systemctl list-unit-files[|grep 服务名]查看服务开机启动状态,grep可以过滤
systemctl enable 服务名设置服务开机启动
systemctl disable 服务名设置服务开机不启动
systemctl is-enabled 服务名查询某个服务是否会自启动
systemctl [start|stop|restart|status] 服务名

防火墙

telnet 某个端口测试某个端口
命令含义
firewall-cmd --permanent --add-port=端口号/协议打开端口
firewall-cmd --permanent -remove-port=端口号/协议关闭端口
firewall-cmd --reload重新载入,才能生效
firewall-cmd --query-port=端口号/协议查询端口是否开放

动态监控进程

top [选项]动态监控进程
-d 5秒指定top命令每隔几秒更新
-i使top不显示任何闲置或者僵死进程
-p通过指定监控进程ID来仅仅监控某个进程的状态

交互操作

命令含义
P以CPU使用率排序,默认就是该选项
M以内存使用率排序
N以PID排序
q退出top

应用案例

监视特定用户

top后输入u回车,再输入用户名即可

终止指定的进程

top后输入k回车,再输入要结束的进程ID号

监控网络状态

netstat查看系统网络情况
-an按一定顺序排列输出
-p显示哪个进程在调用

rpm和yum

rpm介绍

rpm用于互联网下载包的打包以及安装工具,它包含在某些Linux分发版本中.它生成具有.RPM扩展名的文件.类似于windows中的setup.exe

rpm -qa|grep xx查询已经安装的rpm列表
rpm -qi 软件包名显示信息
rpm -qf 文件全路径名显示文件所属的软件包
rpm -ql 软件包名查询软件包中的文件
rpm -e RPM包的名称卸载rpm包
  • 如果其他软件包依赖于要卸载的软件包,卸载是会产生错误信息
    • 如果强制删除,增加参数 --nodeps
rpm -ivh RPM包全路径文件安装rpm包

i=install安装

v=verbose提示

h=hash 进度条

yum介绍

Yum是一个Shell前端软件包管理器,基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包

命令含义
yum list|grep 软件列表查询yum服务器是否有需要安装的软件
yum install ***下载安装

环境变量


$PATH    查看现在环境变量

vim /etc/profile   修改环境变量

export JAVA_HOME=/usr/local/java

export PATH=$JAVA_HOME/bin:$PATH

Shell脚本

#!/bin/bash #要求以这个开头
echo "hello world~"

输入完后,脚本并没有执行权限,可以考虑加权限

chmod u+x hello.sh

如果不加权限.也可以通过sh来执行:

sh hello.sh

Shell变量

  1. Linux Shell变量分为系统变量和用户自定义变量
  2. 系统变量: H O M E , HOME, HOME,PATH,$PWD…
  3. 显示当前shell中所有的变量:set

shell变量的定义

  1. 定义变量:变量名=值
  2. 撤销变量:unset 变量
  3. 声明静态变量:readonly 变量,注意:不能unset!!
#!/bin/bash
A=100
echo A=$A
#撤销变量A
unset A
echo $A
#声明静态变量
readonly B=200
echo B=$B
shell变量定义的规则
  1. 变量名可以由字母,数字和下划线组成,但是不能以数字开头
  2. 等号两侧不能有空格
  3. 变量名称一般习惯大写
将命令的返回值赋给变量
A=`date`#反引号,运行里面的命令,并把结果返回给变量A
A=$(date)#等价于引号

多行注释

:<<! 内容 !

位置参数脚本

  • $n(n为数字,$0代表命令本身,$1- 9 表示第一到第九个参数 , 十以上的参数需要用大括号包含 , 如 9表示第一到第九个参数,十以上的参数需要用大括号包含,如 9表示第一到第九个参数,十以上的参数需要用大括号包含,{10})
  • $*(这个变量代表命令行中所有的参数,把所有参数看成一个整体)
  • $@(这个变量代表命令行中所有的参数,不过$@把每个参数区分对待)
  • $#(命令行中所有参数的个数)
#!/bin/bash
echo "0=$0,1=$1"
ehco "$#"

预定义变量

  • $$:当前进程的进程号
  • $!:后台运行的最后一个进程的进程号
  • $?:最后一次执行的命令的返回状态

运算符

  • $((运算式))或者$[运算式]或者expr m + n
#!/bin/bash
# 计算(2+3)×4的值
#第一种方式
Res1=$(((2+3)*4))
#第二种方式
Res2=$[(2+3)*4]
#第三种方式
Res3=`expr 2 + 3`
Res4=`expr $Res3 \* 4`
echo $Res4

条件判断

[ condition ]判断条件,注意括号两边需要有空格

#!/bin/bash
#判断"ok"是否等于"ok"
if [ "ok"="ok" ]
then
		echo "equal"
fi
#判断23是否大于等于22
if [ 23 -ge 22 ]
then
		echo "大于"
fi
#判断/root/aaa.txt文件是否存在
if [ -f /root/aaa.txt ]
then
		echo "存在"
fi
if [ condition ]
then
代码
elif [ condition ]
then
代码
fi

case语句

case $变量名 in
"值1")
代码
;;
"值2")
代码
;;
esac

for循环

for 变量 in val1 val2…
do
代码
done


```shell 
for i in "$@"
do
		echo "num is $i"
done

for((i=1;i<100;i++))
do
代码
done

### while循环
```shell
while [ condition ]
do
程序
done

read读取控制台输入

read(选项)(参数)读取控制台输入
-p指定读取值时的提示符
-t指定读取值时等待的时间
read -t 10 -p "请输入一个数" NUM1
echo "$NUM1"

函数

系统函数

basename

返回完整路径最后/的部分,用于获取文件名

basename /home/aaa/test.txt txt

最后获得的结果是test

dirname

返回完整路径最后/前面的部分,用于返回路径部分

自定义函数

基本语法:

function funname()
{
	Action;
}

案例

function getSum(){
	SUM=$[$n1+$n2]
	echo "$SUM"
}
read -p "输入一个数n1" n1
read -p "输入一个数n2" n2
getSum $n1 $n2

综合案例

  • 需求分析
  1. 每天凌晨2:30备份数据库test到/data/backup/db
  2. 备份开始和结束都能够给出响应的提示信息
  3. 备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式
  4. 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除
#!/bin/bash
#备份目录
BAKEUP=/data/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H:%M:%S)
echo $DATETIME
#数据库的地址
HOST=localhost
#数据库的用户名和密码
DB_USER=root
DB_PW=1234
#备份的数据库名
DATABASE=test

#创建备份目录,如果不存在,就创建
[ ! -d "${BAKEUP}/${DATETIME}$" ] && mkdir -p "${BAKEUP}/${DATETIME}"

#备份数据库
mysqldump -u${DB_USER} -p${DB_PW=} -host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BAKEUP}/${DATETIME}/${DATETIME}.sql.gz

#将文件处理成tar.gz
cd ${BAKEUP}
tar -zcvf ${DATETIME}.tar.gz ${DATETIME}

#删除对应的备份目录
rm -rf ${BAKEUP}/${DATETIME}

#删除10天前的备份文件
find ${BAKEUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "备份数据库${DATABASE}成功"
crontab -e
30 2 * * * /usr/sbin/mysql_db_bakup.sh
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值