初探Linux
这是一个小小新手根据自己对Linux的理解而写下的笔记,记录的是大体的学习内容。记录的笔记不全面,甚至没有整体的概念,但也希望能够给部分人一些入门的帮助,实机基于CentOS 7。
导语:学习一件新事物先从大体把握,了解其组成部分然后再分模块去学习,笔者是依据这样写下笔记的
1. 系统的组成
Linux的组成可大致分为:内核、shell、文件系统、应用程序
内核(Kernal):Linux最主要的部分,操作整个计算机的资源,提供内存管理,进程管理,驱动管理等基本功能
Shell:提供用户与内核进行交互的接口,Shell是一个解析器负责解析命令,将用户传过来的命令解析过后通知内核执行相应的服务、Shell也可以解析Shell脚本,即Shell脚本可以像用户传命令过来一样有被执行的能力
文件系统:提供文件存储、管理等功能。Linux抽象出虚拟文件系统以便适应不同类型的文件系统
应用程序:计算器,编辑器,GIMP等

2.文件系统
从一切皆对象的Java变成一切皆文件的Linux了,因为Linux的系统资源都是以文件形式存在。首先来了解文件系统,其实就是认识各种目录结构及其作用,这里的内容有个印象即可,真要用到回来再看看
2.1 文件系统结构
- / :根目录
- /bin:二进制可执行文件,即常用的命令(cd、ls、mkdir)
- /sbin:二进制可执行文件,root专属命令
- /boot:系统引导文件
- /dev:设备文件
- /etc:系统配置文件
- /home:各用户的目录
- /root:管理专属目录,不放在home下
- /var:运行时需要改变数据的文件
- /lib :库
- /usr :系统应用程序
- /tmp:各种临时文件
- /opt:第三方应用程序
- /proc:系统内存映射,虚拟文件系统
- /mnt:临时文件系统挂载点
- /media:移动设备挂载点
2.2 文件类型、权限、组
# 文件类型
–:普通文件
d:目录文件
b:块文件
c:字符文件
l:符号链接文件
p:管道文件pipe
s:套字节文件socket
# 权限
r:可读,表示文件可读,目录可看列表
w:可改,表示文件可改,目录可在内部新建和删除文件
x:可运行,表示文件可运行,目录可进入
可用数字表示:4=r,2=w,1=x
467分别表示:可读,可读可写,可读可写可运行
输入命令cd /,ls -l显示根目录文件,首字母就表示文件类型,剩余表示权限,之后的数字表示连接数,跟着两个是所有者和所属组

2.3 关于文件目录的命令
cd:进入目录
ls:列出目录
mkdir:创建目录
touch:创建文件
mv:移动文件
rm:删除
cp:复制
2.4 文件打包与压缩
归档:也称打包,将多个文件或目录一起建立归档,一般是形成 .tar 文件
压缩:利用算法对文件进行处理,达到压缩大小的目的
注意:是不能直接压缩目录的,将多个文件或目录打包成一个 .tar 文件然后才能进行压缩,所以打包和压缩一般是同时进行的。压缩格式有:bz2,xz,zip,gz(最常见)
tar -zcvf:选项从左到右表示gzip压缩,打包文件,显示过程,指定文件名
tar -zxvf:其中z表示解压缩(同一选项不同功能),x表示解包
tar -zcvf file.tar.gz file:表示将file打包与压缩并命名为file.tar.gz,其后缀是为了方便辨认
2.5 文本编辑器Vim

在一切皆文件下,学会使用文本编辑器很关键,这里介绍Vim
在没有学Vim之前,笔者进入文本编辑器看着命令行不知所措,乱按一通没有效果,只好关机重启,居然被小小的文本编辑器打败了,不好意思说是计算机专业的,这和windows的记事本完全不一样。在进入Vim之前,请先看清楚使用方法,不然进去就和笔者一样要重启解决
一、Vim的三种模式:
Normal:默认进入时的模式,输入会被当成命令
i:进入Insert模式
gg:跳转文头
G:跳转文末
/:查找
n:下一个
y:复制
p:粘贴
x:删除
u:撤回
Insert:输入的内容会插入到文件中(按 i 进入)
ESC键:退出Insert,进入Normal模式
Command :在Normal下输入:会进入,在最后一行会有提示
:q 不保存退出
:q! 不保存强制退出
:w 保存但不退出
:w! 强制保存
:wq! 强制保存退出
:w [文件名] 另存为
二、Vim的进入:
vim 文件名:直接进入
3. 应用系统
3.1 应用程序安装
Linux应用程序的安装可分为源码安装和二进制安装
源码安装:是编写出的源代码,需计算机编译成二进制文件后才可进行安装,其编译时间较长,安装步骤繁杂,若安装过程中报错,新手是很难解决的,但也有优势:可自由选择需要的功能甚至可以改写源代码,因为是编译安装所以更适合自己的系统,效率和稳定性也有提升(笔者还未接触到,不做说明)
二进制安装(举例rpm包管理器):是源码经过编译后的安装包,安装速度较快,不需要编译所以出错概率很小
rpm安装是用默认安装路径的,不建议修改
i:安装
v:详情
h:进度
rpm -ivh 包全名:表示安装某一程序,注意要出现两次100%才是安装完成,第一次表示完成安装的准备
rpm安装也有其缺点,因为程序间依赖关系复杂,若rpm安装过程中缺失依赖会报错,而且卸载时要从后安装的依赖开始卸载
a:查询所有套件
q:查询是否安装某软件
|:管道符,将前面命令的输出交给后面的命令
grep:搜索
# 查询某程序是否安装
rpm -qa | grep 程序包名
查询 yum程序 是否安装

这些程序安装都过于繁杂,有没有适合新手的? 当然有那就是yum了,yum是基于rpm的,所以也是二进制安装,安装速度较快,重要的是自动解决依赖问题,不需要手动下载
yum安装
y:安装过程中的选项都选择yes
install:安装rpm软件包
search:查看特定安装包
update:更新rpm软件包
check-update:检查是否有可用的更新rpm软件包
remove:删除指定的rpm软件包
这里举例 gcc程序 的安装,gcc是C语言编译器,这学期上Linux程序设计需要用到
yum -y install gcc

从安装过程可以看到,yum会自动解决依赖关系,一键安装的感觉
3.2 程序的打开
常规的程序在命令行输入程序名即可打开,其安装在 $PATH下,即 /bin,/usr/bin,/usr/local/bin中,系统会去 $PATH 下查找,类似于windows下的环境变量
其他程序则要主动去到程序的安装目录下输入启动文件来打开,假如要打开lampp
/opt/lampp/./lampp start
其中./表示当前目录,不然系统会去环境变量找
或者将这个程序的安装目录加入到 $PATH中,这样就可以在命令行直接输入来启动程序了(类似windows下添加jdk环境变量)
export PATH = $PATH:/opt/lampp
4. Shell
4.1 Shell编程
Shell编程是对Linux命令的逻辑化处理,笔者笔记的自动上传也是用了Shell编程,不要觉得很深奥,其实有了编程语言的基础,几分钟就可以入门。笔者挑出部分基础说明,达到让大家认识Shell编程的目的即可
简单入门
touch helloWorld.sh (新建一个helloWorld.sh文件,`后缀`只是为了方便辨认,没有实质作用)
vim helloworld.sh (文件中加入 echo "helloworld" ,echo表示输出,保存并退出vim)
chmod +x helloworld.sh (增加可运行的权限)
./helloworld.sh (运行Shell脚本)

是不是很简单?
4.2 与Java的差异
| 布尔运算 | 解释 |
|---|---|
| ! | 非 |
| -o | 或 |
| -a | 与 |
| 关系运算符 | 解释 |
|---|---|
| -eq | 数字是否相等 |
| -gt | 大于 |
| -lt | 小于 |
| 字符串运算符 | 解释 |
|---|---|
| -z | 长度是否为0,为0返回true |
| str | 是否为空 |
if:(简单事例)
a=1;
b=1;
if [ $a -eq $b ]
then
echo "equal"
elif [ $a -gt $b ]
then
echo "大于"
else
echo "小于"
fi
for:(简单事例)
#!/bin/bash
for value in 1 3 5 7 9
do
echo $value
done
exit 0
5. 内核
内核提供进程管理,网络管理等功能,所以笔者将这些内容归到内核模块下
5.1 进程--ps
e:显示所有程序
f:显示UID,PPIP,C与STIME栏位

UID:用户ID
PID:进程ID
PPID:父进程ID
C:优先级
STIME:进程启动的时间
TTY:使用终端
TIME:CPU时间
CMD:显示完整的启动进程所用的命令和参数
5.2 进程--kill
关闭进程,那么首先需要知道进程ID。假如关闭运行的vim
ps -ef | grep vim
kill [进程号]

左边为开着的vim进程
5.3 进程--前后台
jobs:查看后台运行的进程
fg:将后台进程转至前台
bg:将前台进程转至后台
在命令行最后加入 &:也是将前台进程转至后台
这里将下载redis的任务加入后台(快捷键 Ctrl + z),用jobs查看后台进程,再用fg将其调至前台

5.4 网络--端口
netstat
n:不DNS轮询,显示IP
t:显示TCP端口
u:显示UDP端口
l:仅显示套接字
p:显示进程标识符和程序名称
# 查看80端口
netstat -ntp | grep 80
防火墙端口 firewall-cmd
--query-port=<端口号>/<protocol>:查询指定端口
--add-port=<端口号>/<protocol>:开放端口
--remove-port=<端口号>/<protocol>:关闭端口
--zone=public:作用域
--permanent:永久生效
--reload:重启防火墙
# 查询是否开启
firewall-cmd --zone=public --query-port=80/tcp
# 开启防火墙端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 重载防火墙
firewall-cmd --reload

这是笔者目前所浅显理解的Linux,Linux很优秀,需要在不断地使用中去挖掘
参考:
CentOS 7
菜鸟教程
《鸟哥的私房菜》
初探Linux的更多相关文章
- 初探Linux内核中的内存管理
Linux内核设计与实现之内存管理的读书笔记 初探Linux内核管理 内核本身不像用户空间那样奢侈的使用内存; 内核不支持简单快捷的内存分配机制, 用户空间支持? 这种简单快捷的内存分配机制是什么呢? ...
- [Fw]初探linux中断系统(2)
初探linux中断系统(2) 中断系统初始化的过程 用来初始化中断系统的函数位于arch/x86/kernel/irqinit.c,定义如下 void __init init_IRQ(void){ i ...
- 初探linux子系统集之写在前言
毕业两周年,进入嵌入式linux这个行业也已两个年头有余,从开始的linux驱动,android的framework,到现在的linux应用,android的app以及产品的零零总总,其实很想把这些都 ...
- 初探linux内核编程,参数传递以及模块间函数调用
一.前言 我们一起从3个小例子来体验一下linux内核编程.如下: 1.内核编程之hello world 2.模块参数传递 3.模块间 ...
- 初探Linux进程管理机制
转至:http://ixdba.blog.51cto.com/2895551/543737 一 .进程的概念和分类1.进程的概念 Linux是一个多用户多任务的操作系统.多用户是指多个用户可以在同一时 ...
- 初探linux子系统集之timer子系统(三)
因为现在的linux虽然还是可以使用低精度的timer,但是趋势是高精度hrtimer,所以上一篇试着翻译一下hrtimer的一些介绍,翻译的不是很好,看来英语还得好好学习啊,下面还是好好学习下lin ...
- 初探linux子系统集之timer子系统(一)
一般来说要让整个linux系统跑起来,那么一个必须的就是linux的时钟,也就是时间子系统了,这里正好工作需要,那么就研究下linux下的时间子系统了. linux内核必须完成两种主要的定时测量.一个 ...
- 初探linux子系统集之timer子系统(二)
想着博客中还没有翻译过一篇文章,虽然英文水平有限,但是借助google翻译慢慢地翻译出一篇文章也是不错的选择.那就来学习下hrtimer的文档吧,翻译的略搓,可以直接跳过这篇,这里仅作为学习的过程!^ ...
- 初探linux子系统集之i2c子系统(一)
I2c子系统在进公司来的时候就学习过了,可是那是还不是很熟悉linux中的i2c子系统,就没有细看.记得当初很想熟悉linux中的各种总线驱动,想专门写一个关于总线驱动的专集,后来发现好像就没有几个, ...
- 初探linux子系统集之led子系统(二)
巴西世界杯,德国7比1东道主,那个惨不忍睹啊,早上起来看新闻,第一眼看到7:1还以为点球也能踢成这样,后来想想,点球对多嘛6比1啊,接着就是各种新闻铺天盖地的来了.其实失败并没有什么,人生若是能够成功 ...
随机推荐
- java 变量分类
转:https://blog.csdn.net/suneqing/article/details/37909811 1.按被声明的位置划分 局部变量:方法和语句块内定义的的变量.(在定义局部变量时,必 ...
- LeetCode No.82,83,84
No.82 DeleteDuplicates 删除排序链表中的重复元素 II 题目 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 输入: 1->2 ...
- Java虚拟机内存划分
Java虚拟机在执行Java程序时,会把它管理的内存划分为若干个不同的数据区.这些区域有不同的特性,起不同的作用.它们有各自的创建时间,销毁时间.有的区域随着进程的启动而创建,随着进程结束而销毁,有的 ...
- SQLserver安装了多个实例,实例端口号也被修改后的代码连接方式
事例说明 IP地址为192.168.1.100的服务器上安装了SQLServer2000,它有两个实例,分别为:默认实例——JLW和另外新建的实例——JLW\TEST SQLServer网络实用工具中 ...
- IoC容器设计
本文主要摘录于 Spring技术内幕-深入即系Spring架构和设计原理(许文柯著). IoC是根据两个核心BeanFactory和ApplicationContext来设计的,这里先放一张Spri ...
- cs231n spring 2017 lecture12 Visualizing and Understanding
这一节课很零碎. 1. 神经网络到底在干嘛? 浅层的是具体的特征(比如边.角.色块等),高层的更抽象,最后的全连接层是把图片编码成一维向量然后和每一类标签作比较.如果直接把图片和标签做像素级的最近领域 ...
- LNOI 2019 旁观记
真.懵逼. 退役选手进队了......我忽然后悔自己没去摸鱼...... 但是想一想毕竟有三分之一限制,我也搞不过那帮大佬...... 毕竟zhx还提前一周复习了一下呢 挂一个zhx大佬的博客 传送门 ...
- Shell 快速入门(十八):特殊符号的使用
在 Shell 语言中,经常会看到中括号和括号组成的特殊标识,例如:[].[[]].(()).$(()).().这些符号经常使我们非常迷惑,弄清楚它们之间的作用和区别非常必要. 在开始之前,我们先来学 ...
- Django 学习笔记1-- URLconf
今天好像巴黎有点乱,希望明天太阳还会照常升起. 简介 Django 是一个由 Python 编写.开源并采用经典的 MVC 设计模式的 Web Full Stack 应用框架. 在 Django 中, ...
- Center Loss - A Discriminative Feature Learning Approach for Deep Face Recognition
URL:http://ydwen.github.io/papers/WenECCV16.pdf这篇论文主要的贡献就是提出了Center Loss的损失函数,利用Softmax Loss和Center ...