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)重启电脑
)
- 用LiveCD启动电脑
- 加载内核
- 启动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 执行下面的命令需要的资源
<Tab> 要执行的命令
- 例子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 将解压缩后的文件存放到指定目录。
作者:imap
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.