文章目录
Linux命令
格式
- 命令 [选项] 参数 [参数2…N]
- 参数: 命令操作的对象(文件或目录)
常用命令
-
cd
-
ls
- ls -la
- 第一位: 文件类型: d:目录; -文件; l 软连接
- ls -la
-
mv
-
cp
-
scp
-
mkdir
-
rm
-
touch
-
cat
-
more
-
tail
-
head
-
less
-
一块一块的读取内容, 适合大文件查看
-
内容定位 G : 到最尾(一般喜欢从行尾开始看日志) g : 到开头 ? : 向上查找 (n 正向查找; N 反向查找) / : 向下查找 (n 正向查找; N 反向查找)
-
标记导航 当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置。 ma : 使用 a 标记文本的当前位置 'a : 导航到标记 a 处
-
-
ln
- 创建链接(链接有两种, 硬链接/ 软链接)
- 硬链接
- 多个文件指向同一个inode, 删除其中的一个对别的硬链接文件无影响
- ln testfile01 testfile03
- 软链接
- 类似windows的快捷方式, 在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
- ln -s testfile01 testfile02
- 硬链接
- 创建链接(链接有两种, 硬链接/ 软链接)
-
chown
-
chgrp
-
chmod
-
man
-
info
-
help
-
whatis
- 查看指令的功能 eg whatis ls
-
which
- 查看指令的路径
-
whereis
- 查看指令的路径 比较which , 多了指令的帮助文档路径
-
gzip
- 只能压缩文件, 不能压缩目录, 且压缩后会删除源文件
-
tar
- 把一个目录打包成一个文件, 文件的后缀名就是.tar(规范, 不强制要求)( 如果要打包且压缩记得 -czvf, 后缀名就是.tar.gz(规范))
- 选项
- -c 打包
- -v 显示详情
- -f 指定文件名
- -z 调用gzip. 和-c 一起就是压缩; 和-x 一起就是解压缩
- -x 解压缩
- 打包
- tar -cvf testfile03.tar testfile03
- 打包且压缩
- tar -zcvf testfile03.tar.gz testfile03
- 解压缩解包
- tar -zxvf testfile03.tar.gz
- tar -zxvf testdir01.tar.gz --strip-components 1 -C mydir
- –strip-components 1 解压至下一级目录,若为2则解压至下下级目录
- -C 目录: 解压到指定目录
-
file
- 判断文件类型
- file testfile01
- 判断文件类型
-
find
- 格式有点特殊: find 搜寻目录 【选项】 参数
- 选项
- -name: find /xieyibin -name testdir
- 支持通配符 * , ?: find /xieyibin -name test??r find /xieyibin -name *test*
- -type
- f 二进制文件 ;l 软连接文件; d 目录
- -user
- -size
- 以block块为单位, 注意。 一般512bit = 1区块=0.5kb。
- find /etc -size +163840 -a -sizi -204800
- 时间
- -atime : a表示access 访问, 所以atime表示最后一次访问(more, cat, vim(查看模式…)文件的时间(天)
- -ctime : c 表示change: 最后一次改变文件(属性)或者目录(属性)的时间(天)
- -mtime; m表示 Modify: 最后一次改变文件(内容)或目录(内容)的时间(天)
- -amin; -cmin; -mmin
- 连接多个条件
- -a : and 操作
- -o : or操作
- -exec 命令 {} ;
- 把find 查询的结果作为输入执行
- -ok 命令 {} ;
- 和 -exec 命令 {} ; 的不同是, 这个是带询问确认的
- -name: find /xieyibin -name testdir
-
locate
- 寻找文件或目录, 是通过索引查找
-
updatedb
- 更新linux文件索引
-
grep
- 文本搜索命令, 在文件中搜寻字符串匹配的行并输出, 通常配合管道 |
- grep ftp /etc/services
-
shutdown
-
alias 命令别名
-
wget
- wget http://mirrors.163.com/.help/CentOS6-Base-163.repo (文件下载到了当前目录)
-
mount
- 硬件设备挂载
- mount 硬件文件路径 挂载目录 ; mount /dev/cdrom /mnt/cdrom
-
read
- 读取从键盘中输入的内容, 以空格为分割. 回车结束
- 语法: read 变量1 [变量2 变量3 …]
- 这些变量就是read 定义的变量, 键盘输入会对变量赋值, 可以定义多个变量, 输入以空格分割, 如果输入多于定义的变量, 则最后一个变量会对后面的赋值统一处理
- eg: read first second thrid
- 键盘输入 1 2 3 则, first=1, second=2, thrid=3
- j键盘输入 1 2 3 4 5 则 firat=1, second=2, thrid=“3 4 5”
-
expr
- 逻辑运算, 可以加减乘除取余, 与, 或, 大于, 小于, 等于, 不等于(!) 运算
- 运算注意运算符两边必须有空格 eg: `expr 1 + 1 `
- 注意 如果是* 必须要转义 eg: `expr 2 /* 2`
- 可以使用$((表达式))代替 expr , 且没有空格要求 eg: $((1+1))
-
test
- 检查某个条件是否成立, 也可以用[] 来代替
- ! 反相状态,
-
nc
- (37条消息) Netcat 介绍及使用_黄晓宇的博客-CSDN博客_netcat
Netcat
(简称nc
)是一款强大的命令行网络工具,用来在两台机器之间建立TCP/UDP
连接,并通过标准的输入输出进行数据的读写- 常用功能
- 开辟端口, 用来多机器连接
- 文件传输
- 聊天工具
-
export
-
export 显示和设置环境变量值
-
不加选项 把环境变量设置成全员环境变量 -n 删除指定的环境变量 -p 列出所有的环境变量
-
-
eg
-
[root@localhost ~]# aaa=bbb #设置一个变量 [root@localhost ~]# export aaa #加入环境变量 [root@localhost ~]# env |grep aa #查看环境变量 aaa=bbb [root@localhost ~]# export -n aaa #删除环境变量 [root@localhost ~]# env |grep aa #查看 [root@localhost ~]# export PATH=$PATH:/usr/local/bin #将/usr/local/bin加入环境变量中
-
-
-
sort
- https://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html
- 常用属性
- -n 默认是字符排序, -n表示用数值排序
- -t 对内容进行列分割
- -k 对那一列排序(可以精确到列的各位)
命令连接符
;
- 表示一条命令的结束, 间隔各个命令, 命令会按顺序执行
&&
- 只有前面的命令执行成功才能执行&& 后面的命令
- 等效与 -a
||
- 只有前面的命令执行失败才能执行 || 后面的命令
- 等效与 -o
命令替换符
我更喜欢叫做: 命令执行域
作用
- 用 ` ` (esc下面的那个键) 表示运行时执行命令, 等效$( )
eg
- ls -l `which touch`
Linux文件
硬件设备 | 文件名称 |
---|---|
IDE设备 | /dev/hd[a-d],现在的 IDE设备已经很少见了,因此一般的硬盘设备会以 /dev/sd 开头。 |
SCSI/SATA/U盘 | /dev/sd[a-p],一台主机可以有多块硬盘,因此系统采用 a~p 代表 16 块不同的硬盘。 |
软驱 | /dev/fd[0-1] |
打印机 | /dev/lp[0-15] |
光驱 | /dev/cdrom |
鼠标 | /dev/mouse |
磁带机 | /dev/st0 或 /dev/ht0 |
Linux权限
linux用户
- owen
- group
- other
文件和目录权限
Linux输入输出重定向
标准输入 0
标准输出 1
标准错误输出 2
输入重定向 <
- echo “/home/xyb” > testfile01
- ls -la < testfile01
输出重定向 >
输出重定向追加 >>
- ls -la /home/xyb >> testfile01
错误输出重定向 2>
错误输出重定向追加 2>>
2>&1重定向
-
把标准错误重定向为和标准输出一样
-
eg
-
ping a.com>a.a 2>&1 #意思是把前面的> 标准输出变成了 1> 和2> 的集合体 cat aaa.txt #结果如下 png: a.com: Name or service not know
-
1>&2
-
把标准输出重定向为和标准错误一样, 这样标准错误没有重定向到任何地方,只能打印到屏幕上了。
-
eg
-
ping a.com>aaa.txt 2>&1 #意思是把前面的> 标准输出变成了 1> 和2> 的集合体 #结果如下. 把标准输出重定向为和标准错误一样, 这样标准错误没有重定向到任何地方,只能打印到屏幕上了。 png: a.com: Name or service not know
-
2>&1主要用于标准输出和标准错误都定位到输出。&>和>&和2>&1相同
通过重定向到/dev/null,来丢弃对应的内容,把正确的输出重定向到/dev/null.意思是只打印错误的信息。把标准错误重定向到/dev/null,意思就是把错误丢弃,只显示正确的信息。
优秀博客: Linux中的文件重定向 (baidu.com)
Linux管道
|
作用
- 上一个的执行结果作为下一个命令的参数输入
eg:
- ls -la / | more
- history | grep
Linux vim
三种模式
插入模式
- i, o, a 进入插入模式
编辑模式
- : 进入编辑模式
- 编辑模式中的命令有
- :w 保存不退出
- :w new_fileName 另存为
- :q (不能单独使用)
- :wq 保存退出
- :q! 不保存退出
- :set nu 设置显示行号
- :set nonu 不显示行号
命令模式
- 常用命令
- dd 删除光标所在的行
- D删除光标所在处到行尾
- nx 删除光标所在出的n个字符
关系图
Linux 软件安装
- 源码包 VS RPM二进制包
- 源码包一般包含多个文件,为了方便发布,通常会将源码包做打包压缩处理,Linux 中最常用的打包压缩格式为“tar.gz”
RPM
用于对下载好的安装包进行安装, 需要有安装包。
优势:
- 还有就是RPM 的查看也是比较好用
选项
-
-i ( or --install) 安装
-
-v 显示附加信息(详情)
-
-h (or --hash) 安装时输出hash记号 (``#‘’)
-
–test 只对安装进行测试,并不实际安装。
-
–replacepkgs 强制重新安装已经安装的软件包
-
–replacefiles 替换属于其它软件包的文件
-
-U ( or --upgrade) 升级
-
-q ( or --query) 查询某个软件
-
-qa 查询全部安装的软件
-
eg
-
rpm -qf 目录 查询任何一个目录所属的软件包
-
rpm -qi 查询已经安装的软件包信息
-
rpm -qip 查询未安装的软件包信息
-
rpm -ql 查询软件包安装到了哪些路径中
-
rpm -qlp 查询未安装的软件包如果安装会安装到哪些路径中
-
rpm -qf ` which iostat ` #查询iostat命令归属的软件包 sysstat-11.7.3-3.fc30.x86_64 rpm -qi httpd #得到httpd安装包的信息 Name : httpd Relocations: (not relocatable) Version : 2.2.3 Vendor: CentOS Release : 45.el5.centos.1 Build Date: 2011年05月04日 星期三 18时54分56秒 Install Date: 2011年06月29日 星期三 08时05分34秒 Build Host: builder10.centos.org Group : System Environment/Daemons Source RPM: httpd-2.2.3-45.el5.centos.1.src.rpm Size : 3281960 License: Apache Software License Signature : DSA/SHA1, 2011年05月04日 星期三 20时31分28秒, Key ID a8a447dce8562897 URL : http://httpd.apache.org/ Summary : Apache HTTP 服务器 Description : The Apache HTTP Server is a powerful, efficient, and extensible web server.
-
-
-
-e ( or --erase) 删除卸载
-
-V 校验()
YUM
-
优势
- 自动解决软件包依赖
- 自动下载, 无需先前准备安装软件包
-
命令
- 安装: yum install
- 重新安装: yum reinstall
- 检查是否可升级: yum check-update
- 升级:yum update
- 软件包查询(从yum远程仓库中查找, 会查出各种版本):yum list
- 软件包信息:yum info
- 卸载:yum remove
- 安装本地rpm包: yum localinstall
- 列出依赖: yum deplist
-
选项
- -y 自动答应
- -q, --quiet 安静的操作
-
配置yum的163repo源
- 备份
- mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
- 下载源
- wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
- 刷新
- yum clean all
- yum makecache
- 备份
APT
- 与yum基本上是一样的
LInux shell
概述
-
shell是用户和linux内核交互的一个壳. 就常用的就是bash ,还有 有很多版本sh, bash, csh,ksh…
-
#号表示注释, 多行注释如下
-
#第一种 <<EOF 注释内容... 注释内容... 注释内容... EOF #第二种 <<! 注释内容... 注释内容... 注释内容... !
-
-
#! 表示使用的是哪一种sh
- eg: #! /bin/sh
变量
分类
-
永久变量
-
环境变量
-
Linux 系统中环境变量的名称一般都是大写的,这是一种约定俗成的规范
-
env 命令来查看到 Linux 系统中所有的环境变量
-
Linux 作为一个多用户多任务的操作系统,能够为每个用户提供独立的、合适的工作运行环境,因此,一个相同的环境变量会因为用户身份的不同而具有不同的值 , 比如HOME, PATH
-
[root@localhost ~]# echo $HOME /root [root@localhost ~]# su - user1 <--切换到 user1 用户身份 [user1@localhost ~]$ echo $HOME /home/user1
-
其实,环境变量是由固定的变量名与用户或系统设置的变量值两部分组成的,我们完全可以自行创建环境变量来满足工作需求。例如,设置一个名称为 WORKDIR 的环境变量,方便用户更轻松地进入一个层次较深的目录,执行命令如下: [root@localhost ~]# mkdir /home/work1 [root@localhost ~]# WORKDIR=/home/work1 [root@localhost ~]# cd $WORKDIR [root@localhost work1]# pwd /home/work1 但是,这样的环境变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用。如果工作需要,可以使用 export 命令将其提升为全局环境变量,这样其他用户就可以使用它了: [root@localhost work1]# su user1 <-- 切换到 user1,发现无法使用 WORKDIR 自定义变量 [user1@localhost ~]$ cd $WORKDIR [user1@localhost ~]$ echo $WORKDIR [user1@localhost ~]$ exit <--退出user1身份 [root@localhost work1]# export WORKDIR [root@localhost work1]# su user1 [user1@localhost ~]$ cd $WORKDIR [user1@localhost work1]$ pwd /home/work1
-
-
-
-
局部变量
-
用户自定义变量
-
位置变量
-
ask 变量(也用位置变量表示$0 表示第一个变量)
-
读变量
-
var2=2 readonly var2
-
-
变量相关的符号
- $
变量的赋值
- eg: var1=abc (注意=号两边不能有任何空格)
- 控制语句赋值
- for var1 in a b c (那么 var1 这个变量是在for中定义出来的, 其 值会依次为a, b, c)
- read var1 var2
变量的使用
- $变量名 或者 变量名, 只是为了分割,如 {变量名}, {}只是为了分割, 如 变量名,只是为了分割,如{var}abc
- 删除变量
- unset 变量名
数据类型
字符串
- ‘’ 和"" : ''不会解析里面的内容, “”会解析里面的内容
- 也可以不用引号, 不过如果不用引号, 一定不能有空格
- 获取字符串的长度
- KaTeX parse error: Expected '}', got '#' at position 2: {#̲var} 或者{#var[0]} (注意不能是$#var)
数组
-
定义
- varArray=(value1 value2 value3) (注意, 这里面的每一个元素都是用空格号分开)
-
使用
-
读取某个元素: ${varArray[num]}
-
读取所有元素 : ${varArray[@]} 或者 ${varArray[*]}
-
varArray=(1 2 3 4 5 6) for var in ${varArray[@]} do echo ${var} done
-
-
读取元素个数: ${#varArray[@]} 或者 ${#varArray[*]}
-
读取某个元素长度: ${#varArray[num]}
-
特殊变量
-
$$ : 表示当前pid
-
$! : 表示上一个pid
-
$? : 表示上一个脚本执行的结果, 0表示 (在linux中0表示true, 非0表示false)
-
$@ : 表示所有的参数, 有多少个参数, 就有多少个输出
-
$* : 表示所有的参数, 以一个字符串输出
-
echo "-- \$* 演示 ---" for i in "$*"; do echo $i done echo "-- \$@ 演示 ---" for i in "$@"; do echo $i done $ chmod +x test.sh $ ./test.sh 1 2 3 -- $* 演示 --- 1 2 3 -- $@ 演示 --- 1 2 3
-
-
$# : 参数的个数
参数传递
- Linux 用位置变量来调用参数
- $0表示命令和选项本身
- $n 表示第n个输入变量
Shell 流程控制
if
-
# if [ condition ] 可以替换成 if test condition , 注意所有的流程控制关键字后面都要加一个空格号 # 不能写成 if[ condition ] if [condition] then ... eif [condition] then ... else ... fi
for
-
# 这个var不需要前面定义这个变量, 这个等效与for里面定义了一个变量 for var in value1 value2 value3 .... do ... done
while
-
while [condition] do ... done # while循环可用于读取键盘信息 ctrl+d结束 while read FILM do echo "是的!$FILM 是一个好网站" done
case
-
# var是已经存在的变量, case本省不会定义变量, 不像for一样 匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。 *)用来匹配所有的情况 case var in 模式1): .... ;; 模式2): ..... ;; *): ... ;; esac
select
-
和用户交互, 提供不同的选线进行选择不同的操作
-
#!/bin/bash #Author:linuxdaxue.com #Date:2016-05-30 #Desc:Shell select case 练习 PS3='Please choose your number: ' # 设置提示符字串. echo select number in "one" "two" "three" "four" "five" do case $number in one ) echo Hello one! ;; two ) echo Hello two! ;; * ) echo echo "Your choose is $number." echo ;; esac #break done exit 0 $./select2.sh 1) one 2) two 3) three 4) four 5) five Please choose your number: 1 Hello one! Please choose your number: 2 Hello two! Please choose your number: 3 Your choose is three. Please choose your number: 4 Your choose is four.
shell 函数
格式
-
[ function ] funname [()] { action; [return int;] } #1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。 #2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数#值n(0-255
-
eg:
-
funWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." echo "输入第一个数字: " read aNum echo "输入第二个数字: " read anotherNum echo "两个数字分别为 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum)) } funWithReturn echo "输入的两个数字之和为 $? !"
-
函数传参
- 使用的是位置传参, 函数不会定义参数, 只会用位置变量获取传入的参数
导入外部shell
. filename(文件路径) # 注意点号(.)和文件名中间有一空格
或
source filename
-
eg
-
test1.sh 代码如下: #!/bin/bash # author:菜鸟教程 # url:www.runoob.com url="http://www.runoob.com" test2.sh 代码如下: #!/bin/bash # author:菜鸟教程 # url:www.runoob.com #使用 . 号来引用test1.sh 文件 . ./test1.sh # 或者使用以下包含文件代码 # source ./test1.sh echo "菜鸟教程官网地址:$url"
-
Linux 恢复与备份
备份策略
完全备份
- 把所有需要备份的数据全部备份
累计增量备份
- 是指先进行一次完全备份,服务器运行一段时间之后,比较当前系统和完全备份的备份数据之间的差异,只备份有差异的数据。服务器继续运行,再经过一段时间,进行第二次增量备份, 一次类推
差异增量备份
-
差异备份每次备份的参照物都是原始的完全备份,而不是上一次的差异备份
备份命令
tar
- 打包压缩
- tar -zcvf 打包文件路径 原文件
- 解包解压
- tar -zxvf 打包文件路径
dump/ restore
-
dump (备份)
-
格式:
-
dump [选项] 备份之后的文件名 原文件或目录
-
选项
-
-level:就是我们说的 0~9 共 10 个备份级别; -f 文件名:指定备份之后的文件名; -u:备份成功之后,把备份时间、备份级别以及实施备份的文件系统等信息,都记录在 /etc/dumpdates 文件中; -v:显示备份过程中更多的输出信息; -j:调用 bzlib 库压缩备份文件,其实就是把备份文件压缩为 .bz2 格式,默认压缩等级是 2; -W:显示允许被 dump 的分区的备份等级及备份时间;
-
-
-
dump 命令使用“备份级别”来实现增量备份,它支持 0~9 共 10 个备份级别。其中,0 级别指的就是完全备份,1~9 级别都是增量备份级别
- eg: dump -0uj -f /root/boot.bak.bz2 /boot/
-
dump 实现累计增量备份
- 第一次备份应该使用 0 级别,会把所有数据完全备份一次;第二次备份就可以使用 1 级别了,它会和 0 级别进行比较,把 0 级别备份之后变化的数据进行备份;第三次备份使用 2 级别,2 级别会和 1 级别进行比较,把 1 级别备份之后变化的数据进行备份,以此类推
- 需要注意的是,只有在备份整个分区或整块硬盘时,才能支持 1~9 的增量备份级别;如果只是备份某个文件或不是分区的目录,则只能使用 0 级别进行完全备份。
- dump 命令也可以备份文件或目录,不过,只要不是备份分区,就只能使用 0 级别进行完全备份,而不再支持增量备份
-
dump 实现差异增量备份
- dump命令可以非常方便地实现增量备份,但是如何实现差异备份呢?其实也很简单,先使用 0 级别完全备份一次,以后的每次备份都使用 1 级别进行备份。
-
restore (恢复备份)
-
格式
-
restore [模式选项] [-f]
-
此命令中,-f 选项用于指定备份文件的文件名;restore 命令常用的模式有以下 4 种,这 4 种模式不能混用: -C:比较备份数据和实际数据的变化。如果实际数据中的现有数据发生了变化,那么这个选项能够检测到这个变化。但是如果实际数据中新增了数据,那么这个选项是不能检测到变化的。 -i:进入交互模式,手工选择需要恢复的文件; -t:查看模式,用于查看备份文件中拥有哪些数据; -r:还原模式,用于数据还原; 还原模式 restore 命令的还原模式既可以用于还原整个分区,也可以用于还原文件或目录。命令格式是一样 的,不过要注意,如果要还原增量备份的数据,则一定要先还原完全备份的数据
-
-
dd
-
格式:dd if=“输入文件” of=“输出文件” bs=“数据块” count=“数量”
-
主要用来进行数据备份,并且可以在备份的过程中进行格式转换
rsync
-
rsync 可以理解为 remote sync(远程同步),但它不仅可以远程同步数据(类似于 scp 命令),还可以本地同步数据(类似于 cp 命令)。不同于 cp 或 scp 的一点是,使用 rsync 命令备份数据时,不会直接覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。
scp
其他
-
Linux 系统使用任何硬件设备,都必须将设备文件与已有目录文件进行挂载
- Linux中一切皆文件, 硬件设备也是文件,对应放在/dev目录下, 但是无法访问/dev下面硬件设备的文件内容, 需要将其挂载出来,挂载到Linux系统的目录树中 才能够访问
- 由于挂载操作会使得原有目录中文件被隐藏, 所以我们挂载一个硬件设备到目录树时, 一般是新建一个目录
-
后台运行
-
"命令 &",把命令放入后台执行 第一种把命令放入后台的方法是在命令后面加入 空格 &。使用这种方法放入后台的命令,在后台处于执行状态。 注意,放入后台执行的命令不能与前台有交互,否则这个命令是不能在后台执行的。例如: [root@localhost ~]#find / -name install.log & [1] 1920 #[工作号] 进程号 #把find命令放入后台执行,每个后台命令会被分配一个工作号。命令既然可以执行,就会有进程产生,所以也会有进程号
-
-
$(), $(()), $[], ${}, [], (()), [[]]的区别 (注意, 一般这些符号内部左右两边都有一个空号才能生效)
-
$() 等效与``
-
$(()) 等效与expr, 且支持 + - * / % 不需要转义
-
例: $ a=5; b=7; c=2 $ echo $(( a+b*c )) 19 $ echo $(( (a+b)/c )) 6 $ echo $(( (a*b)%c)) 1 在 $(( )) 中的变量名称,可于其前面加 $ 符号来替换,也可以不用,如: $(( $a + $b * $c)) 也可得到 19 的结果 此外,$(( )) 还可作不同进位(如二进制、八进位、十六进制)作运算呢,只是,输出结果皆为十进制而已: echo $((16#2a)) 结果为 42 (16进位转十进制)
-
-
${} 用于读取变量
- 比起$变量, 多了高级特性
- 截取变量内容
- 给变量赋值
- 截取变量内容
- 比起$变量, 多了高级特性
-
[ ] 等效与 [] 等效与 []等效与(()), 且支持 + - * / % 不需要转义
-
[] 等效与test
-
(()) 高级的test
- 不需要再将表达式里面的大小于符号转义
- 除了可以使用标准的数学运算符外,还增加了以下符号
-
[[]] 高级的test
- 提供针对字符串比较的高级特性
- 提供匹配模式
-
-
nohup 与 &
-
nohup表示不挂断的运行命令, & 表示后台运行命令。 所以他们两直接没有任何关系, 不过可以组合使用 nohup comm &
-
nohup 并不是表示后台运行, & 才是
-
**&** : 指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出。 **nohup** : 不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行。 那么,我们可以巧妙的吧他们结合起来用就是`nohup COMMAND &` 这样就能使命令永久的在后台执行。 **Code 3**: ```shell sh test.sh & ``` 将sh test.sh任务放到后台 ,关闭xshell,对应的任务也跟着停止。 **Code 4** : ```shell nohup sh test.sh ``` 将sh test.sh任务放到后台,关闭标准输入,**终端不再能够接收任何输入(标准输入)**,重定向标准输出和标准错误到当前目录下的nohup.out文件,即使**关闭xshell退出当前session依然继续运行**。
-
awk 和 sed
- awk
- sed
- 替换
- 格式: sed ‘s/要被取代的字串/新的字串[/g]’ # /g 表示全部替换
- 替换
-
Linux 进程
一些概念
- 父进程/子进程
- Linux进程的创建是通过fork来创建的 , 一般父进程死亡子进程也会死亡
- 前台进程/后台进程
- 前台进程是同步的
- 后台进程是异步的, 且是非交互的,在命令后面加上&
- 孤儿进程/僵尸进程
- 孤儿进程: 父进程死亡但是子进程没有死亡
- 僵尸进程:
查看进程
ps
-
ps -aux
-
输出中有那些列
-
- USER: 行程拥有者 - PID: pid - %CPU: 占用的 CPU 使用率 - %MEM: 占用的记忆体使用率 - VSZ: 占用的虚拟记忆体大小 - RSS: 占用的记忆体大小 - TTY: 终端的次要装置号码 (minor device number of tty) - STAT: 该行程的状态: - D: 无法中断的休眠状态 (通常 IO 的进程) - R: 正在执行中 - S: 静止状态 - T: 暂停执行 - Z: 不存在但暂时无法消除 - W: 没有足够的记忆体分页可分配 - <: 高优先序的行程 - N: 低优先序的行程 - L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O) - START: 行程开始时间 - TIME: 执行的时间 - COMMAND:所执行的指令
-
-
如何对ps -aux 排序
- -sort
- 对列小写即可 eg ps -aux --sort pid ; ps -aux --sort ppid, ps -aux --sort %cpu
- https://blog.csdn.net/weixin_27283495/article/details/116581334
- -sort
top
-
https://blog.51cto.com/u_12214037/4985745
-
Top用于查看Linux系统下进程信息,有时候需要选择显示那些列,以及按照某一列进行排序。查询整理如下: 选择显示列: 执行top命令后,按 f 键,再按某一列的代表字母,即可选中或取消显示; 列显示位置调整: 执行top命令后,按 o 键,选择要调整位置的列(如K:CUP Usageage),按动一下大写K则显示位置往上调整,按动一下小写K则显示位置往下调整。 列排序: 执行top命令后,按 shift + f(小写),进入选择排序列页面,再按要排序的列的代表字母即可;
pgrep
- pgrep 服务名
netstat
- netstat命令是一个监控网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。
jobs
- 查看程序状态
- bg 将进程放到后台执行
- fg 将进程调到前台执行
杀死进程
kill
- 两个选项 -1 重启进程 ; -9 杀死进程
pkill
- pkill 进程名
xkill
- 关闭图形程序, 输入后通过鼠标选择关闭图形程序
- 进程优先级
- nice
- 可以在程序启动时
- renice
- 改变运行中的进程优先级
服务
运行级别
管理服务的启动、重启、停止、重载、查看状态等常用命令区分
设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令
查看磁盘情况
- df -h
- du
- df 是从总体上统计系统各磁盘的占用情况,不能统计具体的文件夹或文件的大小。
du 既可以从总体上统计,又可以统计具体的某个文件夹或文件的大小。
查看内存情况
- free -m #单位MB
查看cpu情况
- top
Linux 定时任务
cron
格式
- 分 小时 天 月 星期
at
- at 和batch 都可以指定文件, 也可以直接写一次性的保存按ctrl + d
- 绝对时间
- at 17:30
- 相对时间
- at now + 1 hours
- at now + 1 days
- at now + 1 minutes
batch
- 在系统不忙的时候安排一次任务
Linux 文件共享服务
ftp
-
连接: ftp [hostname| ip-address]
- 服务器询问你用户名和口令,分别输入用户名和相应密码,待认证通过即可
-
下载
- get
- 格式:get remote-file [local-file]
- mget
- 格式:mget [remote-files]
- get
-
上传
- put
- 格式:put local-file [remote-file]
- mput
- 格式:mput local-files
- put
-
断开连接
- bye
-
其他
-
! 在本地机中执行交互shell
-
!pwd #显示本地目录 !ls #列出本地目录文件
-
-
lcd : 设置本地目录
-
nfs
ssh
-
ssh协议的优点就是数据传输是加密的,可以防止信息泄露,而且数据传输是压缩的,可以提高传输速度。
-
格式
- ssh [-p port] user@remote
-
免密登录
-
本地生产非对称加密密钥
- ssh-keygen 即可生成SSH钥匙
-
上传公钥到远程服务器
- ssh-copy-id -p port user@remotr eg: ssh-copy-id -p 22 deepin2@192.168.56.132
-
完成这两部就可以免密登录啦
-
sftp
-
sftp 与 ftp 有着几乎一样的语法和功能
-
SFTP 为 SSH的其中一部分,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)
-
SFTP同样是使用加密传输认证信息和传输的数据,所以传输效率比普通的FTP要低得多
-
格式
-
格式:sftp <host> 通过sftp连接<host>,端口为默认的22,用户为Linux当前登录用户。 格式:sftp -oPort=<port> <host> 通过sftp连接<host>,指定端口<port>,用户为Linux当前登录用户。 格式:sftp <user>@<host> 通过sftp连接<host>,端口为默认的22,指定用户<user>。 格式:sftp -oPort=<port> <user>@<host> 通过sftp连接<host>,端口为<port>,用户为<user>。
-