Linux基础
Posted 海盗屋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基础相关的知识,希望对你有一定的参考价值。
Lunux简介
Linux就是操作系统,如windows、mac。
LInux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境。
Linux是由Linux Torvalds(林纳斯·托瓦兹)期初开发的,由于源代码的开放性,现在已经衍生出了成千上百种不同的Linux系统。
Linux系统的应用非常广泛,不仅可以长时间的运行我们编写的代码,还可以安装在各种计算机硬件设备中,如手机、平板电脑、路由器等。android程序最底层就是运行在linux系统上的。
Linux的分类
1.Linux根据市场需求不同,基本分为两个方向:
1)图形化界面版:注重用户体验,类似windows操作系统,但目前成熟度不够。
2)服务器版:没有好看的界面,是以在控制台窗口中输入命令操作系统的,类似dos,使我们假设服务器的最佳选择。
2.Linux根据原生程度,又分两种:
1)内核版本:https://www.kernel.org/ 内核->二次开发后->定制特有功能->发布。
2)发型版本:一些组织或公司在内核版基础上进行二次开发而重新发型的版本
3.Linux发型版本不同,又可以分为n多种
图形化的有:ubantu、fedora、 命令行的:CentOS
Linux的安装
1.虚拟机-- 在电脑上安装一个软件,在软件中可以模拟一台或多台虚拟的电脑机器。 Parallels Desktop (mac)、VMWare(win)、windows10自带的Hyper-v 默认没有开启 在控制面板 可以开启
2.CentOS 下载 https://www.centos.org/download/
CentOS官网上,提供了三种ISO镜像文件的下载:
- DVD ISO:标准安装版,一般下载这个就可以了(推荐)
- Everything ISO:对完整版安装盘的软件进行补充,集成所有软件。(包含CentOS7的一套完整的软件包,可以用来安装系统或者填充本地镜像)
- Minimal ISO:迷你版,小巧、安装快速、自带的软件少
本次安装最小的.. minimal iso.
安装CentOS root 1234
虚拟机的安装和CentOs的安装见如下网址,mac用 pd ,windows用 vm
https://www.linuxidc.com/Linux/2016-08/133827.htm
桥接模式 就是跟你的电脑使用同一个ip,NAT模式就是虚拟机使用独立的ip。
服务器版的linux安装完后,没有图形化界面,所以只能通过控制台去操作系统,我们就要使用类似dos命令的linux命令去操作系统。
Linux基本命令
登陆 一共有两个账号 一个是你自定义的 一个是root 根权限 密码按设置的输入
windows中通过图形化界面和鼠标可以任意切换需要进入的目录,但linux必须通过cd命令切换目录。
linux目录结构
bin (binaryies)存放二进制可执行文件(ls、cat、mkdir等),常用命令一般都在这里。
sbin(super user binaries) 存放二进制可执行文件,只有root才能访问
etc(etcetera) 存放系统配置文件
usr(unix shared resources) 存放共享的系统资源
home 存放用户文件的根目录 是用户主目录的基点 比如user的主目录就是 /home/user 可以用~user表示
root 超级用户目录
dev(devices) 存放设备文件
lib(library)存放跟文件系统中的程序运行所需要的共享库及内核模块
mnt(mount)系统管理员安装临时文件系统的安装点
boot 存放用于系统引导时使用的各种文件
tmp(temporary) 用于存放各种临时文件
var(variable) 用于存放运行时需要改变数据的文件 ,比如说各种服务的日志文件,系统启动日志等。
opt 额外安装的可选应用程序包所放置的位置,一般我们把tomcat等安装到这里。
使用root登陆完 所在位置 ~ root文件夹
1.目录切换命令
cd usr 切换到该目录下的usr目录
cd .. 切换到上一层目录
cd / 切换到系统根目录
cd ~ 切换到用户主目录
cd - 切换到上一个所在目录
2.目录的操作命令(增删改查)
1.增加目录:mkdir 目录名称 mkdir mypackage mkdir mypackage/child , mkdir cir/cir2 报错没有cir 加-p 创建嵌套目录 mkdir -p cir/cir2
2.查看目录列表:ls 查看当前路径下文件 ls / 查看根目录 后面可以跟目录 ls -a 查看所有文件包含隐藏 ls -l 查看详细信息 ll -h 以kb单位展示 详细信息
3.寻找目录 查 : find 目录 参数 如:查找root下的与test相关的目录或文件 find /root -name \'test*\' find / -iname *ss* 忽略大小写 -iname
find / -size +204800 查找根目录 文件大于100mb的 1024kb = 1mb 100mb=102400kb 102400kb=204800块 1kb=2块 1块=0.5kb
find / -name \'test*\' -a -type d 查找目录 d是目录 -a 是连接符
4.修改目录的名称: mv 目录名称 新目录名称 如:test目录下有一个oldTest目录,使用 mv oldTest newTest 命令修改(mv 命令不光可以修改目录,还可以修改文件名 压缩包名等)
5.移动目录的位置 --剪切 : mv 目录名称 目录新的位置 将test下的newTest 剪切到 /usr下面 使用 mv newTest /usr (mv 命令不光可以剪切目录,还可以剪切压缩包 文件等)
6.拷贝目录 cp -r 目录名称 拷贝到目标位置 -r代表递归拷贝 如:将/usr下的newTest 拷贝到根目录下的test中,使用 cp -r /usr/newTest /test (cp 命令不光可以拷贝文件,压缩包 文件 都可以进行拷贝 ,压缩包和文件不能使用-r递归)
7.删除目录 rm [-rf] 目录 如:删除/usr下的newTest文件夹,使用 rm -r newTest 。进入 /test 使用rm -rf newTest 不需要询问删除 (rm 不仅可以删除目录,也可以删除其他文件或压缩包)
8.删除空文件夹 rmdir test 此test必须是空文件夹
9.man 帮助命令 man touch man cd man rm
3.文件的操作命令(增删改查)
1.创建文件 touch 文件名 在test目录下创建空文件 touch aaa.txt
2.文件的查看 cat/more/less/tail 文件
使用cat查看 /etc/sudo.conf 文件 只能显示最后一屏的内容
使用more查看 /etc/sudo.conf 文件,可以显示百分比,回车可以向下一行 空格可以向下一页,退出按q
使用less查看 /etc/sudo.conf 文件,可以使用键盘上的 上下 和PgUp 和PgDn向上和向下翻页,q结束查看
使用tail -10查看 /etc/sudo.conf 文件的后10行 ,ctrl+c 结束 (使用tail -f 文件 可以对某个文件进行动态监控,如日志文件)
3.修改文件的内容 vim 文件 如:编辑test下的aaa.txt文件 使用vim aaa.txt 但此时并不能编辑 点击键盘 i/a/o 进入编辑模式 可以编辑文件,编辑完成后 退出vim 先按下esc 然后输入 :wq 保存退出 :q不保存退出。 如果找不到命令参考 https://blog.csdn.net/yi22110421/article/details/51692107
4.删除文件 rm -rf 文件 即可 同目录
4.压缩文件的操作命令
1.打开并压缩文件
Linux中打包文件一般是以.tar结尾的,压缩命令一般是以.gz结尾的。
而一般情况下 打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般是.tar.gz。
命令:tar -zcvf 打包压缩后的文件名 要打包压缩的文件
其中: z -调用gzip压缩命令进行压缩
c -打包文件
v -显示运行过程
f 指定文件名
示例:打包并压缩/test 当前没文件夹所有的文件 压缩包的压缩名指定为 test.tar.gz tar -zcvf test.tar.gz ./
2.解压压缩包
命令:tar [-xvf] 压缩文件
其中: x -代表解压
示例:解压 test目录下的test.tar.gz到当前目录下 tar -xvf test.tar.gz
解压 test目录下的test.tar.gz到根目录/usr下 tar -xvf test.tar.gz -C /usr ----C代表指定解压的位置
5.其他命令
1.显示当前所在的位置 pwd
2.clear 清空当前屏幕 快捷键ctrl+l
3.搜索命令 grep 要搜索的字符串 要搜索的文件 如:grep postopny postopny.txt --color 在postpony.txt中查找postpony字符串 --color代表高亮 可写可不写
4.查看进程 ps -ef
4.管道命令 命令: | 前面是上一级 后面是下一级 可以将上一个命令的输出作文本次目录的输入 ps -ef | grep system 搜索出有 system字符串的 前面的输出结果 | 作为下一个命令的输入
5.杀死进程 kill -9 进程的pid ps -ef | grep qq --color 找到qq进程 kill -9 38483 杀掉
6.网络通信命令 ifconfig 结合管道查看ip ifconfig | grep "inet" 如果没有 https://blog.csdn.net/gxdvip/article/details/40110487
ping 目标网址 或ip
netstat -an 查看当前系统的端口使用
7.追加符号 >> echo hello >> aaa.txt 把内容追加到这个文件中
6.用户和用户组
cat /etc/passwd 查看所有用户
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
david:x:1000:1000:大伟 白:/home/david:/bin/bash
用户名:x是否需要密码:UID=user id 用户ID(0是root 1-499是系统用户 普通用户500+ ):GIP=group id 用户组ID:别名:用户家路径:shell命令
cat /etc/group 查看用户组 linux在我们创建用户时,默认以我们的用户名称创建一个用户组。
root:x:0:
bin:x:1:
david:x:1000:david
用户组名:x密码标记位:用户组ID
添加用户 useradd dafengchui
切换用户 su - dafengchui
[dafengchui@www ~]$ 前面是个$符号
exit 退出当前的 回到上一个
[root@www ~]# root权限前面是个 #号
echo 输出 echo $PATH 输出环境变量
删除用户 userdel -r zhangsan 加-r会把家目录也删掉
ls -l /home 发现zhangsan文件夹也不见了
groupadd groupdel 增加用户组 和删除用户组
7.linux的权限管理
通过ls -l可以查看某个目录下的文件或目录的权限 ll /etc
drwxrwxr-x 第一个d是目录的意思
-rw-r--r-- 第一个-是文件的意思
lrwxr-xr-x 第一个l是快捷方式的意思
除了第一个字母后 3个字母为一组 三组
d rwx r-x r-x
第一组 代表文件所有者 user u
第二组 代表文件的所属组 group g
第三组 其他用户的权限 other o
rwx 分别代表 r读取权(也可用数字4表示) w写入权(也可用数字2表示) x执行权(也可用数字1表示) 如果是-代表对应位置无操作权限
修改 目录/文件 权限的命令:chmod
示例:修改/test 下的aaa.txt的权限为属主有全部权限,属主所在的组有读写权限,其他用户只有读取的权限。
chmod u=rwx,g=rw,o=r aaa.txt
还可以 chmod u+w,g+x,o-r aaa.txt 加减号增加减少权限
chmod a+rwx aaa.txt a就是all 所有的都增加 或都减少
也可用对应的数字 chmod 764 aaa.txt
4 2 1 这三个数字相加不会出现重复的数字,所以7代表读写执行,6代表读写,4代表只读,2代表只写,1代表只能执行,3代表写入和执行...
chmod这个命令只有root 或者文件所有者 才可以执行
chown 修改文件所有者 只有root可以使用
chown david aaa.txt
chgrp 修改文件所属组 只有root可以使用
chgrp david aaa.txt
chown root:root aaa.txt 同时修改 所有者和所属组
8.VI编辑器
vi /home/test.txt vim /etc/passwd
有打开 没有就创建
按 i 可以进入编辑模式
保存退出 按一下esc 然后输入:wq 只退出:q
强制退出 后面加个!
:set number 显示行号
全局替换 1,$s/aaa/bbb/g 从第一行开始到文件结尾,把所有aaa换成bbb
大写的ZZ 可以快速保存并退出
命令模式下:
删除一整行 dd 其实就是剪切
撤销功能 u
复制 yy 粘贴pp
多行复制 输入数字要复制的行数 然后再输入yy 比如 5 yy
多行删除也是一样 先输入数字 然后再按dd 比如 9 dd
快速移动到行末尾并进入编辑模式 shift+a
快速移动到文件末尾 shift+g
快速移动到文件开头 gg
9.远程连接工具的使用
1.mac下连接 linux操作系统 打开终端工具 如果不是root登陆 就输入 sudo -i 切换为root用户
ssh root@10.211.55.5 然后输入yes 输入linux系统中的密码就连上了
2.mac下传文件 cyberduck 小黄鸭
打开小黄鸭,点击新建连接,选择sftp ssh文件传输协议,输入url 用户名 密码即可。
windows flashfxp ftp工具即可
中文乱码
https://www.cnblogs.com/sisimi/p/7693226.html
10.sudo权限管理
首先切换到daivd账号,使用 useradd 添加账号 提示权限不够。 可以使用sudo命令让 david 可以使用useradd这个命令! sudo useradd david 输入密码
11.系统命令管理
centOS 6
chkconfig --list iptables 可以查看指定服务启动状态
service (network,chkconfig) (start,stop,status) 可以看状态 启动 关闭
chkconfig iptables on/off 可以设置是否开机启动
CentOS 7 中systemctl 是主要管理服务的工具,他融合了centOS6中的 chkconfig和service。
启动防火墙:systemctl start firewalld
关闭防火墙:systemctl stop firewalld
查看防火墙状态:systemctl status firewalld
开机启用防火墙:systemctl disable firewalld
开机禁用防火墙:systemctl enable firewalld
性能查看器 : top 内存 cpu查看器
netstat 查看端口信息
route 查看路由信息
12.linux软件管理
源码包-> 源代码 需要自己编译
二进制包->编译过的包,如:RPM包。自动管理依赖性,方便管理,安装,更新,卸载等。
RPM管理方式 : 红冒软件管理工具的缩写。
查询:rpm -qa | grep java 前面查看所有rpm安装包,后面是过滤出java包含java的
查询个数:rpm -qa | wc -l
安装:rpm -ivh 包名.rpm -i代表安装 vh显示安装进度
卸载:rpm -e 包名 -e 代表卸载 如果加--nodeps 不卸载依赖包
YUM管理方式: 在线安装模式,在线查询 推荐用这个!
查询:yum list jdk (从仓库查询) 已安装的后面会有@开头, 卸载后@就没了 ,base 就是仓库里有,updates 表示已安装的有更新。
安装:yum install 软件名 -y 加-y不在询问 直接安装
卸载:yum remove 软件名 -y 加-y 不在询问 直接卸载
13.shell
shell是shell脚本命令解释器,把我们写的命令翻译成计算器二进制语言。
shell是一门编程语言,解释型脚本语言。
1.自定义shell变量
name=123 定义变量 没有类型 fname=\'hello world\' 如果值有空格 需要加引号
name="$name"456 变量叠加 123456 name=${name}789 123456789
echo $name 输出变量
set | grep name 可以查看已经定义的变量
unset name 删除变量
2.环境变量 (我们可以在任何地方使用 ls pwd等命令 是因为已经配置了系统环境变量 echo $PATH)
export 变量名=变量值 定义环境变量 (使用bash切换shell环境时,系统变量都可见,自定义变量则不可见)
env 查询环境变量
unset 卸载变量
3.位置参数变量
$n 参数 n为数字,$0代表命令本身,$1-$9代表第1到第9个参数,10以上的数字需要用大括号包含,${10}。
$* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ 这个变量也代表命令行中所有的参数,不过$@会把每个参数区分开,用来遍历
$# 代表几个参数
新建一个shell脚本, vim canshu.sh
#!/bin/bash #开头
echo $0
echo $1 #保存退出
echo $#
echo $*
echo $@
更改一下权限 chmod 755
执行shell命令:
1.绝对路径 /home/david/canshu.sh 1 2 3 4 输出第一二个参数,
2.相对路径 ./canshu.sh 1 2
3.bash命令 bash canshu.sh 1 2 无视目录执行
查看我们当前使用的shell命令,
1.vim /etc/passwd 查看当前账号最后面的路径
2.echo $SHELL
4.预定义变量
$? 最后一次执行的命令返回状态。如果值为0,则上一个命令正确执行,如果非0那么上一个命令执行不成功。
$$ 当前进程的PID
$! 上一个进程的PID
14.常用表达式
逻辑连接符
&& 与,前面不执行 后面也不执行了,前面执行了 才会执行后面的 短路 ls /sdfsdfsdf && echo hello
|| 或, 前面执行了 后面就不执行了 ,前面不执行了,后面会执行 echo hello || ls /sdf
; 无逻辑符号,都会执行
运算
$[a+b] 或者 $[$a+$b]
$((a*b)) 或者 $(($a*$b))
expr $a + $b 表达式模式
判断表达式
字符串:==、!=、-z(如果字符串为空返回真)、-n(如果字符串不为空返回真) v1=12 v2=13
[ $v1 == $v2 ] 什么结果都没有,这时 需要echo $? 来看看上一次执行的命令是否成功 输出1 则不成功
[ $v1 != $v2 ] 执行后 输出echo $? 返回0 执行成功
[ -z $v1 ] 如果为空返回真 echo $? 返回1 执行失败
[ -n $v1 ] 如果不为空返回镇 echo $? 返回0 执行成功
数字:eq(是否相等)、ne(不等)、lt(小于)、gt(大于)、le(小与等于)、gt(大于等于)
[ $v1 -eq $v2 ] echo $? 返回1
[ $v2 -ne $v2 ] echo $? 返回0
文件:-e(是否存在)、-f(是否存在且是文件非目录)、-d(是否存在且是目录非文件)、-w(是否存在且有写权限)、-r(是否存在且有读权限)、-x(执行权限)
[ -e canshu.sh ] echo $? 返回0 存在
时间命令:
date 输出当前时间
date -s "yyyy-MM-dd hh:mm:ss" 设置时间
计划任务:
临时执行:at 时间 --指定时间执行特定命令
周期执行:crontab
首先查看是否开启此服务 service crond status
用法:crontab [-u 用户] [-l|-r|-e]
-u: 指定某个用户
-e:制定计划任务
-l:列出计划任务
-r:删除计划任务,该选项是删除所有的计划任务,如果想删除某一条 需要使用-e
*/1 * * * * echo hello >> /home/david/file.log
分 时 日 月 周 命令
可以使用(n-m)来表示一段范围,使用(n,m)表示某两个时间,使用(*)表示所有的时间,使用(/) 表示间隔时间。
10 21 * * * 每天的21点10分执行命令
0 5 * * 1 每周一的凌晨5点0分执行命令
30 4 15,16 * * 每个月15 和16号 凌晨4点半执行命令
*/5 4 * * * 每天4点 每隔5分钟执行一次
0 4 * * 1-5 每周一到周五的凌晨4点执行
0 0 1,15 * 1 每月1号和15号,每周1的0点0分都会执行 或的关系
15.条件判断
if [条件]
then
exec command1
elif
then
exec command3
else
exec command2
fi
df -h | grep \'root\' | awk \'{print $5}\' | cut -d "%" -f1
df -h 获取磁盘列表, 然后过滤出root这行,然后 获取第五列 最后过滤掉%号 然后判断这个数字
vim test.sh
#!/bin/bash
rate=$(df -h | grep \'root\' | awk \'{print $5}\' | cut -d "%" -f1)
if [ $rate -lt 80 ]
then
echo "磁盘使用良好小与80%"
else
echo "磁盘使用不好 都快满了"
fi
chmod 755 test.sh
bash test.sh
控制台输入, read -t 等待时间 10秒, -p 提示语 , 输入后 保存的变量名 age
#!/bin/bash
read -t 10 -p "please input your age:" age
if [ $age -gt 0 ] && [ $age -lt 100 ]
then
echo "您输入的年龄有效"
else
echo "您输入的年龄无效"
fi
[root@MiWiFi-R4-srv david]# vim file.sh
#!/bin/bash
read -t 10 -p "pleas input a file name:" file
if [ -z $file ]
then
echo "输入呀?"
elif [ ! -e $file ]
then
echo "没有找到这个文件"
elif [ -f $file ]
then
echo "这是一个普通文件"
elif [ -d $file ]
then
echo "这是一个目录"
fi
case用法
case 变量 in
value1)
exec comand1
;;
value2)
exec comand2
;;
*)
exec comand3
esac
#!/bin/bash
read -p "please input a number 1~9" number
case $number in
1)
echo "执行ls命令"
ls
;;
2)
echo "执行pwd命令"
pwd
;;
*)
echo "暂只支持1 和2"
esac
循环-for
for [变量] in [取值范围]
do
exec command
done
for val in $@
do
echo $val
done
for ((i=1;i<j;j++))
do
exec command
done
#!/bin/bash
sum=0
for((i=0;i<=100;i++))
do
sum=$[ $sum+$i ]
done
echo $sum
循环—while
while [条件]
do
exec command
done
以上是关于Linux基础的主要内容,如果未能解决你的问题,请参考以下文章