Linux目录结构
linux中一切皆文件
/bin 存放着linux经常使用的目录
/boot 存放着linux核心文件
/dev存放着linux的外部设备
/etc 存放配置文件
/home 每个用户都有自己的home
/lib存放着系统最基本的动态链接库
/mnt 系统提供挂载别的文件系统
/opt下载软件文件夹
/var 存放日志文件
/etc/passwd:存储用户信息
/etc/shadow:口令配置文件
etc/group:存储组信息
常用指令
添加用户:useradd yb
设置密码:passwd yb
添加组:groupadd jdzxy --这里一定先要有jdzxy
给用户指定组:usermod -g jdzxy yb
用户基本信息:id yb
如何重置root用户密码
内网地址:ifconfig
外网地址:curl ifconfig.me
帮助指令
man ls --可以查看ls的用法
在linux下隐藏文件是以 . 开头
文件目录指令
mkdir -p 创建多级目录
rmdir [目录名称] 移除目录
rm -rf [目录名称] 递归删除
cp [选项] source dest
-r:递归复制整个文件夹
\cp -r source dest 强制覆盖
mv [源路径] [目标路径] 移动文件 相当于剪切
查看文本指令汇总
cat -n a.txt 查看文件
more 查看文件 entry 下一行 空格下一页
less 指令动态加载 /JAVA 全局搜索
echo $HOSTNAME输出主机名
head从头开始查询文本
tail显示文本后面几行
tail -f监控某个文件
"> 覆盖 >
">> :追加 >>
ln -s 目标目录 链接目录
history -n 查看历史指令
搜索查找指令
find 目录 选项
-name 文件名
-user 用户
-size 大小 +n (大于) -n(小于) n(等于) find / -size 300M
located --定位文件的路径
先执行updatedb
which ls --查看ls指令的路径
grep 搜索 -i 忽略大小写 -n 显示行号
tar -zcvf解压
tar -zxvf打包
Linux cpu飙高怎么办
-
确定cpu占用率高的进程ID - PID
在Linux下可以使用 jps -v 或者 top 命令直接查看。 -
查看进程中cpu占用率高的线程ID - TID
执行top -H -p [PID],查看结果 -
将线程ID - TID 转换成16进制 - XTID
执行printf “%x\n” [TID],输出结果记为 XTID -
将进程中的所有线程输出到文件
执行命令jstack [PID] >> jstack.txt。 -
在输出文件中查找对应的线程ID
执行命令cat jstack.txt | grep -i [XTID]。
centos网络连接方式
桥接模式:同一个网段的虚拟机可以进行通信
NAT模式:虚拟系统可以和外部通信
主机模式:独立系统
Linux组管理权限管理
修改文件所有者 chown james 2.txt
修改文件所有组 chngrp jdztcdx 2.txt
Linux的权限
0-9位说明
第一位:
-普通文件
l:软连接
d:目录
c:字符设备 鼠标
b:块设备 硬盘
修改文件权限:u 所有者 g所有组 o其他人 a所有人
chmod 777 最大权限
chown root:root 2.txt -R递归
练习1
创建警察 police 劫匪 bandit组,在police添加jack jam bandit中添加 xh xl
[root@localhost /]# groupadd police
[root@localhost /]# groupadd bandit
//新建用户并分配组
[root@localhost /]# useradd jack -g police
[root@localhost /]# id jack
uid=1001(jack) gid=1003(police) 组=1003(police)
[root@localhost /]# useradd jam -g police
[root@localhost /]# id jam
uid=1002(jam) gid=1003(police) 组=1003(police)
jam用户创建一个test文件,用户可读写 本组用户可读 其他组不能操作
[jam@localhost ~]$ vim test.txt
[jam@localhost ~]$ ls
test.txt
[jam@localhost ~]$ ll
总用量 4
-rw-r–r–. 1 jam police 25 8月 11 14:27 test.txt
[jam@localhost ~]$ chmod 640 test.xtt
chmod: 无法访问"test.xtt": 没有那个文件或目录
[jam@localhost ~]$ chmod 640 test.txt
[jam@localhost ~]$ ll
总用量 4
-rw-r-----. 1 jam police 25 8月 11 14:27 test.txt
目录 rwx 权限
x: 可以进入到该目,cd 到该目录
r: 是否可以在目录下执行 ll 读取目录下的数据
w: 执行更改 ,删除操作
定时任务 crontab
-e 编辑自己的定时任务
-l 查询定时任务
-r删除定时任务
第一个* 一小时中的第几分钟
每隔一分钟将 etc文件夹信息覆盖进 crontab.txt
*/1 * * * * ls -l /etc > /crontab.txt
编写脚本每隔一分钟将日期 日历写入文件夹
[root@localhost /]# vi my.sh
date >> /mydate
cal >> /mydate
[root@localhost /]# chmod 700 my.sh
[root@localhost /]# ./my.sh
[root@localhost /]# cat mydate
磁盘分区 磁盘挂载
网络
进程管理
ps -aux
ps -ef 全格式显示进程
查看远程登陆的用户 ps -ef|grep sshd
强制下线 kill -9 pid
杀死远程登陆进程则无法远程登陆需要重启 bin/systemctl start sshd.service
远程登陆 ssh root@ip
killall 进程名
pstree
-p :显示进程pid
-u:显示进程所有用户
服务管理
service network (start|restart|reload|stop|status)
chkconfig
–list 列出服务
systemctl
查看服务开机自启动状态 systemctl list-unit-files
查看某服务是否开机自启动 systemctl is-enabled crond.service
设置开机自启动 systemctl enable 服务名
systemctl服务所在位置 ls -l /usr/lib/systemd/system
开启防火墙
开启端口 firewall-cmd --permanent --add-port=8080/tcp
关闭端口 firewall-cmd --permanent --remove-port=8080/tcp
查看开放端口 firewall-cmd --permanent --list-ports
重载之后才能生效 firewall-cmd --reload
远程测试端口是否能够通信
[root@localhost /]# telnet 192.168.159.201 9092
动态监控系统top
top
-p 监控某个进程的状态
监控指定用户:
top
u
jam
显示jam用户的进程信息
监控网络状态
netstat
-an 按一定顺序输出
-p显示哪个进程在调用
rpm yum
yum 相当于 setup
rpm -qa查看当前系统安装的软件
rpm -q 软件名查询软件是否安装
rpm -qi 查询软件包信息
rpm -ql查询软件包中文件
rpm -qf 路径 查询文件所属软件包
删除软件包:rmp -e 软件包
-nodeps:强制删除
安装rpm
rpm -ivh 包
i安装
v提示
h进度条
shell编程
#!/bin/bash
export 让变量变成全局变量
source 加载改文件立即生效
echo 输出环境变量
:<<!多行注释!
A=“abcd”
输出A
echo $A;
B=date
执行date并且输出
echo $B
~
位置参数变量
[root@myPc /]# ./position.sh 1 2 3 4
1 echo “$1”
2 echo “
2
"
1234
e
c
h
o
"
2" 1 2 3 4 echo "
2"1234echo"@”
1 2 3 4 echo “
∗
"
4
e
c
h
o
"
*" 4 echo "
∗"4echo"@”
预定义变量
$$ 当前进程的pid
$! 后台运行的最后一个进程的pid
$?最后一次执行命令的状态 如果为0说明命令执行正确
echo “当前进程pid=$$”
echo “最后一个进程的pid=$!”
echo “最后执行指令返回值 i=$?”
运算符
计算(2+3)*4
A=$(((2+3)*4))
echo $A
B=$[(2+3)*4]
echo $B
C=expr 2 + 3
记得 2 + 3中间有空格
echo $C
D=expr $C \* 4
echo $D
E=expr 2 + 2
echo $E
~
求出命令行的和 20 50
F=$(($1+$2))
echo $F
G=$[$1+$2]
echo $G
H=expr $1 + $2
echo $H
条件判断
条件
1 =字符串比较
2整数比较
-ge >=
-gt >
-lt <
-le <=
-ne !=
-eq 等于
3按权限判断
-r
-w
-x
4按照文件类型
-f
-e
-d
if条件
if [ 条件 ] 条件和中括号之间必须有空格
then
fi
多分支
if
then
elif
then
fi
编写程序如果输入大于60则输出及格了小于输出不及格
#! /bin/bash
if [ $1 -ge 60 ]
then
echo “及格了”
elif [ $1 -lt 60 ]
then
echo “没及格”
fi
case语句
case $变量 in “1”)
echo “1”
;;
“*”)
echo “other”
;;
esac
例如:
case $1 in
“1”)
echo “星期一”
;;
“2”)
echo “星期二”
;;
)
echo ""
;;
esac
for循环
当 $* 和 $@ 不被双引号" "
包围时,它们之间没有任何区别,都是将接收到的每个参数看做一份数据,彼此之间以空格来分隔。
但是当它们被双引号" "
包含时,就会有区别了:
"$*"
会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。"$@"
仍然将每个参数都看作一份数据,彼此之间是独立的。
语法:for i in 变量1 变量2 变量3
do
代码
done
for((i=0;i<100;i++))
do
done
输出1-100的和
for((i=1;i<=100;i++))
do
SUM=
[
[
[SUM+$i]
done
echo “1-100的和是 $SUM”
While循环
while[ 条件 ] 条件,while 和[]之间必须有空格
do
程序
done
从命令行输入n统计1-n的和
SUM=0
k=0
while [ $k -le
1
]
d
o
S
U
M
=
1 ] do SUM=
1]doSUM=[
S
U
M
+
SUM+
SUM+k]
k=
[
[
[k+1]
done
echo “运算结果是 $SUM”
~
_read获取输入
read
-p 指定读取值的提示符
-t 指定读取值的等待时间 s
read -p “pls input a num =” NUM1
echo “the num input is $NUM1”
echo “====================”
read -t 10 -p “请输入默认十秒钟关闭” NUM1
echo “打印你的输入 $NUM1”
~
系统函数
[root@myPc shell]# basename /shell/2.txt
2.txt
[root@myPc shell]# dirname /shell/2.txt
/shell
[root@myPc shell]#
自定义函数
function getSum(){
SUM=$[$1+$2]
echo $SUM
}
echo "pls input 2 nums "
read -p "num1 is " n1
read -p "num2 is " n2
getSum $n1 $n2