首先:一切皆文件
介绍目录
/:根目录
/bin:存放最经常使用的命令
/lib:系统开机所需要的最基本的动态连接共享库
/home:普通用户的主目录
/root:系统管理的用户主目录
/etc:系统管理所需要的配置文件和子目录
/usr:用户的很多应用程序和文件都放在这个目录下,相当于progrem files
/boot:存放启动linux时使用的一些核心文件
/tmp:存放一些临时文件的
/dev:类似设备管理器,把所有的硬件用文件的形式存储
/mnt:让用户临时挂载别的文件系统
/usr/local:给另一个主机额外安装软件所安装的目录
/var:存放着在不断扩充着的东西(日志文件)
vi与vim的使用
vim hello.java 进入一般模式
输入i 进行插入模式
输入esc退出插入模式,再输入 :(或者/)进入命令行模式 , :wq保存并退出 :q退出
yy:复制 (一般模式)
5yy:并粘贴 p (一般模式)
/关键字 :回车再进行查找,n查找下一个 (输入/进入命令行下)
:set nu :进入命令行,然后设置出行号 (:set nonu)
G :最末行 gg:首行(一般模式)
u:撤销动作 (一般模式)
20 shift g :跳转到具体行(一般模式下)
关机重启
sync:把内存的数据同步到磁盘
shutdown -h now :立刻关机
reboot :重启
su - root :切换身份(root)
logout :退出用户
useradd 用户名:添加用户
passwd 用户名 :设置密码
userdel 用户名 :删除用户(不删除家目录)
who am i :查看登录用户信息
groupadd:添加组别
id 用户:查看用户id
文件目录指令
绝对路径:比较长,从根目录开始 pwd 显示当前位置
相对路径:从所在位置开始
cd : 进入下一个目录
cd.. :回到上一级
cd ~ :回到家目录
mkdir 【目录】:创建存在一级目录
mkdir -p 【目录】:创建不存在的一级目录
rmdir :删除空目录
rm -rf :删除目录非空(小心谨慎)-r 递归删除整个文件夹 -f 强制删除不提示
touch :创建空文件 (touch hello.txt)
cp:将/home/hello.txt 拷贝到 /home/bbb目录下 cp hello.txt/home/bbb
递归复制整个文件夹 举例,比如将/home/bbb整个目录,拷贝到/opt cp -r /home/bbb /opt
mv:mv old new (同一个目录相当于重命名)
mv pig.txt /root/ 从家目录移动根目录 mv pig.txt /root/cow.txt 移动并重命名
cat -n :查看文件并显示行号
less : 查看部分文件(当文件比较大)
more conf.log : 当前屏显示(或者在后面 | more)
echo:输出内容到控制台 echo $PATH 查看环境变量
head:head -n 5 :查看文件的前5行,默认显示10行 -f 实时监控文件的所有更新
tail :查看文件中尾部内容同head
>:覆盖 >>:追加
In -s/root /home/myroot 在/home目录先创建一个软链接myroot,链接到/root目录(删除软链接 rm
/home/myroot)
history :查看曾经执行过的命令(history 10 :查看最近10条,!5 :执行历史编号为5的指令)
时间日期类
date:显示当前时间信息
date "+%Y-%m-%d %H:%M:%S"(功能描述:显示当前时间年月日时分秒)注意区分大小写
date "+%Y-%m-%d"(功能描述:显示当前时间年月日)
设置系统当前时间:date -s " 2020-11-03 20:02:10"(比如设置成 2020-11-03 20:02:10)
cal:显示本月日历(cal 2020 显示2020的所有月份)
搜索查看类
find指令
find /home -name hello.txt:根据名称查找/home目录下的hello.txt文件
find / -size +200M 查看整个linux系统下大于200M的文件(+n大于, -n小于 n等于,单位有 k,M,G)
cat /home/hello.txt | grep -n "yes" :在hello.txt文件中,查找“yes”所在行,并且显示行号。
grep -n "yes" /home/hello.txt
压缩和解压
zip -r myhome.zip /home/ : 将home目录及其包含的文件和子文件夹都压缩
unzip -d /opt/tmp /home/myhome.zip 将myhome.zip解压到/opt/tmp目录下
tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt:将 /home/pig.txt和/home/cat.txt压缩成pc.tar.gz
tar -zcvf myhome.ta.gz /home/ 将/home的文件夹压缩成myhome.tar.gz
tar -zxvf pc.tar.gz:解压到当前文件
tar -zxvf /home/myhome.tar.gz -C /opt/tmp2 :将myhome.tar.gz 解压到/opt/tmp2目录下
组管理
chown tom apple.txt :修改文件所有者(后面为文件加路径地址)
groupadd fox :创建一个组fox
useradd -g monster fox:创建一个用户fox并放入到monster组中
ls :可以查看具体所在组
chgrp fruit orange.txt:修改文件所在组
usermod -g 新组名 用户名
usermod -d 目录名 用户名
权限
ls进行查看 -rwxrw-r-- l root root
0:文件类型(l:链接,d:目录,c:如鼠标,b:如硬盘)
1-3:所有者
4-6:所属组
7-9其他组
chmod u=rwx,g=rx,o=x ,文件/目录名
chmod o+w 文件/目录名
chmod a-x 文件/目录名
chmod 755/home/abc.txt
crond 调度
crontab -e 创建
crontab -r 终止调度
crontab -l 列出任务调度
磁盘情况查询
df -h :查看磁盘使用情况,是否需要清理或者增加硬盘
du -h --max-depth=1 /opt :查询/opt目录的磁盘占用情况,深度为1
ps -ef检测正在运行的进程
ls -l /opt | grep "^-" | wc -l : 统计/opt文件夹下文件的个数
主机名解析机制分析:首先检查浏览器缓存中是否有解析IP地址-操作系统中的DNS缓存(本地检查)-检查系统中hosts文件-域名服务DNS检查即域名数据库
进程管理
程序是静态代码-运行了就是进程-线程由进程创建,是进程的实体
ps -aux 显示进程所有
ps -aux | grep sshd : 看看有没有sshd的服务
ps -ef检测正在运行的进程 (与上面一样功能,内容格式不一样)
systemctl start sshd.server :启动某个服务
killall gedit :终止多个gedit
kill -9 :强制杀掉一个终端
服务管理
server 服务名 [start | stop | restart | reload | status]
rpm包管理
rpm:互联网下载包的打包安装工具
rpm -qa |grep firefox :查看当前系统是否安装了firefox
rpm -e firefox :删除软件包
rpm -ivh RPM包全路径名
shell编程
脚本以#!/bin/bash开头
A='date' 反引号,运行里面的命令,并吧结果返回给变量A
A=$(date)等价于反引号
shell注释::<<! !
$0 第一个参数(执行的文件名) $1 第二个参数 $2 第三个参数 $# 参数个数
$ 代表为变量
案例:条件判断(空格要求严格,注意看关键字颜色是否有变化)
if [ "ok" = "ok" ]
then
echo "equal"
fi
if [ 23 -ge 22 ]
then
echo "大于“
fi
目录中的文件是否存在
if [ -f /root/shcode/aaa.txt ]
then
echo "存在”
fi
案例:当命令行参数是1时,输出周一,是2时就输出周二,其他情况输出“other”
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二“
;;
*)
echo "other"
;;
esac
$*于$@的区别 就是 $*:输入的参数为一个整体
案例:从命令行输入一个属n,统计从1+。。。+n的值是多少?
SUM=0
i=0
for(( i=1; i<=$1; i++))
do
SUM=$[$SUM+$1]
done
echo "总和SUM=$SUM"
案例:read读取控制台输入 (read -t -p 十秒内输入)
read -p "请输入一个数NUM1=“ NUM1
echo "你输入了一个数NUM1=$NUM1”
案例:系统函数
basename 输出文件名(在加个文件后缀,则去除后缀)dirname :返回完整路径
mysql -u root -p :进入数据库
语句:show databases; use hspedu; show tables; select * from myoder;
编写:备份文件 mysql_db_backup.sh
chmod u+x mysql_db_backup.sh (加了权限后可以直接输入绝对路径进行执行,或者相对路径./)
或者 sh mysql_db_backup.sh 执行文件
综合案例:
需求:
1.每天凌晨2:30备份,数据库hspedu到/data/backup/db
2.备份开始和备份结束能够给出相应的提示信息
3.备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如2021-03-12_230101.tar.gz
4.在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除
#!/bin/bash
#备份目录
BACKUP=/data/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME
#数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=hspedu100
#备份的数据库名
DATABASE=hspedu
#创建备份目录,如果不存在,就创建(代码间注意空格)
[ ! -d "${BACKUP}/${DATETIME}” ] && mkdir -p "${BACKUP}/${DATETIME}"
#备份数据库(gzip压缩 gunzip解压)
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip >${BACKUP}/${DATETIME}/${DATETIME}.sql.gz
#将文件处理成 tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#删除对应的备份目录
rm -rf ${BACKUP}/ ${DATETIME}
#删除十天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "备份数据库${BACKUP} 成功"
crond
crontab -e :创建定时任务
30 2 * * * /usr/sbin/mysql_db_backup.sh
crontab -l :查看定时任务
乌班图
sudo apt-get install openssh-server :在当前linux上安装了SSH服务端和客户端
service sshd restart :启动了sshd服务,会监听端口22
从一台linux系统远程登陆另一台linux系统
shh 用户名@IP
登出:exit或者logout