Linux
命令格式同法: 命令名称 参数 对象
长格式:–完整项目 短格式:-项目简写
短格式之间是可以叠加的
常用命令
工作命令
echo [ 字符串 | $变量 ]
echo $PATH
常用环境变量都可以用path查看
date “+指定格式” 指定的格式有 %t跳格 %Y年%M月%D日 %H小时 %I小时 %M分钟 %S秒 %j今年中的第几天
date "+%Y-%M-%D" 年-月-日
date "+%H:%M:%S" 小时:分钟:秒
reboot重启 poweroff关机
wget[参数] 路径 用该命令可以从网上下载内容
-b 后台下载
-p 下载到指定目录
-t 最大尝试次数
-c 端点续传
-p 下载所有资源
-r 递归下载
wget -r -p http://www.linuxprobe.com/docs/LinuxProbe.pdf(下载该网站所有资源)
注意liunx命令的每个字符之间都要给出空格,常用参数如下:
ps aux 查看进程信息
liunx中进程的五个状态:运行 中止 不可中止 僵死 停止
top 动态监视进程活动与系统负载等信息
通过ctrl+c快捷键可以退出正在运行的进程
pidof [参数] [服务名称] 查询进程的pid
kill [参数] [进程pid] 终止进行
killall 删除指令名称服务的所有进程
监控命令
网络监控需要安装net-tools包
ifconfig 网络信息
uname -a 系统信息
uptime 系统负载信息
free -h 查看内存信息
who 查看用户
last 查看最近登陆情况
history [参数] 查看历史信息 -c可以用来清空历史信息 可以使用 !数字 的去执行重复的命令
sosreport 输出诊断信息
切换工作目录
pwd 当前工作目录
cd [目录] 切换目录 常用如下
cd - 上一次目录
cd.. 上一级目录
cd ~ 家目录
cd /etc
ls [选项] [文件] 查看当前目录文件信息 -a全部文件(包括隐藏) -l文件属性 -ld当前目录权限属性信息
ls -l /dev/sda* 得到所有磁盘文件信息
文本文件编辑命令
cat [选项] 文件 命令 可以直接查看文本文件 cat -n 文件名 -n会显示出行号
more [选项] 文件 命令 可用来查看详细文件
head [选项] 文件 命令 可以用来查看命令前几行(-n)
tail [选项] 文件 命令 可以用来查看命令后几行
tr [原始字符] [目标字符] 命令 用于替换字符
wc [参数] 文件 用于统计文件行数 单词数 字节数信息
wc -l /etc/passwd 行数
wc -w /etc/passwd 单词数
wc -c /etc/passwd 字节数
stat 文件名称 命令 用来查看文件的具体信息
cut [参数] 命令 可以用来截取文件信息,具体参数如下
diff [参数] 命令 可以用来比较两个文件是否相同 并且给出不同之处,常用参数如下:
diff --brief TestA TestB 直接返回两者比较结果是否相同
diff -c TestA TestB 可以显示出两个文件的不同之处的行号
文件目录管理
touch [选项] [文件] 可以用来创建文件 -d用来修改文件的读取时间与修改时间
touch file 创建文件
touch -d "2019-4-15 15:44" file 修改文件创建时间
mkdir [选项] 目录 可以用来创建目录(文件夹) 可以通过 -p来创建层级结构
mkdir -p a/b/c/d/e
cp [选项] 源文件 目标文件
三种情况
目标文件是目录,那么源文件直接复制到目标文件中
目标文件是普通文件,那么会询问是否要覆盖它
目标文件不存在,则执行正常的复制操作
cp Test1 Test2
-p 保留原文件属性 -d 对象为链接文件,则保留其属性
-r 递归持续复制 -i 如果目标文件存在则询问是否覆盖
-a 相当于 -pdr
mv [选项] 源文件 [目标路径|目标文件|重命名名称] 对文件作剪切操作 如果对同一目录 同一文件进行该操作则是重命名
mv x.log y.log 将x.log的名称改为y.log
rm [选项] 文件 删除文件 -f 表示强制删除 删除目录一定有参数 -r(递归删除)
rm -rf [目录名称]* 删除给定目录下的所有文件
rm -f * 删除当前目录下所有文件
rm -rf /* 删库跑路终结技
dd [参数] 用于按照给定大小和个数的数据块来复制文件和转换文件
常用参数如下
dd if=/dev/zero of=filename count=1 bs=560
if表示输入文件名 of表示输出文件名 count为文件块 bs为块大小
这个命令的意思是输入文件后输出
/dev/zero是linux系统中一个0存储空间的文件
file [文件名] 可以输出文件名称类型
类似的命令由: ls -l 文件名称 stat 文件名称
打包搜索命令
tar [选项] [文件] 用来打包压缩文件
压缩
tar -czvf file.tar.gz file 将file压缩成file.tar.gz
解压
tar -xzvf file.tar.gz -C /home/hjh
默认解压在当前文件夹下
常用参数如下:
-c 压缩
-v 显示压缩/解压过程
-z 用Gzip压缩/解压
-f 目标文件名
-x 解压
-j 用bzip压缩/解压
-C 指定解压到的目录
grep [选项] [文件] 文本文件抓取命令,可以选出包含关键字的行
grep hjh /etc/passwd
-n 显示行号
-v 反向选择
find [查找路径] [寻找条件|选项] 操作 指定条件查找文件
参数
-name匹配名称
-perm匹配权限
-user匹配所有者
--type 匹配指定文件类型
-group匹配所有组
-size匹配大小和目录
-prune忽略某个目录
-exec op {} op \; 后面跟用于下一步处理搜索结果的命令
例子如下
find /etc -name "host*" 可以直接匹配出文件
find / -uesr user -exec cp -a {} /results/ \;
find与grep是相反的
find是先给出查找路径,后给出查找条件
grep是先给出查找条件,后给出查找文件名称
重定向
输入重定向 可以从文件中读取命令参数等等
< 文件
<< 分界符
输出重定向 将命令结果输出到文件
命令 > 文件
命令 2> 文件 这两种是清空
命令 >> 文件
命令 2>> 文件 这两种是append
&>> 将标准数据与错误信息共同添加到文件中
ls -l xxxx 2> sterr.txt 可以将错误信息输出到文件
管道
命令1 | 命令2 可以将前一个命令的输出作为后一个命令的输入,以下是一个简单例子
top | head -n 5 只输出系统监控信息前几行
通配符
*任意零个或者多个字符
?任意单个字符
[0-9] [a-z] [A-Z] 任意其中一个
[abc] [123] 任意集合中一个
转义字符
\ 用来转义其后单个字符
"name" 强行转为字符串
""name"" 保留变量
`name` 执行结果并返回
重要的环境变量
Linux命令执行过程
常用的系统变量
PATH
HOME
HISTSIZE
MAIL
LANG
RANDOM
PSI
EDITOR
SHELL
USER
在linux中用户可以自定义变量(默认只有该用户可用)
GAME=/home/hjh/GAME
cd $GAME 可以直接跳转到GAME目录
export GAME 可以将自定义变量定义成全局变量
env可以查看所有变量
Vim
三种模式:命令模式,输入模式,末行模式
输入模式<->命令模式<->末行模式
常用快捷键与命令见书
命令模式->a,i,o->输入模式->esc->命令模式->:->末行模式->esc->命令模式
应用
搭建Yum软件仓库
Shell
基础
shell脚本文件最好加上.sh后缀名
一般有两种执行shell文件的方法
- bash shell.sh的绝对路径
- 给shell.sh一定的权限后,直接给出绝对路径既可以使用
shell编程可以理解为通过逻辑控制一连串的linux命令,从而执行一些工作。基本格式如下
#!/bin/bash
#第一行给出解释器绝对路径,#表示注释
pwd
ls -la | head -n 5
#给出命令逻辑流即可
执行时直接(当前工作目录下)
bash shell.sh即可
参数
这个参数是用户输入的
$0 脚本名称
$1 第一个参数 往后以此类推 $2 $3 ...
$# 参数个数
$* 所有参数
$? 上一条命令的返回值
在一个脚本中
#!/bin/bash
echo "$0"
echo "$#"
echo $*
使用时
bash shell.sh 1 2 3 4 5
逻辑判断
表达式
[ 条件表达式 ] 条件成立返回0,否则返回随机数据,条件表达式参数要给$
四种条件表达式
-
文件权限
[ 参数 文件 ] 用来判断文件是否满足参数条件 -d 是否是目录 -f 是否是文件 -e 是否存在文件 -r 测试读取权限 -w 测试写入权限 -x 执行权限 [ -x /shell_test/shell.sh ] echo $? 如果没有权限会得到上一次执行结果不为0
-
整数值比较
-
字符串比较
-
逻辑测试
运算符
&& 前一个命令成功执行后才能执行后一个命令
|| 前一个命令执行失败后才能执行后一个命令
! 逻辑取反
[ ! $USER = root ] && echo "USER" || echo "ROOT"
数字大小比较符号(不能用原生符号)
-eq
-ne
-gt
-lt
-le
-ge
字符串比较
=
!=
-z 判断是否为空
[ $LANG != "en_US.UTF-8" ] && echo "en_US" || echo "no en"
#[条件表达式] && 命令1 || 命令2 相当于if(){}else{}
if流程控制
格式如下
#单分支
if [ 条件表达式 ]
then
命令
fi
#双分支
if [ 条件表达式 ]
then
命令1
else
命令2
fi
#多分支
if [ 条件表达式 ]
then
命令1
elif [ 条件表达式 ]
then
命令2
else
命令3
fi
#下面是一个例子,根据用户输入判断值
#!/bin/bash
read -p "Please Enter Score" Score #变量使用前一定加上$
if [ $Score -ge 80 ] && [ $Score -le 100 ] #严格空格不能遗漏
then
echo "Excellent"
elif [ $Score -ge 60 ] && [ $Score -lt 80 ]
then
echo "PASS"
else
echo "Failed"
fi
循环控制
for
例子见书
for var in $list
do
命令
done
#这个list可以是`命令`的结果
#var可以不用$前置,但是命令中使用var时需要$前置
extra:
id $var 查看有无用户变量
useradd
/dev/null黑洞文件,所有重定向到黑洞文件中的数据都会被删除
while
while [ 条件操作 ]
do
命令序列
done
extra:
expr 可用于整数运算,字符串运算等等
$(expr $RANDOM % 10)
let 可用于计算表达式,并且其中变量不像` command ` 或者expr要指定$
let times++
exit 0 用于退出
一个简单例子
PRICE=$(expr $RANDOM % 10)
while true
do
read INT
if [ $INT -eq $PRICE ]
then
echo "成功"
exit 0
fi
done
#上述这个例子的改版,随机10个数据
it=0
while [ $it -lt 10 ]
do
PRICE=$(expr $RANDOM % 10)
echo $PRICE
let lt++
done
case
类似C++ switch
会将var与各个模式进行匹配,并执行首个匹配的串。如果都不匹配,那么直接默认处理。
case $var in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认处理
esac
计划任务服务程序
一次性任务
可以通过at指定任务执行时间,并且指定其执行的任务
at 21:15
>poweroff
>ctrl+D关闭,并创建任务在21:15关机
at -l查看任务
atrm num删除对应序号的任务
周期性任务
crontab用来在文件中添加周期任务
crontab -e #用来添加周期任务
crontab -l #显示周期任务
分钟 小时 日 月 星期 命令
#下面是一个例子
25 3 * * 1,3,5 /usr/lib/tar -czvf backup.tar.gz /home/wwwwroot
说明:
如果格式中有些日期无需使用,用*占位。多个时间用,间隔,命令必须绝对路径给出。
分钟不能是空,日期与日不联用
whereis 命令 输出命令路径
whereis bash
Liunx开发环境搭建
常用软件安装相关命令
wget
wget url #相当于一种网络下载工具,常用参数如下
-b后台下载
-nd不创建目录
-d创建目录
-r递归下载 相当于会下载相关的所有资源?
-O指定下载后的文件名
-c断点续传
apt-get
一种ubuntu专门用来管理软件的命令,使用方法如下
apt-get install softname1,softname2 #普通安装
apt-get -f install softname1 #修复安装
apt-get -reinstall install softname #重新安装
apt-get remove package #删除包
apt-get update #更新源
apt-get upgrade #更新已经安装的包
C++开发环境搭建
这里的C++开发环境搭建目标是建立一个VsCode工作环境
相关包
g++8
sudo apt-get -y install software-properties-common #-y表示跳过系统提示
sudo add-apt-repository ppa:ubuntu-toolchain-r/test #相当于添加用户代码仓库
sudo apt-get update
sudo apt-get -y install g++-8
sudo ln -sf /usr/bin/g++-8 /usr/bin/g++ #强制建立软连接(快捷方式)
#ln -sf 源文件 目标文件 为源文件建立一个目标文件的软链接
g++ --version #查看版本号
用户与文件权限
用户权限
添加用户
useradd -d /home/liunx -u 8881 -s /bin/bash Name
-d
-u
-s
-g
-G
添加用户组
linux系统中可以把用户添加到用户组当作,这样可以统一配置一组用户的权限
groupadd groupName
修改用户信息
liunx下所有的用户信息均存在/etc/passwd文件中,可以直接通过vim查看
usermod命令 可以修改用户权限
usermod -G root games
-c
-dm
-g
-G
-L
-U
-s
-u
密码相关
passwd 用于修改密码等操作
-l
-u
--stdin
-d
-e
-S
删除用户
userdel username
-r
-f
文件权限
文件一共有三个权限
读®,写(w),执行(x)
对于每个文件一共有三个角色对其有依次为读写执行的权限情况分别为文件所有者,文件所属组,其他用户。对于每个Liunx文件有对应的文件类型,具体如下:
-
d
l
b
c
p
通过ls -l filename得到的文件权限信息的格式如下:
文件类型标识符 文件所有者三权限情况 文件所在组三权限 其他用户三权限,如下例子
ls -l shell.sh
-rw-r--r-- 表示普通文件 文件所有者能够读写 所在组只能读 其他用户只能读
文件特殊权限
SUID
当二进制程序文件文件所有者的x权限位置变成s时即为SUID权限,可以让普通用户临时获得文件的所有者权限来执行文件。
SGID
- 能够执行获得临时的属组权限
- 使得在目录中创建的文件可以继承目录的所有信息
相关命令
chmod 用来设置文件或者目录的权限
chmod [参数] 权限 文件名/目录名
chmod 777 shell.sh
#这里的777分别表示三个权限组的权限均为rwx,r:4,w:2,x:1
chmod -Rf g+s dir #可以为目录赋予SGID权限
chown 设置文件所有者,所有组
chown [参数] 所有者:所属组 文件/目录名称
通过参数-R能够设置目录下所有文件
SBIT
通过对文件设置SBIT权限使得只有该文件的所有者可以删除该文件。设置该权限后,其他人权限的x会被t代替。
chmod -R o+t Games/
liunx下的tmp目录即是默认t权限
文件中的隐藏属性
只读,只写,细节修改等属性
chattr
可以对文件添加/删除隐藏文件属性,通过+属性添加隐藏属性,-属性删除隐藏属性
chattr [参数] 文件
i
a
S
s
A
b
D
d
c
u
t
X
lsattr
用来显示隐藏权限用的
文件访问控制列表(ACL)
通过对文件或者目录设置文件访问控制列表,使得用户或者用户组设置文件或者目录的操作权限。与chmod的区别在于,ACL可以针对某一个用户/用户组来设置文件/目录的权限,细粒度更高。
setfacl
可以用来设置文件/目录的ACL表,具体参数如下所示:
setfacl [参数] 文件/目录名称
-b
-R
-m
#相当于为Game用户设置了rwx的权限
#u表示用户信息
setfacl -Rm u:Game:rwx /root
getfacl 表示目标文件/目录的访问权限信息
用户切换指令
su
可以在当前用户下切换到其他的用户,并使用exit关键字退出用户,例子如下:
su - user
#切换到user用户,如果在非root下切换需要密码
exit
sudo
用来给普通用户提供额外的权限来完成原本root管理员才能完成的任务。