一、linux历史了解(安卓是在Linux系统上运行的系统,苹果是直接在Linux上运行)

二、linux系统结构(gcc -v查看Linux版本)

  1. Linux的用户空间和内核空间互不进入。

用户空间 应用程序:shell(系统命令) shell脚本 工具软件

内核空间 操作系统内核:

(1)系统调用 是系统提供给用户程序的接口

(2)文件系统IO内存管理,进程管理,中断异常处理,设备驱动等

2.Linux的文件系统:

文件系统:专用于管理,存储文件的一个程序,是系统内核的一个组件。

文件本身的存储需要有存储介质: 机械硬盘,磁道,扇区

固态硬盘:使用浮栅晶体管来存储数据,稳定性好,PCIE接口,

光盘,hd代表IDE硬盘,sd代表SATA硬盘/dev/sda表示第一个硬盘/dev/sdb表示第二个硬盘,

读写接口:SATA PCIE M.2

3.文件系统种类:df -h(查看文件系统)

本地文件系统:存储介质就在本机磁盘上

网络文件系统:存储介质在网络上 网吧

虚拟文件系统:存储介质不存在或者在内存上(tmp是临时文件系统,一旦掉电文件就会不存在)

4.文件系统格式:

NTFS:windows 主流

exFAT FAT16 FAT32 兼容文件系统格式

ext4,ext3,ext2 linux主流

5.

文件系统最小读写单元: 4K

文件占用磁盘的大小 du -h 文件名

查看linux的文件系统结构 sudo fdisk -l

sudo: 表示后面的指令使用管理员权限执行(一段时间内只需要输入一次密码)

三、linux系统的目录结构

1.命令

/ 根目录 类似于Windows中C盘

/bin 系统的可执行文件 命令或可执行程序

/dev 系统设备文件(在Linux系统中认为一切皆文件)

(*)/etc 系统配置文件或服务的目录

/home 用户的家目录

/ lib 系统库文件目录

(#)/media Ubuntu图形界面自动挂载临时文件

/mnt 系统挂载点目录

/opt 系统应用程序安装包存放位置 类似于Windows中program files(x86)

/proc 一个虚拟的文件系统路径,用于查看系统中的程序运行状态等信息(只读)

2.Linux文件命名严格区分大小写,windows文件命名不需要区分大小写

例如if.txt和IF.txt

linux 是两个文件,Windows会认为是同一个文件。

3.Linux路径分隔符/ windows \

四、shell命令的一般格式

命令 [-选项] [参数](若要在一行输入多个命令可以用" ; "换行输入" \")

table 补全命令 双击table 弹出可能的备选项

alias 取别名 eg:(alias ls='ls --color=auto')unalias 删除别名(unalias命令别名)

CTRL + r 寻找历史命令

shell中的符号:

(1)通配符:使用一些特殊符号 代指某些情况或字符

* 代指匹配 任意长度 任意字符

? 匹配任意1个字符长度的字符

[] 选择匹配1个长度的字符

[-] 选择匹配一定范围的1个长度字符

[^] 选择匹配不是该范围的1个字符长度

(2) | 管道符: 连接两个命令,将前一个命令的输出作为下一个命令的输入

wc 统计命令 用于统计字符或字符串

wc -w 统计输入字符串中单词的个数(使用''分割)

wc -l 统计输入字符串中'\n'的个数即行数

grep 命令:用于查找输入的字符串(grep " ")

eg: cat 文件 | grep "main"

^在grep中代表开头(grep "^ ")

$在grep中代表末尾 (grep " $")

grep "目标字符串" 文件名 -n

打印目标文件中的目标字符串并显示行号

在指定目录以及目录内,查找文件名

名字可以使用shell通配符

find -name

find ./ -name "[0-9]*.c"

(3)转义符 \(反斜杠) 将原本有特殊意义的转义为正常字符也可以将原本正常字符转义为特殊功能字符

'\r' '\n' '\0' \\代指'\' (并不是什么都可以转义)

(4)目录符 /(斜杠)目录分隔符 该符号不能转义

(5)输入输出重定向符

输出重定向

> 覆盖模式

>> 追加模式

输入重定向

<

使用场景:程序的错误输出保存到文件

2> 错误输出重定向 stderr中输出

> 所有输出重定向

1> 正确输出重定向 printf(); stdout

echo "字符串" 在中断输出字符串

eg: echo "hello world"-->hello world

输入重定向

从文件中读取内容作为命令的输入

(6)`shell命令`(table键的上面那个键) 命令置换

将``中的命令的输出作为其它命令的参数,主要用于shell脚本编程中

(7)更多的命令

mkdir -p 递归创建目录 ./a/b/c

chmod: 改变文件或目录的访问权限

chmod 0600 a.txt 0600是一个3位的8进制数,表示每组的权限rwx

chown: 改变文件或目录的属主

sudo chown root a.txt

chgrp: 改变文件或目录所属的组

sudo chgrp root a.txt

cat: 显示文本文件

less/more: 分屏显示文件

ln: 创建文件链接 绝对路径与相对路径的异同

ln -s 源文件 目标文件 软连接

ln 硬链接

head: 显示文件开头(默认打印前10行)head -20 文件名(打印前20行)

tail: 显示文件末尾(与上同)

diff: 比较两个文件(>表示左边文件多了..<表示右边文件多了..)

file: 查看文件类型(Linux系统识别文件类型是靠文件内容,但gcc要加.c)

date: 显示时间和日期

gzip: 压缩文件(只能压缩一个文件,变小)

tar: 归档压缩(可以压缩多个文件,变小)

示例: tar -cvzf test.tar.gz ./*

创建压缩文件 -cvzf 压缩包名 要压缩的文件或目录

解压缩 tar -xvf test.tar.gz

echo: 显示文本

用户相关的命令:

adduser 新用户名 添加用户

deluser 用户名 删除用户

su 用户名 切换用户

修改用户属性(本质是修改/etc/passwd文件)

usermod -d 修改用户家目录的位置(前提新家目录存在) 用户名 -m

示例: sudo usermod -d abc stu -m

sudo vipw -p 修改passwad密码文件配置

进程相关命令:

ps -aux 查询当前系统中有哪些进程在运行

top 动态显示运行进程

kill 发送信号给进程

发送杀死信号某个进程(-9)

kill -9 PID

{

ctrl + z 将正在运行的前台进程放到后台

[1]+ 已停止 ./a.out

bg 1 让后台暂停的任务继续运行

fg 任务号 将后台任务切换到前台

}

进程优先级设置命令

renice 优先级 PID +优先级降低,-优先级升高

软件包管理器:

Linux软件包格式:

sogoupinyin_4.0.1.2800_x86_64.deb

包名 主版本号 次版本号 cpu架构

软件包管理器:

dpkg 本地软件包管理器

apt 联网软件包管理器

查看本机安装的软件包

dpkg -l

dpkg -l | grep "sogou"

卸载本地软件包

dpkg -r 包名

卸载软件包 及其配置文件

dpkg -p 包名

安装本地软件包

dpkg -i 软件包.deb

dpkg 相关命令

dpkg -i <package> 安装一个在本地文件系统上存在的Debian软件包

dpkg -r <package> 移除一个已经安装的软件包

dpkg -p <package>移除已安装软件包及配置文件

dpkg -l <package>列出安装的软件包清单

dpkg -s <package>显出软件包的安装状态

dpkg -reconfigure <package> 重新配置一个已经安装的软件包

联网软件包管理

apt-get install 包名

apt软件源列表

服务器地址列表文件 /etc/apt/source.list

apt与dpkg区别:

dpkg主要在离线模式安装,但不能自动处理依赖

apt在线安装,可以自动处理依赖问题

网络相关命令:

网络相关常识:

基于IP地址的网络模式

IP地址:本质是一个数

IPV4 :32bit的数 0- 2^32-1

IPV6 : 128bit的数

IP书写格式:点分法 4段式 8bit.8bit.8bit.8bit

域名:给知名的IP命名 (域名服务器)

IP的分类:

A 第一个字节固定,后面的网络地址可变

B 前两个字节固定,后面的网络地址可变

C 例如:192.168.....

路由器:

交换机:可以将很多根网络线互相连通

查看本机IP

ifconfig

网络联通性测试命令:

ping IP

hostname

nslookup 查询DNS域名对应的IP

验证网络的DNS配置是否可用

网络的配置:

{

[(/etc/network/interfaces)网卡配置]

DHCP:自动分配IP 路由器一般DHCP服务

静态IP:电脑直接定义一个IP使用 可能与当前网络中的其它主机的IP冲突

若要设置静态IP:192.168.3.200 - 192.168.3.254

方法1:通过图形界面配置

方法2:通过修改配置文件

sudo vim /etc/network/interfaces

停止图形界面的网络托管服务

sudo /etc/init.d/network-manager stop

重启网卡

sudo /etc/init.d/networking restart

TFTP服务器:类似于网盘

客户端与服务器模式(cs)一个用于上传与下载文件的服务器

TFTP客户端与服务器安装:(连接,上传,下载)

(1)安装

sudo apt-get install tftp

sudo apt-get install tftpd-hpa

查看安装是否成功

dpkg -l |grep "tftp"

(2)配置

配置工作目录前先在家目录 创建一个tftp服务器的工作目录

mkdir /home/xwq/tftpboot

将该工作目录权限修改为 777

sudo chmod 777 /home/xwq/tftpboot

sudo vim /etc/default/tptfd-hpa

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/var/lib/tftpboot"

TFTP_ADDRESS=":69"

TFTP_OPTIONS="--secure"

修改为

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/home/xwq/tftpboot" //修改工作目录

TFTP_ADDRESS=":69"

TFTP_OPTIONS="--secure -c" // 允许服务器创建文件 即客户端可以上传文件到服务器(3)重启tftp服务

sudo /etc/init.d/tftpd-hpa restart

[ ok ] Restarting tftpd-hpa (via systemctl): tftpd-hpa.service.

(4)在本地验证服务器能否使用

客户端链接服务器:

tftp 192.168.3.119

tftp>

上传文件到服务器

tftp> put 本地的文件名

示例:

tftp> put q.txt

Sent 304315 bytes in 0.1 second

退出客户端

tftp> quit

客户端下载文件:

tftp> get q.txt

Received 304315 byts in 0.01

nfs服务器: 文件共享的服务器 可以将目录共享与其他电脑使用

(1)安装nfs服务器 (可以查看目录等)

sudo apt-get install nfs-kernel-server

客户端安装

sudo apt-get install nfs-common

(2) 编辑配置文件

sudo vim /etc/exports

在最末尾 添加一行配置

/home/xwq/nfshome *(rw,sync,no_subtree_check)

/home/xwq/nfshome: nfs工作目录 若没有 新建一个 权限设置 777

*: 任意IP可以访问nfs

(rw,sync,no_subtree_check): 访问权限 rw 可读可写

(3)重启服务

sudo /etc/init.d/nfs-kernel-server restart

[ ok ] Restarting nfs-kernel-server (via systemctl): nfs-kernel-server.service.

(4)使用nfs

使用mount挂载的方式将nfs

1.客户端临时创建一个挂载点 通常 /mnt/nfs

2.挂载

sudo mount 192.168.3.119:/home/xwq/nfshome /mnt/nfs

nfs服务器IP: 服务器共享目录路径 挂载到本地的路径

3.卸载

sudo umount /mnt/nfs

}

shell脚本:一种解释性编程语言

(将多行shell命令有序存放于文件中,有shell解释器/bin/bash 逐条读取命令执行)

多用于做命令控制,批量处理等操作,运行效率不高

shell脚本格式:

1、文件通常 .sh(用做说明,没有强制性要求)

2、文件第一行 #!/bin/bash 指定解释器

3、写代码,保存并退出 wqa

4、给shell脚本 赋值可执行权限

chmod 766 xx.sh

5、./xx.sh(运行) 或者(指定解释器去解释) /bin/bash hello.sh

创建一个写脚本框架的脚本

#!/bin/bash

touch a.sh

echo "#!/bin/bash" > a.sh

chmod 766 a.sh

vim a.sh

shell脚本注意事项:

1、每一行就是一个shell命令

2、编写规范与shell命令规范是一致的

3、严格使用标点符号 包括空格

shell变量:弱变量类型

1、用户自定义变量

2、位置变量

3、预定义变量

4、系统保留的变量

变量不需要指定类型 一切变量皆认为字符串

(1)用户自定义变量定义

变量名=值

引用变量名 :

$变量名(变量名也不能有空格和c语言命名类似)

shell变量引用的本质就是字符串替换

unset 变量名 删除变量名

(2)位置变量:

shell脚本在运行时给定的参数或选项 将通过位置变量进行传递

不需要定义

$0 shell脚本名及路劲

$1 第一个选项或参数

$2 第二个选项或参数

..

$9 第九个选项或参数

(3)预定义变量:

$# shell脚本执行时参数的个数

$@ 包含所有参数

$* 包含所有参数

$? 是上一个命令执行时的退出值

$$ 执行进程的ID

(4)系统保留的变量 环境变量:

终端启动时,终端定义了一些变量且赋值了一切

shell中的输入与输出:

输出echo "输出内容 可以使用变量"

输入read 变量名1 变量名2 变量名3

shell区分输入内容 以空格作为分隔符

算数运算 expr 算数表达式

示例 expr 3 + 2 - 5 \* 0

shell中的条件表达式:

单独字符串 有字符即 真 无字符'\0'即为假

字符串测试

s1 = s2 测试两个字符串的内容是否完全一样

s1 != s2 测试两个字符串的内容是否有差异

-z s1 测试s1 字符串的长度是否为0

-n s1 测试s1 字符串的长度是否不为0

整数测试

a -eq b 测试a 与b 是否相等

a -ne b 测试a 与b 是否不相等

a -gt b 测试a 是否大于b

a -ge b 测试a 是否大于等于b

a -lt b 测试a 是否小于b

a -le b 测试a 是否小于等于b

note: test语句执行成功(满足条件) 返回结果0 失败返回1

-d name 测试name 是否为一个目录

-e name 测试一个文件是否存在

-f name 测试name 是否为普通文件

-L name 测试name 是否为符号链接

-r name 测试name 文件是否存在且为可读

-w name 测试name 文件是否存在且为可写

-x name 测试name 文件是否存在且为可执行

-s name 测试name 文件是否存在且其长度不为0

f1 -nt f2 测试文件f1 是否比文件f2 更新

f1 -ot f2 测试文件f1 是否比文件f2 更旧

表达式非操作

!表达式

shell中的 if结构:

选择分支(空格不能省)

if [ 条件表达式 ]

then

命令块 条件真时执行

fi

二分支结构

if [ 条件表达式 ]

then

命令块 条件真时执行

else

命令块 条件假时执行

fi

练习:写一个shell脚步,运行时输入文件名参数,

判定文件是否为空文件,若空则删除这个文件

表达式的关系运算 && || !

if [[ -e $1 ]] && [[ ! -s $1 ]]

多分支结构: case 结构

结构:

case 变量 in

字符串1)

命令块1

;;

字符串2)

命令块2

;;

...

*)

命令块n

;;

ecac

运行逻辑:

将变量(字符串)与 in 后的字符串进行相等比较

若相等则执行后续的代码块 直到 ;;

*)可以匹配任意字符

shell循环:

while结构:

while [ 命令或表达式 ]

do

命令表

done

运行逻辑:命令或表达式为真则循环执行命令表

直到为假退出

for 结构1:与C语言中的for类似

i=1

for (( i=1; i<10; i++ ))

do

touch "file$i.txt"

done

for 结构2:

for 变量名 in 参数表

do

循环体

done

运行逻辑:

第一次循环从参数表中取第一个值作为变量的值

进行一次循环

第二次循环 从参数表中取第二个值作为变量的值

进行一次循环

...

直到参数表中所有的值都被取出时循环结束

参数表:可以是多个变量 也可以是多个单词

#调用函数

f1 # 没有参数的函数调用

sum 10 20 # 函数调用 带参数

B=$? # 得到函数中return 返回的值

echo "函数sum的返回值 $B"

OUT=`sum 10 20` # 命令置换方式调用 得到函数的输出

echo "函数sum的输出:$OUT"

local 变量 局部变量

默认是全局变量

华清远见——重庆中心C高级学习笔记相关推荐

  1. 华清远见—重庆中心——JAVA高级阶段知识点梳理

    华清远见-重庆中心--JAVA高级阶段知识点梳理 String字符串 String是一个类,属于数据类型中的引用类型.Java中所有使用""引起来的内容都是属于这个类的实例,称为字 ...

  2. 华清远见-重庆中心-JAVA高级阶段技术总结/知识点梳理/个人总结

    文章目录 String字符串 String类使用时注意 如何创建字符串对象 1.使用""赋值创建! 2.通过构造方法创建 不同方式创建字符串的过程 使用""赋值 ...

  3. 华清远见-重庆中心-JAVA高级阶段技术总结/个人总结

    目录 String字符串 定义 字符串对象的含义 关于字符串对象内存地址的问题 1.使用""赋值创建字符串对象 2.通过构造方法创建字符串对象 3.使用+拼接"" ...

  4. 华清远见-重庆中心-JAVA高级阶段技术总结

    目录 String字符串 可变字符串 StringBuilder类 StringBuffer类 构造方法 普通方法 比较String.StringBuilder和StringBuffer的区别 Run ...

  5. 华清远见重庆中心--java高级技术总结/个人总结

    String字符串 String 是一个类,属于数据类型中的引用类型. Java 的一切使用 "" 引起来的内容,都是这个类的实例,称为字符串对象. 字符串 在定义后, 值不可改变 ...

  6. 华清远见重庆中心—JAVA高级技术总结/个人总结

    String字符串 String是一个类,属于数据类型中的应用类型. Java的一切使用 "" 引起来的内容,都是这个类型的实例,称为字符串对象. 字符串在定义后,值不可改变,是一 ...

  7. 华清远见-重庆中心-JAVA高级阶段技术总结/知识点梳理/面试题解析

    String字符串 String是一个类,属于数据类型中的引用类型. Java中一切使用""引起来的内容,都是这个类的实例,称为字符串对象. 字符串在定义后,值不可改变,是一个常量 ...

  8. 华清远见-重庆中心-Java高级阶段技术总结:

    Java容器分为Collection和Map两大类,其下又有很多子类. Collection还有父接口Iterable,但Iterable接口不算严格意义上的集合的根接口.它称为迭代器,是用于遍历集合 ...

  9. 华清远见-重庆中心-JAVA基础阶段技术总结

    系列文章目录 第一章 华清远见--重庆中心-JAVA基础阶段技术总结 第二章 文章目录 系列文章目录 文章目录 前言 一.关于java 1.发展历程 2.编程开发 3.java架构 4.java的特点 ...

最新文章

  1. 多项式基础操作 - 学习笔记
  2. -%3e运算符在c语言中的作用,C语言逻辑运算符知识整理
  3. 开发进度月报(GB8567——88)
  4. 计算机工程与科学北京,计算机工程与科学
  5. 总结vue几种页面刷新方法
  6. C++---动态内存管理
  7. 四线温度探头怎么接线_温度变送器接线详解
  8. 知行EDI系统-入门篇
  9. 计量数据分析数据库-计量分析资料大全空间计量分析资料大全
  10. 基于Python实现的网上购书功能的网站后端
  11. leapftp连接不上,为什么leapftp连接不上
  12. JavaScript学习笔记二 标识符-字符类型
  13. No query specified(Mysql数据库报错)
  14. 人一生要读的100首古诗
  15. 学生搭配问题数据结构报告c语言,数据结构课设学生搭配问题
  16. c语言输入坐标求距离,计算两个经纬度之间距离的C语言代码
  17. PM 如何进行测试?
  18. 【C】操作符归纳+表达式运算原理
  19. potplayer 多个进程_搞懂进程组、会话、控制终端关系,才能明白守护进程干嘛的?...
  20. python 利用cartopy绘制世界地图中部分地区的风场的流线形式

热门文章

  1. 计算机网络之(2):TCP 相关知识——累积确认,三次握手,四次挥手,滑动窗口,超时重传、快速重传
  2. python JS混淆解压缩
  3. (一)图像检测中的评价指标
  4. 一篇精彩的脱口秀文稿是怎样诞生的?
  5. CFF_201604-1_折点计数
  6. ceac java,CEAC计算机基础考试
  7. 如何精简Android项目,再发给别人?
  8. WireGuard 安装
  9. 详解EBS接口开发之更新供应商付款方法
  10. Retrofit+RxJava简单使用(入门专用= - =)