Linux
Linux的基础介绍
Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。
吉祥物:企鹅
主要发行版本:redhat ubuntu(乌班图),redhat又引申出两个,一个是redhat一个是centos的,而现在广泛被使用的就是centos的
Linux和Windows的比较
Linux | Windows | |
---|---|---|
收费 | 一般免费 | 收费 |
安全性 | 高 | 容易被攻击,经常打补丁 |
使用习惯 | 需要一定的学习成本 | 外行或者初学者最爱 |
可定制性 | 定制性十分的强 | 一般没有定制性可言 |
应用场景 | 服务器层面 | 桌面操作系统层面 |
目录结构
Linux的文件系统采用的是一个树状的目录结构,由/作为根目录,然后在此目录下创建新的目录,在我们的Linux中,任何事物都是由文件组成
目录的基本介绍
- /bin
是binary的缩写,一般是存放着一些常用的命令
- /sbin
s是super User的意思 这里指的是存放着系统管理员使用的系统管理程序
- /home
存放的是普通用户的主目录,但是一般我们放东西,都在home下放
- /root
一般是系统管理员目录
- /boot
存放着启动Linux的一些核心的文件(别改)
- /proc
虚拟映射(别动)
- /srv
服务启动需要提取的数据(别动)
- /sys
相关系统文件
- /tmp
临时文件
- /dev
设备管理器:将硬件映射成文件了,你看看里面有没有cpu和disk相关的目录
- /media
自动识别的设备,并把它挂载在这个目录下面,比如你查个u盘
- /mnt
让用户临时挂在别的文件系统的
- /opt
给主机安装额外软件的目录
- /usr/local
另一个给主机安排额外软件的目录
- /var
一般放日志文件的,就是一些有着自动增长的一些文件
- /selinux
安全子系统
命令
学Linux最重要的就是学相应的命令
文件目录类
pwd
显示当前目录的绝对路径
ls
显示当前所有的文件和目录
选项:
- -a 显示所有的文件和目录 包括隐藏的
- -l 以列表的方式显示信息 显示的信息更加的全面,尤其是你想看他的读写权限的时候
cd
切换到指定的目录
绝对路径方式 以/开头的 从根目录开始找。
相对路径方式 以../开头的 从当前工作目录开始找
cd ~或者cd空格 回到自己的家目录 你如果是root用户就是切到root
cd..就是切换到上一级目录
代码语言:javascript复制cd /home 绝对
cd ../xxxx 相对
mkdir
创建目录
代码语言:javascript复制mkdir xxxx 创建一级目录 比如说你在home下mkdir cc是行的,但是你mkdir cc/ccc/cccc 就不行了,因为里面包含着多个不存在的文件夹,他就创不了了。
mkdir -p xxxx 这个你mkdir cc/ccc/cccc 就能执行,因为他是多级目录的创建
rmdir
删除空目录 注意必须的是空的目录 如果不是空的就会失败
rm
删除一个文件或者目录。注意如果目录里面有东西 就要加参
- -r(recursive)
- 递归删除
- -f (force)
- 强制删除。忽略不存在的文件,不提示确认
rm -rf xxx 删除某个文件夹及以下的所有文件
rm -rf * 删除当前目录下所有文件(慎用)
rm -rf /* 恭喜,系统所有文件都被你删了(禁用)
touch
创建空的文件,包括后缀名。这个和我们widows有大的不同。windows一般是指定文件类型创建,但是linux是你创建文件,加后缀名
代码语言:javascript复制touch a.txt
cp
拷贝文件到指定的目录
- -r
- 递归复制
cp a.txt cc
cp -r cc dd
mv
移动或者重命名
代码语言:javascript复制mv a.txt d.txt 重命名
mv cc/a.txt dd 一定
cat
只读形式查看文件
- n 显示行号
cat a.txt
cat -n a.txt
cat -n a.txt |more 分页展示 窗口的大小进行分页显示
more
是一个基于vi编辑器文本的过滤器,以全屏方式按页显示文本内容
more 要查看的文件
代码语言:javascript复制more xxx
操作键 | 功能 |
---|---|
空格 | 向下翻一页 |
回车 | 向下走一行 |
q | 离开 |
ctrl f | 向下滚动一屏 |
ctrl b | 返回上一屏 |
= | 输出当前行号 |
less
类似于more,但是比more更加强大,不是一次将整个文件加载之后才显示,而是根据显示加载需要的内容,对于显示大型的文件有这较高的效率
代码语言:javascript复制less xxxx
操作键 | 功能 |
---|---|
空格 | 向下翻一页 |
pagedown | 向下走一行 |
pageup | 离开 |
/字串 | 向下找 |
?字串 | 向上找 |
q | 离 |
>
代码语言:javascript复制ls -l >a.txt //将显示的内容覆盖到a.txt 文件如果不存在就创建这个文件
>>
代码语言:javascript复制ls -l >>a.txt //追加到文件内容的末尾
echo
输出内容到控制台
代码语言:javascript复制echo $path 输出环境变量到控制台
head
用于显示文件开头部分 默认开头10行
代码语言:javascript复制head a.txt
head -n5 a.txt 开头5行
tail
输出文件尾部10行
代码语言:javascript复制tail a.txt
tail -n5 a.txt 结尾5行
tail -f a.txt 跟踪文档更新 ,一般用于查看运行日志
find
find指令将从指令目录向下遍历各个子目录,将满足条件的文件或者目录显示在终端
代码语言:javascript复制find /xx -xx xx
-name 是按照名字查找
-user 是按照用户名找
-size 是按照文件大小找
find /home -name a.txt 在home下按照名字叫a.txt的文件
功能类
history
查看执行过的命令
有序号的
执行第五行命令
!8回车
date
显示时间
cal
查看日历
grep指令 和管道符 |
grep是过滤 参数-n 是显示匹配行以及行号 -i是忽略大小写
|是将前一个命令的结果传给下一个命令处理
代码语言:javascript复制cat a.txt |grep -ni abc 在a.txt中过滤出abc 并显示行号 并且忽略大小写
gzip/gunzip
压缩与解压 针对于.gz文件
zip/unzip
压缩与解压 针对于.zip文件
代码语言:javascript复制zip -r 压缩目录
代码语言:javascript复制unzip -d /aaa bbb.zip 将bbb压缩文件压缩到aaa中
tar
打包文件,打包后文件类型.tar.gz
tar 【选项】 【打包后名字】【 打包内容】
代码语言:javascript复制tar -c 建立新的备份文件
tar -v 显示详细信息
tar -f 指定压缩后文件名
tar -z 打包后同时压缩
tar -x 解包.tar文件
一般用法
tar -zcvf a.tat.gz /home 打包
tar -zxvf a.tat.gz 解压
vim
编辑文件
按i进入编辑模式
esc离开编辑模式
:进入命令模式
:wq 保存并退出
:q! 不保存退出
:q 退出
shutdown
shutdown -h now 即刻关机
shutdown -h 1 1分钟后关机
shutdown -r now 立即重启
halt 关机
reboot 重启
sync 将内存数据同步磁盘
重启关机是应该先sync一下
用户权限类
应该少用root登录 先用普通用户登录在su root 切换身份,因为root可以做好多有关重要系统设置的事,所以一般别登
logout
注销用户
useradd
useradd 【xxx】 用户名 添加用户
代码语言:javascript复制useradd xxd 添加小兄弟用户 并且 home下会自动生成xxd目录
useradd -d /home/xxxd 添加小兄弟用户 并且 home下会有生成xxxd目录,xxd目录就不会生成了
useradd -g 用户组 用户名 增加用户是直接加上组
usermod -g 用户组 用户名
passwd
给用户设置密码
代码语言:javascript复制passwd xxd 回车后输入新的密码
userdel
代码语言:javascript复制userdel xxd 删除xxd
id
代码语言:javascript复制id root 查询root信息 uid是用户id号 gid 组id号 组 组名
su
切换用户 等级由高到底不用输密码,由低到高要输密码
代码语言:javascript复制su root
cat /etc/group
查看所有的组
groupadd
代码语言:javascript复制groupadd 组名 加组
groupdel 组名 删除组名
一般谁创建了文件,谁就是文件的所有者
ls -al 能查出谁是所有者
1、第一组为“拥有者的权限”,第二组为“同用户组的权限”,第三组为“其他非本用户组的权限”。 2、第二列表示连接占用的节点(i-node) 3、第三列表示这个文件或目录的“拥有者” 4、第四列表示拥有者的用户组 5、第五列为这个文件的大小 6、第六列为这个文件的创建日期或者是最近的修改日期 7、第七列为这个文件的文件名:如果文件名前面有.说明是隐藏文件。如果只输入ls 前面加.的文件不会显示出来。ls -al则会显示出全部文件。
修改所有者
chown 用户名 文件名
代码语言:javascript复制chowm xxd a.txt
权限介绍
代码语言:javascript复制-rw-r--r-- 1 root root 0 11月 25 11:23 a.txt
0(d,-,l,c,b)
"-"普通文件
“l”是链接文件,相当于windows的快捷方式;
“b”是块设备,硬盘就是一个例子;
“c”是字符设备文件,鼠标,键盘算是;
“d”是目录文件,相当于windows的文件夹。
1-3所有者的权限
4-6 所属组的权限
7-9其他人的权限
rwx-
r是读
w是些
x是执行
-是没有权限
变更权限
-=变更
u:所有者 g:所有组 o:其他人 a:所有人(o g u)
代码语言:javascript复制chmod u=rwx,g=rx,o=x 文件名 赋值权限
chmod o w 文件名 加权限
chomd a-x 文件名 减权限
数字变更
r=4 w=2 x=1
代码语言:javascript复制chomd 755 文件名
chomd 777 文件名
帮助指令
man
代码语言:javascript复制man ls
help
代码语言:javascript复制help cd
英文能力差别,建议直接百度
进程相关
ps
显示进程
代码语言:javascript复制ps -aux
-a 显示当前终端所有进程信息
-u 以用户的格式显示进程
-x 显示后台运行的参数
- USER: 行程拥有者
- PID: pid
- %CPU: 占用的 CPU 使用率
- %MEM: 占用的记忆体使用率
- VSZ: 占用的虚拟记忆体大小
- RSS: 占用的记忆体大小
- TTY: 终端的次要装置号码 (minor device number of tty)
- STAT: 该行程的状态:
- D: 无法中断的休眠状态 (通常 IO 的进程)
- R: 正在执行中
- S: 静止状态
- s会话的先导进程
- T: 暂停执行
- Z: 不存在但暂时无法消除
- W: 没有足够的记忆体分页可分配
- <: 高优先序的行程
- N: 低优先序的行程
- L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
- START: 行程开始时间
- TIME: 执行的时间
- COMMAND:所执行的指令
ps -ef 以全格式显示当前所有的进程
-e 显示所有的进程 -f全格式
ps -ef |grep xxx 查找具体进程
kill
代码语言:javascript复制kill -9 进程号 强制杀死某进程
killall 杀死所有进程 (别玩)
网络配置
ipconfig
查看网络详情
ping
代码语言:javascript复制ping http://www.baidu.com 测试网络是否能连上百度
其实还有一个指定固定ip,这个现在不要用,一般运维搞定的事,我们作为开发,一般不去动网络地址这种东西,会影响到其他的环境。会导致地址冲突,一般都是全局性的去设置
服务管理
服务本质上就是进程,但是一般是在后台运行的,所以又叫做守护进程,比如mysql sshd等
代码语言:javascript复制service 服务名 【start、stop、restart、reload、status】开启 停止 重启 重新加载 状态
centos7之后 用systemctl 不用service
1:查看防火状态
systemctl status firewalld
service iptables status
2:暂时关闭防火墙
systemctl stop firewalld
service iptables stop
3:永久关闭防火墙
systemctl disable firewalld
chkconfig iptables off
4:重启防火墙
systemctl restart firewalld.service
systemctl enable firewalld
service iptables restart
iptables起源于freeBSD的ipfirewall(内核1.x时代),所有规则都在内核中;2.0x后更名为ipchains,可以定义多条规则并串用;现在叫iptables,使用表组织规则链。iptablses按照用途和使用场合,将5条链各自切分到五张不同的表中。也就是说每张表中可以按需要单独为某些链配置规则。例如,mangle表和filter表中都能为INPUT链配置规则,当数据包流经INPUT位置(进入用户空间),这两个表中INPUT链的规则都会用来做过滤检查。
firewalld:Centos7中默认将防火墙从iptables升级为了firewalld。firewalld相对于iptables主要的优点有:firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。
setup回车查看所有服务 使用table键切换
npm与yum
npm手动安装要安装包的
yum自动安装有资源地址就行
具体软件安装一定看人家给的命令流程,不然会极容易出问题
端口相关
telnet
代码语言:javascript复制telnet ip port 查看端口的是不是通
查看端口
netstat
Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
代码语言:javascript复制-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令
netstat -pan | grep 8080 后面能看pid
然后 ps -aux | grep pid 就能看到进程程序名
你要觉得被占用了 你就 kill -9 pid