Linux精要

Linux精要

Linux入门精要

Linux历史

1970年: linux元年,起始开发者为 Kenneth Lane Thompson 和 Dernis Ritchie,

现在知道为啥很多计算机是用1970年1月1日0点0分0秒作为记录时间的起点了吧。

1983年 GNU计划公布,主导者为 Richard Matthew Stallman,GNU 是 "GNU is Not UNIX" 的简写。

另外 Emacs, GCC, GDB也出自Stallman之手。

1991年4月 Linus Benedict Torvalds 编写出第一个可运行的 linux ,版本号:0.00.

随后,毕业于MIT的华裔 Theodore Ts'o 提出并实现了ext2文件系统。

Linux主要发行版

Redhat rpm软件包就出自 Red Hat 公司。

CentOS 基于 RedHat的社区版,开源免费。

Mandriva: 来自欧洲的一个发行版,以rpm作为软件管理工具。该发行版方便易用,硬件兼容性好。

SUSE: 来自德国的发行版,界面漂亮,但消耗资源多。

Debian 以稳定保守著称,deb软件包和apt软件包管理器来自于它。

Ubuntu 基于Debian的linux发行版。

计算机启动流程

按开机键

BIOS检查硬件

(CPU,内存,显卡...); 去MBR启动Grub.

(注: MBR, 512字节,硬盘0号扇区,不属于任何一个分区,包含启动代码(此处为Grub) 和硬盘分区表。)

Grub

读取 /boot/grub/grub.cfg 文件,根据配置显示启动界面。

(注:多系统的配置信息也存放在 grub.cfg中)

(重装Windows后Grub的修复:

用LiveCD启动电脑

2)获取权限: sudo -i

挂载根目录对应的分区:mount /dev/sda1 /media/

如果你当时还未 /boot 划了单独的分区,还需运行: mount /dev/sda2 /media/boot/

grub-install -root-directory=/media/ /dev/sda

6)重启电脑

)

加载内核

启动0号进程 init

Grub配置

sudo gedit /etc/default/grub

主要配置参数

GRUB_DEFAULT=0 默认启动第一个OS,如果是saved,则会记住上次开机的选择

GRUB_HIDDEN_TIMEOUT_QUIET=true 倒计时过程中不显示秒数。

GRUB_TIMEOUT=10 用户选择启动哪个OS的时间,-1表示没有时间限制

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 正常启动linux时传给内核的参数,quiet表示启动时不要打印任何信息,splash表示显示启动画面。

GRUB_CMDLINE_LINUX="" 启动参数,任何情况下都会传给内核。

修改完毕后运行

sudo update-grub ,会更新 /boot/grub/grub.cfg

apt精要

apt-get --help

软件源:etc/apt/sources.list

更新软件列表:sudo apt-get update

安装软件: sudo apt-get install soft-package-name

查找软件包: sudo apt-cache search key-name

切换到root

sudo su root

命令行

通配符

* 代表任意个任意字符,? 代表某一个任意字符。\* 转义(*作为一个普通字符来处理。)

shell脚本

bash 历史

Bourne Shell 于1978年正式发布 ,作者是Bourne Steve, 后来 Brian Fox在其基础上改造和完善,并将其命名为 Bourne Again Shell ,简称bash

bash现在是linux和mac os 的默认shell。

cygwin 里面用的也是bash.

反引号: 反引号中间可以是命令,调用这些命令并获得这些命令的输出,比如:

tar -czvf /home/backup/bak-`date %Y%m%d`.tar.gz /home/*.txt

指明使用哪个脚本:#!/bin/bash

脚本中使用函数:

copy_file(){

cp /home/*.txt /test/

}

copy_file #调用函数

shell变量,不用声明,直接使用

name=eric

age=100

echo "Hi I am ${name}, I am ${age}years old"

echo "expr $age + 1" # expr 负责对字符串变量进行数字计算

export env_name=Tom # export声明了一个全局变量,在整个会话期间可用。

特殊变量

$n 执行本脚本所加的第n个参数,n=0代表脚本本身的名称

$* 代表执行本脚本所加的所有参数(不包括脚本名本身)

$# 执行本脚本所加的参数个数

\[ 这个脚本的PID

\]

条件判断

文件检查

[ -d $path ] 目录存在则返回true

[ -f $file ] 文件存在则返回true

[ -e $pathname ] 文件或目录存在则返回true.

算术比较运算

[ $a1 -eq $a2 ] 相等判断

[$num1 -ne $num2 ] 不等于

-lt 小于

-le 小于等于

-gt 大于

-ge 大于等于

字符串运算

[ $str1 = $str2 ] 内容相同

[ $str1 != $str2 ] 内容不相同

[-z $str ] 如果str长度为0则返回true

[-n $str ] 如果str长度部位0则返回true

if he fi

if [ "$name" = "me" ]; then

echo "me"

else

echo "$name is here."

fi

case 语句

case $str in

one) echo "1";;

two) echo "two";;

three) echo "3333"

echo "333333....";;

*) echo "other...."

esac

循环语句

for 循环

for num in 1 2 3 four

do

echo "num = $num"

done

for 循环----- C格式

for (( num =1; num < 7; num++))

do

echo "num = $num"

done

while 循环

while 循环条件

do

setence

done

正则表达式

元字符

. 匹配任意字符(换行符除外)

\w 匹配字母,数字,下划线,汉子

\s 匹配任意空白符

\d 匹配数字

\b 匹配单词的开始或结尾

^ 匹配行首

$ 匹配行尾

反义字符

\W 匹配任意不是字母,数字,下划线,汉子的字符

\S 匹配任意不是空白符的字符

\D 匹配任意不是数字的字符

\B 匹配不是单词开头或结束的位置

[^x] 匹配任意不是x的字符

[^xyz] 匹配任意不是x且不是y且不是z的字符

常用的重复

* 0次货多次

+ 一次或多次

? 0次或1次

{n} 重复n次

{n,} 重复>=n次

{n,m} 重复n到m次

中括号

[abc] 里面的字符是或的关系,表示匹配 a ,b , c中的任意一个。

grep

格式: grep 字符串 文件名

grep "var" ./test.sh >> ./var_test.txt

linux下的开发

C/C++开发

GCC : GNU Compiler Collection

编译C源文件:gcc ./test.c 会得到a.out , 运行: ./a.out

编译C++文件: g++ ./test.cpp 得到a.out 运行: ./a.out

PHP开发

安装Apache

sudo apt-get install apache2 php5-mysql # ubuntu

sudo yum install httpd mysql mysql-server php php-mysql # centos

Vim

三模式

指令模式,输入模式,行末模式

Vim 启动后默认进入指令模式

模式切换

指令模式下按 i 键进入输入模式; 输入模式下按Esc键进入指令模式;指令模式下输入冒号进入行末模式。

指令模式快捷键

Home , End, PageUp, PageDown

Shift + g

按下1,6,8三个键,然后按下Shift + g 组合键,光标跳到了168行的行首。

按住Shift敲两下 g,定位到最后一行

连按两下 g 键定位到行首。.

w 和 b键:分别代表向后和向前移动一个单词。

删除内容操作:

依次按下 d , 3, d :删除当前光标向下的3行内容,包括当前行。

连按两下d键:删除当前行。

依次按下 d, 3,向右方向键,删除当前字符向右的3个字符,包括当前字符。

依次按下 d, 5 左方向键,删除当前字符左边的5个字符,不包括当前字符。

shift + j :删除当前行末尾的回车。

撤销操作:按 u 键撤销上一次操作

恢复撤销:按 Ctrl + u 恢复上一次撤销操作。

复制黏贴:跟 d 类似

按下 y, 3, y : 复制当前行向下3行的内容,包括当前行。

按下 y , 3, 左方向键,复制当前字符左侧的3个字符,不包括当前字符。

按 p 键黏贴。

查找操作:

按下 / 键:从光标位置向下查找

按下 Shift + / 键: 从光标位置向上查找。

光标移动到要查找的单词位置,然后按 Shift + 8 组合键,则从当前位置向下查找该单词,按 Shift + 3 组合键,则从当前位置向上查找该单词。

按 n 键,继续向同方向查找下一个结果,Shift + n键,则向反方向查找上一个结果。

行末模式命令

文件操作命令

w fileName.txt 将内容保存为 fileName.txt

w 保存当前文件

new fileName.txt 打开或新建一个fileName.txt文件,同时关闭当前文件。

q 退出vim,如果文件没保存,则无法退出。

q! 放弃修改,强制退出vim.

查找替换 ,命令格式: 查找范围s/查找内容/替换内容/

查找范围:空 表示在当前行查找; % 表示在整个文件中查找; 3,19 表示查找3到19行的内容;6,$ 表示查找第6行到文件末尾的内容。

查找内容:可以使用正则。

替换内容:空 表示删除查找到的内容。

3,50/hello/world/g g表示替换掉每行中所有的hello

内容过滤

g 过滤出包含某字符串的行,格式: g/要过滤的字符串/对过滤出的内容的进一步操作

g/^Eric/d 删除掉所有行首为Eric的行。

v 过滤掉不包含某字符串的行

v/^Eric/w aa.txt 过滤出所有不带Eric的行,然后将过滤内容直接存为aa.txt

程序的编译和打包

普通的编译:gcc a.c b.c -o hello

GCC四大命令

gcc cpp as ld

预处理:gcc -E ./test.c > test_cpp.c

或者 cpp ./test.c > test_cpp.c

编译: gcc -S ./test.c , 将test.c预处理和编译,得到 test.s 文件,该文件是汇编代码。

汇编: gcc -c ./test.c 预处理,编译,汇编,得到 test.o 文件,该文件是机器码文件。该过程由 as 命令来处理。

链接:将生成的.o文件和依赖的.o文件组装起来,得到可执行的程序

GDB

编译出可被调试的程序:gcc -g a.c b.c -o hello

-g 参数会加入机器码和源码的对应关系,因此编译出来的程序可设置断点进行调试,无-g参数的话可以调试但无法设置断点。

启动调试 gdb ./hello 就会进入调试界面

gdb 常用命令:

run 简写 r : 从头开始运行程序

break 简写 b: 设置断点,例如 break 10 在第10行设置断点

list 简写 l : 列出当前程序的源代码

continue 简写 c : 执行到下一个断点

print 简写 p : 打印变量的值,如 print i 就是打印变量 i 的值。

examine 简写 x :查看指定内存地址的数据。

next 简写 n : 执行下一行代码。

Makefile

linux 下的构建工具

make 命令:会去找Makefile 或者 makefile文件进行构建。

makefile书写格式:

target:resource 执行下面的命令需要的资源

要执行的命令

例子1:

all:main.o a.o b.o

gcc main.o a.o b.o -o test

其中:all是make的关键字,如果make 不加参数,则会先从all开始执行。、

例子2

clean:

rm ./*.o

rm test

install:test

cp ./test /usr/bin/

configure : 检查当前环境,生成合适的makefile

Autoconf 软件4成员

Aclocal, Autoconf, Automake, Autoscan

Autoconf: 根据当前环境自动生成 configure 和 makefile

Autoscan:检查源码目录结构

autoscan 该命令会生成 configure.scan 文件, 我们需要修改文件名为configure.in,并对文件内容做小幅修改。

AC_INIT(main.c) 说明该工程的主要文件是main.c

AM_INIT_AUTOMAKE(test.1.0) 项目名为test, 版本为1.0

AC_PROG_CC 要求最终的configure 要检测C语言编译器是否正常。

AC_OUTPUT(Makefile) 最终的configure需要产生的文件叫Makefile

Aclocal 检测编译环境

aclocal 改命令生成 aclocal.m4文件,它是根据configure.in的内容,做了详细的注解和说明。

Autoconf 生成configure脚本

autoconf 生成 configure脚本

Automake 生成makefile蓝本 makefile.in,以供configure 使用

我们先要写出 Makefile.am ,然后 Automake才能依据Makefile.am来生成makefile.in

Makefile.am 内容:

AUTOMAKE_OPTIONS=foreign 一般GNU软件应该包含NEWS, AUTHOR, ChangeLog这些文件,Automake会检查这些文件是否存在,但是如果设置成 foreign,就不会去检查了。

bin_PROGRAMS=test 说明编译之后的程序应该叫test

test_SOURCES=main.c a.c b.c 说明该工程包括的源码文件。

查看依赖关系

ldd ./test

解压缩

tar gzip

解压: tar -xzvf aaa.tar.gz

-x 解包

-c 打包

-z 该包是用gzip压缩过的,需要先用gzip解压。

-v 显示解压的过程

-f 指明要解药的文件

-j 该包是用bzip压缩过的,.tar.bz2格式

-C 将解压缩后的文件存放到指定目录。

相关资讯

一元二次方程求根在线计算器
www365betcom手机版

一元二次方程求根在线计算器

⌚ 02-06 👁️ 1197
呼死你克星官方最新版
beat365在线平台网址

呼死你克星官方最新版

⌚ 08-23 👁️ 813
科三转弯速度
体育365网投

科三转弯速度

⌚ 12-24 👁️ 1181