linux日记
linux忘记密码怎么整 1.关机重启时将光标定位到第一个:长按e (注意要快速) 2.往下移动光标找到LANG=zh_CN.UTF-8在后面输入init=/bin/sh 3.输入ctrl+x 进入单用户模式 4.在输入:mount -o remount,rw/ (别忘记斜杠,逗号两边没空格) 5.输入passwd 回车 6.输入新密码:xxxxxx 再次确认新密码:xxxxxx (输入的密码不会显示) 7.再次输入:touch /.autorelable(touch与/后面有空格)回车 8.再次输入:exec /sbin/init (exec与/后有空格) 后续执行时间有点长别动它 注销与登录 先用普通账户登录xshell 命令行切换到root账户:su - root(注意-前后均有空格) logout再次回到普通用户 添加用户:(在root用户操作) useradd xxx (默认是在home文件下) useradd -d /home/user xxx 指定目录下创建用户 给创建的用户设置密码 passwd xxx 删除用户 1.userdel xxx 删掉xxx保留它的主目录 2.userdel -r xxx 删掉xxx连同它的主目录一起(注意慎重:一般不用) 查询用户信息 id xxx who am i 显示第一次登录到的用户信息 添加组 groupadd xxx 添加用户到指定组:useradd -g 武当 张无忌 将用户从一个组更改到另外一个组:usermod -g 魔教 张无忌 删除组 groupdel 帮助指令: man + 指令 例如:man ls ls -a 列出所有文件(包含隐藏文件以点开头“.”) 显示某个目录下的所有文件:ls -al /home(注意空格) 基本指令: 1.pwd:显示该目录的绝对路径 2.cd~ :表示回到自己的家目录 3.cd .. :回到当前目录的上一级目录 3.mkdir:创建目录(默认只能创建一级目录,要创建多级目录: mkdir -p /home/amimal) 4.rmdir :删除目录(只能删除空目录) 5.rm -rf xxx :删除非空目录 6.touch :创建一个空文件 7.cp hello.txt /home/bbb:将hello.txt 拷贝到home文件下的bbb文件夹内 8.cp -r /home/bbb /opt/ :将/home/bbb整个文件夹拷贝到opt文件夹内 8.rm /home/hello.txt :删除home下的hello.txt文件 9.rm -rf /home/bbb/:删除home 下整个bbb文件夹(,r表示递归删除,f表示强制删除不提示) 10.mv :移动或者重命名文家或者目录 在同一个文件夹就是重命名: mv oldname newname 重命名文件 在不同文件夹内就是移动: mv /temp/movefile /targetFolder 将temp下的movefile移动到targetFolder文件夹内 11.cat 显示文件+n显示行号:cat -n /etc/profile 显示etc下profile文件并展示行号 cat -n /etc/profile |more (|more管道指令:可以显示怎么看:可以一行一行看(enter),也可以一页一页看(空格)) 12.more指令(查看文件:more /etc/profile ) 后面可以加一些操作:可以一行一行看(enter),也可以一页一页看(空格) ,q退出more指令。ctrl+f向下滚动一屏幕。ctrl+B返回上一屏幕 = 输出行号。 :f输出文件名和当前行号 13.less查看文件指令:less /home/django 14.echo 输出内容到控制台 echo "hello, word~" 15.head 输出文件的前几行默认是10行(可以指定看多少行) head -n 5 xxx查看某个文件的前5行 16.tail 显示文件后几行(默认10行,也可以指定) tail -n 5 xxx 查看文件的后5行 tail -f xxx实时追宗文件的更新 17.>大于符:重定向 (如果有内容就覆盖) 例如echo "hello,word" > /home/redis/a.txt 把本该显示在终端的写入a.txt文件内 18 >>重定向追加(有内容就追加到内容后面) 19.cal显示当前日历信息 20.ln 软连接(类似于桌面快捷键) ln -s 源文件 软连接名 :ln -s /root/ /home/myroot在home/myroot文件下创建一个连接root目录的软连接 rm /home/myroot 删除软连接 21.history 查看已经执行过的指令 !+历史编号:执行曾经执行过的指令 22.date -s "2022-11-03 20:02:10" 设置系统事件 23.cal 2020 显示2020年的日历 24.find 查找指令 find /home -name hello.txt 在home文件下查找名叫hello.txt的文件 find /home -user nobody 按照用户名来查找 find / -size +200M(+大于 —小于) 按照文件的大小来找 25.lacte 快速定位文件路径(第一次使用前必须使用updatedb创建自己的小型数据库) locate a.txt 26.which ls 查看ls在那个文件目录 27.grep过滤查找(一般跟管道符号|使用) 第一种写法:cat a.txt | grep -n "hello" 查找a.txt文件里的hello单词,并显示行号 第二种写法:grep -n -i "hello" a.txt (加-i表示忽略大小写,不加表示区分大小写) 28.gzip压缩 gunzip解压缩指令(后缀名是.gz) gzip /home/a.txt压缩home文件下的a.txt gunzip /home/a.txt.gz zip 用于压缩文件夹 zip -r myhome.zip /home/ 将home文件夹及其子文件夹压缩成 myhome.zip文件 unzip 解压文件夹 uzip -d (解压到指定目录) /opt/tmp myhome.zip 将myhome.zip解压到 opt下的tmp文件内 29.tar 既可以解压也可以打包 打包:zcvf tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt 将home文件夹内的cat.txt和pig.txt打包成 pc.tar.gz tar -zcvf myhome.tar.gz /home/ 将整个home文件夹打包成myhome.tar.gz 解压:zxvf tar -zxvf pc.tar.gz 解压pc.tar.gz到当前目录 tar -zxvf pc.tar.gz -C /opt/tmp 将pc.tar.gz解压到/opt文件下的tmp文件内 30.修改所在组:a.txt原本在root文件下,想将它放在home组内 chgrp home a.txt 31.权限的基本介绍 -rwxrw-r-- 1(表示该文件加目录的个数) root(用户所) root(用户所在组) 1213(文件大小) Feb 2 09:39(创建事件) abc(该文件) (r表示读,w表示写,x表示执行) 前0-9位说明(-rwxrw-r--) 1.第0位确定文件类型(一般有d, -, l c, b)此处是 - :就是一个普通文件 l :表示连接,相当于windows快捷键 d :表示目录,相当于windows的文件夹 c :表示字符设备文件 ,如鼠标、键盘 b :表示块设备,如硬盘 1-3位(rwx)确定该文件的所有者拥有的权限 -user 4-6位(rw-)确定所属组拥有该文件的权限 -group 7-9位(r--)确定其它用户拥有的该文件权限 -other 32.修改权限 chmod 第一种方式:+,—,= 变更权限 u:所有者 g:所在组 o:所有人 1.chmod u=rwx,g=rx,o=x 文件名/目录 给用户附加rwx 权限,给所在组附加rx权限,给所有人附加x权限 2.chmod o+w 文件名/目录 给所有者附加w的权限 3.chomod a-x 文件名/目录 给所有者去除 x权限 案例:给bac文件的所有者读写执行的权限,所在组读执行的权限,所有人读执行的权限 chmod u=rwx,g=rx,o=rx abc 第二种修改方式:通过数字变更权限 r=4 w=2 x=1 rwx =4+2+1=7 chmod u=rwx,g=rx,o=x 文件名 ===》chmod 751 文件名 33.修改文件的所有者 chown chown newowner 文件名/目录 改变所有者 chown newowner:newgroup 文件名/目录 改所有者和所在组(-R表示递归) chown tom /home/abc.txt将home文件下的abc.txt所有者改成tom chown tom -R /home/test (R和tom可以交换位置) 33.修改文件/目录所在组:chgrp (-R表示递归) chgrp newgroup 文件/目录 改变所在组 chgrp shaolin /home/abc.txt将home下的abxc.txt的所在组改成shaolin 34.文件夹的rwx和文件的rwx的区别 文件夹: r : 可以显示文件 w :表示可以在文件下创建文件/删除文件 x :表示可以进入文件 文件: r;读 w:写 x;执行 34.定时任务调度(crond) crontab:进行定时任务设置 crontab -e :编辑crontab定时任务 */1 * * * * ls -l /etc/ > /home/lianxi/to.txt crontab -l :插叙crontab任务 crontab -r删除当前创建的croontab任务 例子:每隔1分钟将当前日期和日历追加到/home/mycal文件中 1.先写一个shell脚本 vim /home/my.sh (date >> /home/mycal cal >> /home/mycal) 2.更改脚本权限 chmod u+x /home/my.sh 3.用crontab调用 crontab -e */1 * * * * /home/my.sh 例二: 每天凌晨2点将mysql数据库tesddb,备份到文件中(提示指令:mysqldump -u root -p 密码 数据库 >> /home/db.bak) crontab -e 0 2 * * * mysaldump -u root -proot testdb >> /home/db.bak crontab -r 删除所有调度 crontab -l显示所有调度 service crond restart 重启调度任务 ps -ef 检查所有正在运行的进程 (后面可以添加过滤:ps -ef | grep atd) 35.定时任务;at 一次性定时计划任务 基本语法: at 选项 命令 ctrl+d结束命令 (输入两次) at 5pm tomorrow date > root/date100.log(两次ctrl+d) 明天下午5点将日期写到root/date100.log这个文件中去 at now + 5 minutes date > /home/date.log(两次ctrl+d) 5分钟后将日期写入home稳健型唉的date.log 也可以执行shell脚本 at now + 5 minutes /home/my.sh (脚本要存在并且拥有可执行权限) atrm +任务编号 删除定时任务 lsblk 查看分区挂载(mount)情况 lsblk -f 查看分区详情 硬盘挂载: 1.虚拟机-设置-选中硬盘-添加-选择scsi-默认-直接下一步-选择硬盘大小-完成创建(重启后才能挂载) 2.重启虚拟机(reboot)重新连接xshell 3.输入lsblk查看分区 4.给新硬盘增加分区 : fdisk /dev/sdb m 显示列表命令 n 新增分区 p 显示磁盘分区 选择多少个分区:1-4,选择1个分区 最后输入w写入并退出(分区创建完成) 5.给分区格式化,(目前没有分区类型和uuid必须格式化指定) mkfs -t ext4 /dev/sdb1 ;其中ext4表示分区类型 此时就会新增uuid和分区类型 6.挂载分区 想在根目录下创建要挂载的文件newdisk mount /dev/sdb1 /newdisk 将分区挂载到newdisk上分区挂载完成 卸载分区:umount /dev/dsb1 或者umount /newdisk 用命令行挂载的重启会失效(**********) 永久挂载: 修改 /etc/fstab vim /etc/fstab 拷贝一份挂载关系:yy p (在正常模式下复制) /dev/sdb1 /newdisk 00 保存退出 在重启就完成了 执行mount -a 查询分区使用情况:df -h 插叙具体目录的使用情况: du -h 插叙当前目录磁盘占用情况 -s指定目录占用大小汇总 -h 带计量单位 -a含文件 --max-depth =1 子目录深度 -c列出明细同时,增加汇总值 例如:查询/opt目录磁盘占用情况深度为1 du -h /opt --max-depth=1 du -hac /opt --max-depth=1 磁盘工作指令 统计opt文件夹下文件的个数 ls -l /opt | grep "^-" (支持正则表达式:以-开头)|wc -l (统计个数) 统计opt文件夹下目录的个数包括子文件夹里面的 ls -lR(表示递归) /opt | grep "^-" | wc -l 以树状显示目录结构 (默认情况下没有安装tree指令,使用yum install tree) tree /home/ 指定ip :直接修改配置文件来指定IP,并可以连接到外网 1. vim /etc/sysconfig/network-scripts/ifcfg-ens33 要求将ip地址配置成静态的,比如:ip改为192.168.200.130 2. 将BOOTPROTO="cdbh"改为 BOOTPROTO=static #ip地址 IPADDR=192.168.200.130 #网关 GATEWAY=192.168.200.2 #域名解析器 DNS1=192.168.200.2 3. 将虚拟机上的ip更改为192.168.200.2 编辑-虚拟网络编辑器-vmnet8-子网ip改为192.168.200.0-NAT设置-网关设置改为192.168.200.2 应用保存就可以了 获取主机名:hostname 修改主机名:vim /etc/hostname 修改主机映射(不用通过IP地址直接ping主机名) 自己windows主机通过主机名访问linux: 直接在C:\Windows\System32\drivers\etc 修改hosts 192.168.200.130 主机名 linux通过主机名访问自己windows主机: 1.首先知道自己主机名:pc-pc 2.在/etc/hosts文件中指定 vim /etc/hosts 192.168.200.1 pc-pc 进程: ps -a 显示当前终端所有进程 ps -u 以用户的格式显示进程信息 ps -x 显示后台进程运行的参数(一般组合使用) 查看当前进程里面是否有sshd ps -aux | grep sshd (查看登录进程状态) kill[选项]进程号;单独终止某一个进程 killall进程名称:终止所有进程 -9:表示强制进程立刻停止 例子:强制踢掉某个非法登录的用户 1.找到登录的进程号 ps -aux | grep sshd 杀死该进程号 2.kill 11421 例子:终止远程登录服务sshd,在适当的时候再次重启sshd服务 1.找到登录的进程号 ps -aux | grep sshd 2.kill sshd对应的进程号, 3.重启服务 /bin/systemctl start sshd.service 终止多个进程号:killall gedit 强制杀死一个终端 1.查看终端: ps -aux | grep bash kill -9 要杀死的终端进程号 以树状图显示进程:pstree pstree -p 以树状图显示pid pstree -u 显示所属用户 服务管理: service 服务名 start\restart\stop\reoad\status 查看所有服务:setup 前面打*号的表示开机自启动 产看当前服务级别:systemctl get-default 设置服务级别: systemctl set-default multi-user.target 设置默认级别到多用户级别(无图像的) systemctl set-default graphical.target (设置成有图版本的) chkconfig指令:可以给服务设置自启动/关闭 chkconfig --list | grep xxx 查看服务列表(可以过滤) chkconfig --level 5 服务名 on/off 将某个服务在某个级别设置关闭或者开启 chkconfig --level 3 network on 将network在3级别打开 systemctl 服务名 start\restart\stop\reload\status systemctl enable 服务名:设置开机自启动 systemctl list-unit-files | grep xxx 查看服务启动状态 systemctl disable 服务名 关闭服务器自启动 systemctl is-enabled 服务名:查看某个服务是否是自启动 telnet 测试某个端口 防火墙小知识点:相当于一个保护罩,里面可以开设/关闭某个端口,关闭了的端口外面是无法访问的 撤去了防火墙,外面的就可以直接访问 在防火墙中打开端口: netstat -anp | more 查看服务协议 firewall-cmd --permanent --add-port=端口号/协议 打开端口 firewall-cmd --permanent --remove-port=端口/协议 关闭或者打开需重新载入才能生效:firewall-cmd --reload 查询端口是否开放:firewall-cmd --query-port=端口、协议 动态监控指令;top(默认每隔3秒刷新) 输入: P:按照CPU来排序 M;按照内存占用大小排序 N:按照pid大小排序 q:退出top指令 键值某个特定用户:比如tom 1.输入top 2.输入u回车,在输入用户名tom 终止某个进程:结束tom登录 1.top 2.输入k回车,在输入要结束的进程号xxx在输入信号量:9强制终止 指定系统动态更新时间:top -d 10 监控网络状态: netstat -an 按照一定顺序输出 netstat -p 显示那个进程在调用 查看服务名为sshd的服务信息 netstat -anp | grep sshd rpm包的管理:查看rpm的指令: rpm -qa | grep xxx 查看某一个软件 查看某一款软件是否安装:rpm -q xxx 查看软件包的详细信息:rpm -qi xxx 查询软件包中的文件 rpm -ql xxx rpm -qf 文件路径名 查询文件所属软件包 rpm -qf /etc/passwd 查询etc下面passwd的文件路径 删除rpm包:rpm -e xxx 安装rpm包:rpm -ivh rpm包的全路径名称 (i表示install,v表示verbose提示, H表示hash进度条) yum list | grep xxx 软件列表 yum install xxx下载安装 shell是一个命令行解释器,它为哦你过户提供了一个想linux内核发送请求方便程序运行的界面系统程序,用户可以用shell来启动,挂起,停止甚至 是编写一些程序 脚本格式要求: 1.以#!/bin/bash开头 2.脚本需要可执行权限 编写一个shelle脚本输出helloword 1.vim hello.sh 默认是以.sh为后缀 2.第一行 #!/bin/bash echo "helloword" 3.修改执行权限 chmod u+x hello.sh (也可以不给执行权限,直接:sh hello.sh,系统会自动将hello.sh将脚本执行就会输出hellword) 4.变成绿色后执行:./hello.sh shell变量 1.定义变量 #!/bin/bash a=100 (等号中间不加空格) echo a=$a ======echo "a=$a" 2.撤销变量a unset a echo a=$a 3.定义静态变量,b=2(注意:静态变量不能unset) readonly b=2 echo b=$b 返回命令语句的结果 b=$(cal)= b=`cal` echo b=$b 配置环境变量 1.export 变量名=变量值 将shell变量输出为环境变量、全局变量 2.source 配置文件 让修改后的配置信息立刻生效 3.echo $变量名 查询环境变脸的值 设置tomcat的环境变量 (tomecat在/opt/tomcat) vim /etc/profile export TOMCAT_HOME=/opt/tomcat 全局变量设置完成 使用:echo "tomcat_home=$TOMCAT_HOME" shell脚本里面的多行注释 :<<! 内容 ! 运算表达式: 计算(2+3)*4 1.第一种写法 res1=$(((2+3)*4)) 2.第二种写法 res2=$[(2+3)*4] 3.第三种写法 temp=`expr 2 + 3` 加号两边有空格 res4=`expr $temp \* 4` 乘号前面加\ echo "res4=$res4" 例二;求两个命令行参数的和 20 50 sum=$[$1+$2] $1表示第一个参数$2表示第二个参数 echo "sum=$sum" 条件判断语句 语法:[ condition ] 中括号和condition之间要有空格 1.判断ok是否等于ok #!/bin/bash if [ "ok" = "ok" ] then echo "equal" fi 2.判断23是否大于等于22 if [ 23 -ge 22 ] then echo "yes" fi 3.判断/root/shcode/aaa/txt在目录文件是否存在 if [ -f /root/shcode/aaa.txt ] then echo "存在" fi 流程控制: if [ 条件 ] then 代码 elif [ 条件 ] then 代码 fi ************中括号内空格不能省 编写shell代码;接收一个参数,大于等于60,输出及格,小于60输出不及格 #!/bin/bash temp=$1 if [ $temp -ge 60 ] then echo "jige" elif [ $temp -lt 60 ] then echo "bujige" fi case语句 基本语法 实例:当命令行参数是1输出周一。当命令行参数为2输出周二,其它输出other case $1 in "1") echo "zhouyi" ;; "2") echo "zhouer" ;; "*") echo "qita" ;; esac for循环 实例:打印命令行输入的参数 #!/bin/bash for i in "$*" do echo "num id $i" done $*将输入的参数当作一个整体 echo "=============" for j in "$@" do echo "num is $j" done $@将输入的参数当作一个一个的参数 例二:从1加到100 #!/bin/bash #例二:从1加到n(n为输入的参数) SUM=0 for ((i=1; i<$1; i++)) do SUM=$[$SUM+$i] done echo "zonghe=$SUM" while循环 案例:从命令行输入一个数n,统计1+..n的值是多少 SUM=0 i=0 while [ $i -le $1 ] do SUM=$[$SUM+$i] i=$[$i+1] done echo "SUM=$SUM" read 读取控制台输入案例 read 选项 参数 read -p 读取时的提示符 read -t 指定多少秒内输入 1.读取控制台输入一个NUM1的值 read -p "请输入一个NUM1=" NUM1 echo "你输入的NUM1=$NUM1" 2.读取控制台输入一个NUM2的值,在10S内输入 read -t 10 -p "请输入一个NUM2="NUM2 echo "你输入的NUM2=$NUM2" 函数 basename:返回完整路径 basename /home/lianxi/a.txt(输出a.txt) dirname 文件的绝对路径 dirname /home/lianxi/a.txt(输出 /home/lianxi) 自定义函数 案例:动态获取两个函数的和,getSum function getSum(){ SUM=$[$n1+$n2] echo "he shi =$SUM" } # 动态获取 read -p "qing shu ru yi ge shu n1=" n1 read -p "qing shuru di er ge shu n2=" n2 #函数调用 getSum $n1 $n2