Linux常用命令
常用命令:
pwd #显示当前路径
ll -h #人类可读格式
!ls #执行上次的ls命令
alias ll = 'ls -l' #指定命令别名
head -10 cs.txt #查看前10行
> #输入重定向,将值输入到文件中,覆盖
>> #追加
cat cs.txt 1>info 2>error #标准正确重定向
< #输出重定向,
<<
stat cs.txt #查看文件详细信息
#============================
wc #word count,统计多少字节多少行
wc -l #按行计数
cat wc.txt | wc -l #18,共有18行
#==================================
seq #生成序列
seq 5 12 #生成5到12的序列
seq -w 5 12 #生成5到12的等宽序列
#===================================
grep #查找,文档查找
grep ‘333’ wc.txt #统计含333的行
grep -n #显示行号
grep -w #精准匹配
#====================================
awk #按列过滤,$1,$2,$NF:第一,二,末列
awk '{print $1}' wc.txt #显示第一列内容
awk -F ',' '{print $1}' wc.txt #分隔符为,
#=====================================
sort #排序
sort -n #默认先字母【小到大写】后数字,sort -n -r反向
sort wc.txt | uniq -c #显示重复次数
文件:
#常用目录说明
/bin #二进制可执行文件
/boot #启动文件
/dev #设备控制文件
/etc #配置文件
/home #用户文件
/root #root用户文件
/lib[lib64] #库文件,一般so结尾,类似win dll文件
/mnt #mount挂载,挂载的文件
/opt #部分软件安装位置
/proc #process 进程编号目录
/sbin #super bin,超级用户命令
/srv #软件源码文件,源码->编译->打包->软件包
/sys #系统 功能目录
/run #程序运行中的tmp文件
#命令
find /etc -maxdepth 1 -type f -name 'ady*' # -iname忽略大小写
#-type 文件类型,不指定的话会搜索目录/-maxdepth 深度,目录层级,不指定搜索全部/"pa*"任意pa开头
find / -type f -size +100M #不带单位按b查询,查大于100M文件,+-大小
find / -type f -size +50M and -size -100M #大于50小于100
-mtime -1 #一天内,+1表示1天前| mmin以分钟为单位
find / ! -type f #取反,查找文件夹
-user jaden #查找属于用户的目录和文件, -group jaden
#对查询的文件进行处理
-exec rm rf {} \; #{}表示查询的文件,\;[转义]正常需要分号结尾
用户:
#用户相关命令
/etc/passwd #存放用户属性
/etc/shadow #存放密码文件,加密后的,很难破解
w #查看当前登录用户,或打开几个终端
#创建=============================
useradd test01 #创建用户
useradd -g group01 test01 #-g指定组
passwd test01 #设置密码,root给普通用户设置,不需要输入密码
passwd #用户给自己修改密码,需要输入旧密码
echo 123456 | passwd --stdin test01 #免交互修改密码,不需要确认,适用于批量
#查看=============================
id xx #查看某用户,默认当前用户
id root #用户id=0(root) 组id=0(root) 组=0(root)
#删除=============================
userdel test01 #删除test01,如已登录,则无法删除,删除后home路径下还在
#如果添加回已删除用户,提示home路径存在,不会从样板目录(skel)复制文件,但是密码需要重新设置
#新建回再使用-r也不会删除home下对应路径,因为用户对不上
userdel -r test01 #删除,并删除home下的路径
#修改===============================
usermod #-L锁定用户,下次无法登录,-U解锁用户
usermod -g group01 test01 #修改组
usermod -G group[] test01 #添加到多个组
usermod -L test01 #锁定用户
usermod -s /sbin/nologin test01 #禁止用户登录
grep -w 'test01' /etc/passwd #test01:x:1002:1002::/home/test01:/sbin/nologin
lchage -l test01 #查询用户信息
用户组:
#用户组相关命令
cat /etc/group #查看有哪些组
groupadd
groupdel #如果下面有用户,会报错,需要先userdel -r或者移动用户到其它组
#创建用户不指定会创建同名组,删除即使不用-r也会删除创建的组
groupmod:
groupmod -n group02 group01 #将group01改为group02
权限:
#权限命令,权限值是二进制数值,rwx值为7,---值为0
chmod # +,-[r,w,x]
chmod -rw cs.txt #去除r,w权限
chmod u+r cs.txt #指定用户权限
#环境变量===============================
echo $PATH #显示环境变量的位置
cp ./exe /home/ady/bin
mv /home/ady/bin/exe /home/ady/bin/xxx
xxx #在任意目录下执行xxx命令
#修改文件所属,修改给对应用户也可以授权,也可以通过uid,gid实现
chown #普通用户无法修改其他用户所属
chown test01:group01 cs.txt #修改为对应用户与组
压缩与下载:
#压缩=========================
#tar:压缩,不加z只是归档不压缩
tar -zcf #压缩
tar -zxf #解压
tar -tf #查看文件内容
#gzip:压缩并删除源文件
gzip cs.txt #压缩并删除
gzip -d info.gz #解压并删除源文件
#文件传输=============================
#wget,curl命令下载,scp命令进行文件互传
curl -o cs.zip http:// #下载并保存
wget http:// #不需要指定下载的文件名
scp 文件 主机用户@主机ip:文件目录 #推送
scp 主机用户@主机ip:文件目录/文件名 . #拉取
软件安装:
#编译安装
tar -zxf 源码.tar.gz
cd xx
./configure --prefix=/usr/loca1/nginx --without-pcre --without-http_rewrite_module --without-http_gzip_module
make
进程:
#查看进程,可以使用pstree
ps -ef
#参数: pid:进程编号,uid:用户编号,CMD[]:系统进程,ppid:父进程,STIME:启动时间,TTY:是否本地启动
硬件:
#硬件详细
lscpu #查看cpu
free -h #查看内存
df -h #查看硬盘
top #类似win任务管理器
shotdown -h now #关机
定时任务:
#时间命令
date +%F +%T #显示当前时间2022-11-14 00:10:11
systemctl restart chronyd #同步时间,需要互联网
#定时任务
crontab -l #查看定时任务
crontab -e #创建定时任务
tail -f cs.txt #检测文件改变
* * * * * cmd,分时天月周,*/5 * * * *:每5分钟一次|00,30 */1 * * *:每半小时
服务:
#服务
systemctl start|stop|restart|status|enable|disable
特殊符号:
#==============注释=================
#分号:命令分隔符,可以一次多条命令
#双引号:换行,解析变量
#单引号:换行,不解析变量
#\转义符号,/路径分割
#!:历史命令
#*:通配符
#$:调用变量
#||:双管道
#&&:和
#&:后台执行 top &
#~:home目录
#反引号`:嵌套命令,优先执行 touch test_`date +%T`.txt
三个常用指令:
#grep======================
grep 'password' cs.txt|grep -P[o:仅保留正则项] "正则" |sort -n |uniq -c
#查询并提取并排序并显示次数
-n:显示行号
-c:对结果行计数,有几行
-i不区分大小写
-v:取反
-w:精准匹配
-o:只显示匹配结果
-A1:同时打印搜索结果行的后一行After
-B3:打印前3行,before
-C2:上下各2行
-E:拓展正则表达式[通用正则]
-P:perl正则
#awk==========================取列
awk -F ',' '{print $1}' wc.txt #分隔符为,
awk '{print $1*$2}' wc.txt #计算
awk 'NR<=3 && NR>1' wc.txt #取行号大于1小于等于3
awk 'NR<=3{print $1}' wc.txt #取行取列
#可以用来取对应数据,比正则方便
awk -F ':' '$1~/h{print $1,$7}' cs.txt #取出第一列带h的,并取出1和7列
正则:
#正则========================
^:搜索以什么开头
grep '^#' cs #搜索#开头的行数据
$:搜索以什么结尾
grep 'ol$' cs #搜索ol结尾行数据
^$:表示空行,不是空格
.:匹配任意一个字符
\:转义符号
*:0个或多个前面的字符#'19*'可以匹配到1
.*:所有数据 ^.*以任意多个字符开头
[a-zA-Z0-9]:匹配集合中任意一个
[^abc]:取反,不包括
{n,m}:重复n到m次前一个字符
+:1次到多次
?:0次到1次
#============示例1
#sed:复制前100行数据并取出空行和含#的行
head -100 /etc/cs > cs.txt
sed '/#/d' cs.txt
sed '/^$/d' cs.txt
#grep
grep -Ev '^#|^$' a.txt
#===============示例2
#去除a.txt设有空行与注释[一行可能只有部分注释]
grep '#.*' a.txt
sed -i 's/#.*//g' a.txt #将#.*匹配的内容替换为空[s/old/new/g][i\:前插][a\:尾插]
sed -i '/^$/d' a.txt
运行级别:
#运行级别===========================
[0:关机][1:单用户][2:不带网络的多用户][3:完整多用户][4:保留][5:桌面][6:重启]
init 6 #重启
init 0 #关机
runlevel #查看运行级别
systemctl get-default
#设置运行级别,重启生效
set-default graphical.target #默认图形级别
set-default multi-user.target #默认命令行
#权限掩码============================
umask #初始一般022,文件计算666-022,目录计算777-022
#可以到/etc/profile修改
#inode和block
inode:储存除文件名以外的其他属性,index node
block:文件内容
#提权======================特殊权限
特殊文件如passwd文件[修改密码执行文件],s就是特殊的x,大S就是去除用户执行权限
suid可以让普通用户可以执行[可能受限制]
chmod u+s cs #添加
#用户切换==========================
su [swith user],带-会到home目录
#授权================================
配置/etc/sudoers,或者visudo
ady ALL=(ALL) /bin/systemctl,/usr/bin/reboot #所有终端,ady可以使用sudo进行的操作
#sudo提权===============================
#vi的权限很高,可以修改系统项
#vi可以在:输入系统命令,现需要加上!,可以直接输入终端进行提权root[!/bin/bash]
sudo find /home/ady -exec bash \; #find提权
sudo awk 'BEGIN {system("/bin/bash")}' cs.txt #直接进root终端
#还有例如cp,将其他系统/etc/shadow替换,还有mv,vi,sed,chmod等等
#脏牛提权:linu内核存在写入时复制(copy-on-write,COW)产生竞争,用户可以对只读内存进行写访问获取高权限,需要某些系统版本和指定gcc版本