Linux是 基于Unix 的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境。 (程序基本上在Linux上发布)
Linux系统的应用非常广泛,不仅可以长时间的运行我们编写的程序代码,还可以安装在各种计算机硬件设备中,比如手机(苹果就是基于Linux, Android 最底层是Linux)、平板电脑、路由器等。
Linux基础
unix:
unix是一个 多用户,多任务 的操作系统 ,收费 的操作系统.(当时比Windows更小,更安全(win也收钱))
linux:
- Linux根据 市场需求(谁用) 不同,两个方向:
- 图形化界面版 :注重用户体验,类似window操作系统,但目前成熟度不够 ;
- 服务器版 :没有好看的界面,是以在控制台窗口中输入命令操作系统的,类似 于DOS,是我们架设服务器的最佳选择(性能高一点);
- Linux根据 原生程度 ,又分为两种:
- 内核版本 :是指在Linus领导下的内核小组开发维护的系统内核的版本号 ;(免费)
- 发行版本 :是一些组织和公司根据自己发行版的不同而自定的 (类似盗版,不一定免费);
(windows也有发行版了,但是不合法)
- Linux 发行版本 不同,又可以分为n多种:
其中:
- ubuntu:图形界面好一点(基本没用的);
- centos :开源的免费的os( 服务器版用的多, 开源 :安全,常用)
- redhat:
- 中标麒麟:
- 红旗Linux:收费(倒闭了)
安装Linux
安装虚拟机
- 虚拟机: 就是一台电脑
通过虚拟机软件可以在自己的电脑再安装几个电脑 - 常见的虚拟机软件:
VmWare
:(威睿公司)功能强大,收费产品virtualBox
: oracle公司( 免费的, 有的电脑不能用)
- Linux 系统的应用:
- 服务器系统:Web 应用服务器、数据库服务器、 接口服务器、 DNS 、 FTP 等等;
- 嵌入式系统:路由器、防火墙、手机、 PDA 、 IP 分享器、交换器、家电用品的微电脑控制器等等,
- 高性能运算、计算密集型应用:Linux 有强大的运算能力。
- 桌面应用系统
- 移动手持系统
linux的目录结构
- bin :存放二进制可执行文件(
mv
,cp
等命令文件); - sbin :存放二进制可执行文件,只有root才能访问;
- etc :存放系统配置文件 ;( 在etc下有profile文件时配置环境变量 )
- usr (可以放软件,一般放到local文件夹中) :用于存放共享的系统资源;( 存放共享的系统资源,一般都把软件/文件放到usr中 )
- home :存放用户的根目录:
- 每个用户的根目录的存放位置;,在home下创建每个用户的根目录;
- 例如:一个用户tom,在home就会存在tom目录;
- sbin:超级用户,管理员管理程序
- root :超级用户目录;(root的home)
- dev :用于存放设备文件;
- lib :存放跟文件系统中的程序运行所需要的动态连接共享库及内核模块(类似Windows的DLL文件,几乎所有的应用程序都需要用这些共享库);
- mnt :系统管理员安装临时问价系统的安装点;系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。
- boot :存放用于系统引导时使用的各种文件;
- tmp :用于存放各种临时文件;
- var :用于存放运行时需要改变数据的文件;
- opt: 一般放安装包
- lost+found:一般是空的,系统非法关机之后,存放文件
- boot:存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
- 存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件- -- proc:这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。
- srv:service缩写,该目录存放一些服务启动之后需要提取的数据。
- sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统
- media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
- selinux:SELinux是一种安全子系统,它能控制程序只能访问特定文件(类似360)。
linux的命令
基础命令
登录:
- 在
login
后输入root
,回车123456
(密码,不会显示)
登录成功
,这里的~就代表root
查看帮助:
man 命令
: 进入命令 比如man cd- 空格: 翻页
- 退出帮助目录 :
q
- 清空屏幕 :
Ctrl+l
或输入clear
目录操作命令
显示所在目录:
pwd
:显示所在文件层次
切换目录:cd
cd 目录
:进入文件夹cd 目录/目录
:进入 多层 文件夹cd /目录
:进入根目录下的目录中cd .. (或 cd ../)
:上一级目录(有空格)cd /
:根目录cd ./
:当前目录;cd ~
:回家(回到home中用户目录(root用户会进入root))
默认在root目录中,先 cd / 到根目录,再进其他目录cd -
:相当于返回键(返回上一个目录)
创建目录
mkdir
创建- mkdir 目录名 :创建一层
mkdir /test/ss 在根目录/test目录下创建ss目录(/test目录必须之前存在) mkdir -p a/b/c
:创建多层目录 a/b/c (用-p)
删除目录
rmdir
删除
- rmdir 目录名 :只能删除 一个空目录(只能删除一级 ,必须是空的)
- rm 目录 : 只能删除 一个空目录
- rm -r 目录 :删除目录(同时删除子文件,每删除一个文件都要询问)
- rm -rf 目录 : 删除目录(** 强制删除 **,不询问)
示例:删除/usr下的newTest,进入/usr下使用rm -r newTest
示例:删除/test下的newTest而不需要询问强制删除,在/test下使用rm -rf newTest
注意:rm不仅可以删除目录,也可以删除其他文件或压缩包
展示目录下文件列表 (以后使用 ll 即可)
ls
:展示的能看见的 文件(和目录)的名称ls -a
: 展示 所有 的文件的名称
文件前面有 "." 代表的是 隐藏 文件ls -l
: 显示文件的 详细信息
简写的方式 :**ll**
(效果与ls -l
一致)
- 开头类型:
-
代表文件,d
代表目录(文件夹) - 9位 :权限
- 4002等数字:文件大小
- 最后:文件名称
ll -h
: 友好的显示
大小显示为k;
浏览文件(查看具体内容)
cat
:显示文件的所有内容
cat 文件名
(按tab自动补全文件名)
缺点: 内容太长时,只显示最后的内容more
: 分页显示
空格 : 下一页
回车 :下一行
q
:退出查看
缺点: 翻页后不能看前方内容less
: 分页显示
可以通过PgUp PgDn 翻页查看
按q退出**tail**
查看一个文件的后面的内容tail -显示后面n行 文件名
tail -f 文件名
: 动态的查看
例如:
shell
tail -f catalina.xxx.log
- Ctrl+c: 退出查看;
查找目录
find 目录 参数
示例:查找/root下的与test相关的目录(文件)find /root -name '*test*'
*
代表模糊查找
修改目录的名称
mv 目录名称 新目录名称
:
示例:
shell
test目录下有一个oldTest目录,改名为newTest
mv oldTest newTest
注意:mv的语法不仅可以对目录进行重命名而且也可以对各种文件,压缩包等进行 重命名的操作
移动目录的位置---剪切
mv 目录名称 目录的新位置
示例:
shell
在test下将newTest目录剪切到 /usr下面,
mv newTest /usr
拷贝目录
cp -r 目录名称 目录拷贝的目标位置
-----r代表递归拷贝 (子文件同时拷贝)
示例:
shell
将/usr下的newTest拷贝到根目录下的test中,
cp -r /usr/newTest /test
注意:cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等, 拷贝文件和压缩包时不 用写-r递归
文件的操作
创建 一个文件
touch 文件名
:创建一个空白的文件
示例:
shell
在 test目录下创建一个空文件
touch aaa.txt
复制 文件
cp 源文件 目录/新文件名
例如:
shell
cp 1.txt 2.txt #在同一个文件夹下,复制,名字 2.txt
cp 1.txt 1/1.txt # 复制到下一级文件夹1中, 名字1 .txt
移动 文件(重命名)mv
- mv 文件 目录/新文件名
- mv 文件名 新文件名
删除 文件 rm
- rm 文件名 : 带询问删除 文件
- rm -f 文件名: 不带询问删除 ----直接删除;
- **rm -r 目录 **: 带询问的递归删除:删除 文件夹
- ** rm -rf 目录**: 不带询问的递归删除(谨慎使用)
- ** rm -rf** * : 删除所有目录;
- **rm -rf /_ _ : 自杀(不要用);
查看文件内容 :
-
cat 文件
: 只能显示 最后一屏 内容-
more 文件
: 可以显示 百分比 , 回车 可以向下一行,** 空格**可以向下一页,q可以退出查看
-
less 文件
: 查看/etc/sudo.conf文件,可以使用 键盘上的PgUp和PgDn向上和向下翻页 , q结束查看 -
tail -数字n 文件
: 查看文件后n行, Ctrl+C结束
shell
tail -10 sudo.conf # 查看/etc/sudo.conf文件的 后10行 ,
tail -f catalina-2016-11-11.log #监控文件的变化 动态变化
注意:命令 tail -f 文件 可以对某个文件进行动态监控,例如tomcat的日志文件, 会随着程序的运行,日志会变化
修改文件的内容vim,vi
vim 文件
示例:编辑/test下的aaa.txt文件,使用vim aaa.txt
点击键盘 i/a/o
(一般用i) 进入编辑模式,可以 编辑文件
i
:插入模式 :在后方插入- 退出编辑 模式:按下
Esc
,退回命令模式; - ** 保存** :
:wq
保存并退出; - 退出,不保存 :
:q!
打包/解压(文件/目录)tar
tar 参数 文件名(打包之后显示文件名) 要打包|解压的文件目录
常用的组合
- cvf
:打包一个文件或者目录(不压缩)- zcvf
: 打包并压缩一个文件或者目录 压缩的格式:gzip,或 .tar.gz- xvf
: 解压或者打开一个tar文件: tar -xvf xxx.tar.gz-c
:创建一个新tar文件-v
:显示运行过程的信息-f
:指定文件名-z
:调用gzip压缩命令进行压缩-t
:查看压缩文件的内容-x
:解开tar文件
例如:
- 打包:
shell
tar -cvf test1.tar ./* #将当前目录下的 所有文件 打包成 test 1.tar:
tar -zcvf test2.tar.gz ./* #将当前目录下的所有文件打包并压缩成test2.tar.gz:
- 解压:
shell
tar -xvf test1.tar # 将test1.tar解压到当前目录
tar -xvf test1.tar -C b # 将test1.tar解压到b目录
其他的常用命令
搜索: grep
:查找文件内部字符串;
查找符合条件的字符串(★),显示这一行内容,类似ctrl+f
grep 字符串 文件
:从文件中搜索字符串grep 字符串 文件 -- color
:从文件中搜索字符串,并高亮显示grep 字符串 文件 -- color --B2
: 高亮显示本行和上两行grep 字符串 文件 -- color --A2
:高亮显示本行和下两行
示例 :
shell
grep lang anaconda-ks.cfg 在文件中 查找 lang
grep lang anaconda-ks.cfg -- color 高亮 显示(两道-)
grep lang anaconda-ks.cfg --color -- A2 高亮 显示3行(本行和下两行)
grep lang anaconda-ks.cfg --color --B2 (三行,本行和前两行)
pwd
: 显示 当前的工作目录
wget
:下载 资料
wget 资源路径
&& 命令执行控制:
- 命令之间使用
&&
连接,实现逻辑与的功能。 - 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
- 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。
示例:
shell
mkdir test && cd test 创建目录test,进入目录test;
查看进程:ps -ef
ps -ef
: 查看 当前系统中运行的进程ps --ef | grep ssh
:查找某一进程
杀死进程 kill
kill
pid:杀掉某一进程kill -9 进程pid
:杀死进程,强制杀死进程
清屏 clean或 ctrl+l
网络管理
ifconfig
:查看所有的网络设置,查看IP地址;ifconfig 网卡名称 down
: 禁用网卡ifconfig 网卡名称 up
: 启用网卡
ping
:和window中一样,查看网络是够通畅;
会一直连接着,要 通过 ctrl+c 取消
netstat
查看网络 端口 。 netstat -annetstat -an | grep 3306
查询3306端口占用情况
网卡配置:
查看网卡配置:cat /etc/sysconfig/network-scripts/ifcfg-etho
若是网卡不能用,可以手动配置------将红色部分写入这个文件中
管道 |
作用是 将一个命令的输出用作另一个命令的输入;
运行命令1,结果用命令2使用;
例如:
ifconfig | grep 192.168
在ifconfig的结果里查找 192.168字符串
常用:
ps -ef | grep java
查找和java相关的 进程ps -ef | grep 3306
查找和3306相关的信息
其中:ps -ef 查找现在进程
系统管理命令
命令 | 描述 |
---|---|
date | 显示当前系统时间 |
date -s "2014-01-01 10:10:10" | 设置系统时间 |
命令 | 描述 |
---|---|
df | 显示 磁盘 信息 |
df --h | 友好显示大小 |
命令 | 描述 |
---|---|
free | 显示 内存 状态 |
free --m | 以mb单位显示内存 |
命令 | 描述 |
---|---|
top | 显示管理执行中的程序,类似任务管理器;动态改变; |
命令 | 描述 |
---|---|
du | 显示目录或文件的大小 |
du --h | 显示当前目录的大小 |
命令 | 描述 |
---|---|
who | 显示目前登入系统的用户信息 |
命令 | 描述 |
---|---|
hostname | 查看当前主机名 (我定义的jsy) |
修改主机名 | (1)vi /etc/sysconfig/network |
(2)修改其中的HOSTNAME就行;(需要重启起作用) |
命令 | 描述 |
---|---|
uname | 显示系统信息。(显示 Linux ) |
uname -a | 显示本机详细信息。 依次为:内核名称(类别),主机名,内核版本号,内核版本,内核编译日期,硬件名,处理器类型,硬件平台类型,操作系统名称 |
vi和vim编辑器
- 编辑普通文件
- 在Linux下一般使用vi编辑器来编辑文件。 vi既可以查看文件也可以编辑文件。
- vim是vi的升级版,** 关键字高亮** ;
vi概述:
- 三种模式 :命令行、插入、底行模式。
- 进入文件 :
vi 文件名
; - 模式切换:
- 切换到 命令行 模式:按
Esc
键; - 切换到 插入(b编辑) 模式:按
i 、o、a
键;i
:在当前位置前插入I
:在当前 行 首插入a
:在当前位置后插入A
:在当前 行 尾插入o
:在当前 行 之后插入一行O
:在当前 行 之前插入一行
- 切换到 底行 模式:按
:(冒号)
;
- 退出:
- 退出 :
esc
→:q
; - 保存并退出 :
esc
→:wq
; - 不保存退出 :
esc
→:q!
- 删除 :
dd
-- 快速删除一行; - 替换 :
R
-- 替换;
重定向输出>
和>>
重定向: 改变输出方式;把本来显示到控制台的内容,写入到文档中,查看文档可见;
>
重定向输出, 覆盖 原有内容;>>
重定向输出, **追加 **功能;
示例:
shell
cat /etc/passwd > a.txt 将输出定向到a.txt中
cat /etc/passwd >> a.txt 输出并且追加
ifconfig > ifconfig.txt ifconfig 查询的内容保存到 ifconfig.txt中,覆盖原有内容,用 cat ifconfig.txt 可以看到内容;
若是需要管理权限的输出
shell
sudo sh -c 'echo "hello world" > /opt/1.log'
Linux的用户和组
用户管理:
添加
- 用户:
useradd 用户名
:默认会在 home 目录下给一个用户创建一个目录useradd 用户名 -d /home/目录
: 创建一个用户然后在指定该用户的 家 目录(要在home下)
- 密码:
passwd 用户名
: 回车输入密码(要确认密码)
删除
userdel 用户名
:只是删除用户 但是不删除家home目录userdel -r 用户名
:删除用户连带家目录一起删除
切换用户:
- 方法1:
ssh -l 用户名 -p 22 主机(IP)
例如: ssh -l tom -p 22 192.168.17.131 再也yes,输入密码;
- 方法2:
su - 用户名(不需要输密码)
- 退出 ,返回到root用户:
exit
组管理
当在创建一个新用户user时,若没有指定他所属于的组,就建立一个和该用户同名的私有组;
添加,创建组
groupadd 组名
useradd 用户名 -g 组名
:创建用户指定组
删除
groupdel 组名
:若组下有用户,删除不了
id
:查询当前用户的组信息;
查看一个用户的UID和GID
- id
- id 用户名
- id [选项]... [用户名]
su 切换用户
用法:su [选项]... [-] [用户 [参数]... ]
示例:
su - u1
切换到u1用户,并且将环境也切换到u1用户的环境(推荐使用)
su
切换到root用户
文件
账户文件
- /etc/passwd 用户文件
- /etc/shadow 密码文件
- /etc/group 组信息文件
用户文件
root:x:0:0:root:/root:/bin/bash
- 账号名称: 在系统中是唯一的
- 用户密码: 此字段存放加密口令
- 用户标识码(User ID): 系统内部用它来标示用户
- 组标识码(Group ID): 系统内部用它来标识用户属性
- 用户相关信息: 例如用户全名等
- 用户目录: 用户登录系统后所进入的目录
- 用户环境: 用户工作的环境
密码文件
shadow文件中每条记录用冒号间隔的9个字段组成.
- 用户名:用户登录到系统时使用的名字,而且是惟一的
- 口令: 存放加密的口令
- 最后一次修改时间: 标识从某一时刻起到用户最后一次修改时间
- 最大时间间隔: 口令保持有效的最大天数,即多少天后必须修改口令
- 最小时间间隔: 再次修改口令之间的最小天数
- 警告时间:从系统开始警告到口令正式失效的天数
- 不活动时间: 口令过期少天后,该账号被禁用
- 失效时间:指示口令失效的绝对天数(从1970年1月1日开始计算)
- 标志:未使用
组 文件
root:x:0:
- 组名:用户所属组
- 组口令:一般不用
- GID:组ID
- 用户列表:属于该组的所有用户
Linux的权限命令
权限是 Linux中的重要概念,每个文件/目录等都具有权限,通过ls -l
命令我们可以 查看某个目录下的文件或目录的权限
示例:在随意某个目录下
ls -l
或ll
第一列的内容的信息解释如下: 文件的权限:
Linux三种文件类型
d
:代表目录-
:代表文件l
:代表链接(可以认为是window中的快捷方式)
后面的9位分为3组,每3位置一组,分别代表属主的权限,与当前用户同组的用户的权限,其他用户的权限
r
: 代表权限是可读,r也可以用数字4表示w
: 代表权限是可写,w也可以用数字2表示x
: 代表权限是可执行,x也可以用数字1表示
| 主user | 主user | 主user | group | group | group | 其他用户 | 其他用户 | 其他用户 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| r | w | x | r | w | x | r | w | x |
| 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
文件类型标识
通过ll
展示
- 普通文件(
-
) - 目录(
d
) - 符号链接(
l
) *
进入etc可以查看,相当于快捷方式- 字符设备文件(c)
- 块设备文件(s)
- 套接字(s)
- 命名管道(p)
文件权限管理, 修改权限
chmod 变更文件或目录的权限。(2种方法)
- chmod 755 a.txt
- chmod u=rwx,g=rx,o=rx a.txt
注意:
chmod 000 a.txt
(虽然没有任何权限,但是root依然能读写执行)
chmod 777 a.txt
所有权限
powershell
chmod -R 755 * ## 为这个文件夹中的所有文件和子文件设置权限
chown 变更文件或目录改文件所属用户和组
A用户创建的文件,其他用户无法修改权限,通过这个修改文件所属用户和组来使其他用户可以修改(要在创建文件的用户或root用户中修改);
- chown 用户:组 文件(变更一个文件) 变更当前的目录或文件的所属用户和组
将root用户创建的文件的用户、组改为Jerry,Jerry用户就可以修改权限了;
shell
chown jsy:jsy 3.txt
## 查看权限 : -rw-r--r--. 1 jsy jsy 时间 3.txt
- chown -R 用户:组名 目录名 :变更目录及其中的 所有的 子目录及文件的所属用户和组