zoukankan      html  css  js  c++  java
  • 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主要发行版

    1. Redhat rpm软件包就出自 Red Hat 公司。
    2. CentOS 基于 RedHat的社区版,开源免费。
    3. Mandriva: 来自欧洲的一个发行版,以rpm作为软件管理工具。该发行版方便易用,硬件兼容性好。
    4. SUSE: 来自德国的发行版,界面漂亮,但消耗资源多。
    5. Debian 以稳定保守著称,deb软件包和apt软件包管理器来自于它。
    6. Ubuntu 基于Debian的linux发行版。

    计算机启动流程

    1. 按开机键
    2. BIOS检查硬件
    • (CPU,内存,显卡...); 去MBR启动Grub.
      (注: MBR, 512字节,硬盘0号扇区,不属于任何一个分区,包含启动代码(此处为Grub) 和硬盘分区表。)
    1. Grub
    • 读取 /boot/grub/grub.cfg 文件,根据配置显示启动界面。
      (注:多系统的配置信息也存放在 grub.cfg中)
      (重装Windows后Grub的修复:
      1. 用LiveCD启动电脑
        2)获取权限: sudo -i
      2. 挂载根目录对应的分区:mount /dev/sda1 /media/
      3. 如果你当时还未 /boot 划了单独的分区,还需运行: mount /dev/sda2 /media/boot/
      4. grub-install -root-directory=/media/ /dev/sda
        6)重启电脑
        )
    1. 加载内核
    2. 启动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声明了一个全局变量,在整个会话期间可用。
    
    • 特殊变量
      1. $n 执行本脚本所加的第n个参数,n=0代表脚本本身的名称
      2. $* 代表执行本脚本所加的所有参数(不包括脚本名本身)
      3. $# 执行本脚本所加的参数个数
      4. [ 这个脚本的PID ]

    • 条件判断
      • 文件检查
        1. [ -d $path ] 目录存在则返回true
        2. [ -f $file ] 文件存在则返回true
        3. [ -e $pathname ] 文件或目录存在则返回true.
      • 算术比较运算
        1. [ $a1 -eq $a2 ] 相等判断
        2. [$num1 -ne $num2 ] 不等于
        3. -lt 小于
        4. -le 小于等于
        5. -gt 大于
        6. -ge 大于等于
      • 字符串运算
        1. [ $str1 = $str2 ] 内容相同
        2. [ $str1 != $str2 ] 内容不相同
        3. [-z $str ] 如果str长度为0则返回true
        4. [-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
    

    正则表达式

    • 元字符
    1. . 匹配任意字符(换行符除外)
    2. w 匹配字母,数字,下划线,汉子
    3. s 匹配任意空白符
    4. d 匹配数字
    5.  匹配单词的开始或结尾
    6. ^ 匹配行首
    7. $ 匹配行尾
    • 反义字符
    1. W 匹配任意不是字母,数字,下划线,汉子的字符
    2. S 匹配任意不是空白符的字符
    3. D 匹配任意不是数字的字符
    4. B 匹配不是单词开头或结束的位置
    5. [^x] 匹配任意不是x的字符
    6. [^xyz] 匹配任意不是x且不是y且不是z的字符
    • 常用的重复
    1. * 0次货多次
    2. + 一次或多次
    3. ? 0次或1次
    4. {n} 重复n次
    5. {n,} 重复>=n次
    6. {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. 按下1,6,8三个键,然后按下Shift + g 组合键,光标跳到了168行的行首。
    2. 按住Shift敲两下 g,定位到最后一行
    3. 连按两下 g 键定位到行首。.
    • w 和 b键:分别代表向后和向前移动一个单词。
    • 删除内容操作:
    1. 依次按下 d , 3, d :删除当前光标向下的3行内容,包括当前行。
    2. 连按两下d键:删除当前行。
    3. 依次按下 d, 3,向右方向键,删除当前字符向右的3个字符,包括当前字符。
    4. 依次按下 d, 5 左方向键,删除当前字符左边的5个字符,不包括当前字符。
    5. shift + j :删除当前行末尾的回车。
    • 撤销操作:按 u 键撤销上一次操作
    • 恢复撤销:按 Ctrl + u 恢复上一次撤销操作。
    • 复制黏贴:跟 d 类似
    1. 按下 y, 3, y : 复制当前行向下3行的内容,包括当前行。
    2. 按下 y , 3, 左方向键,复制当前字符左侧的3个字符,不包括当前字符。
    3. 按 p 键黏贴。
    • 查找操作:
    1. 按下 / 键:从光标位置向下查找
    2. 按下 Shift + / 键: 从光标位置向上查找。
    3. 光标移动到要查找的单词位置,然后按 Shift + 8 组合键,则从当前位置向下查找该单词,按 Shift + 3 组合键,则从当前位置向上查找该单词。
    4. 按 n 键,继续向同方向查找下一个结果,Shift + n键,则向反方向查找上一个结果。

    行末模式命令

    • 文件操作命令
    1. w fileName.txt 将内容保存为 fileName.txt
    2. w 保存当前文件
    3. new fileName.txt 打开或新建一个fileName.txt文件,同时关闭当前文件。
    4. q 退出vim,如果文件没保存,则无法退出。
    5. q! 放弃修改,强制退出vim.
    • 查找替换 ,命令格式: 查找范围s/查找内容/替换内容/
      1. 查找范围:空 表示在当前行查找; % 表示在整个文件中查找; 3,19 表示查找3到19行的内容;6,$ 表示查找第6行到文件末尾的内容。
      2. 查找内容:可以使用正则。
      3. 替换内容:空 表示删除查找到的内容。
      4. 3,50/hello/world/g g表示替换掉每行中所有的hello
    • 内容过滤
    1. g 过滤出包含某字符串的行,格式: g/要过滤的字符串/对过滤出的内容的进一步操作
    2. g/^Eric/d 删除掉所有行首为Eric的行。
    3. v 过滤掉不包含某字符串的行
    4. 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 常用命令:
      1. run 简写 r : 从头开始运行程序
      2. break 简写 b: 设置断点,例如 break 10 在第10行设置断点
      3. list 简写 l : 列出当前程序的源代码
      4. continue 简写 c : 执行到下一个断点
      5. print 简写 p : 打印变量的值,如 print i 就是打印变量 i 的值。
      6. examine 简写 x :查看指定内存地址的数据。
      7. next 简写 n : 执行下一行代码。

    Makefile

    • linux 下的构建工具
    • make 命令:会去找Makefile 或者 makefile文件进行构建。
    • makefile书写格式:
    target:resource  执行下面的命令需要的资源
    <Tab> 要执行的命令
    
    1. 例子1:
    all:main.o a.o b.o  
        gcc main.o a.o b.o -o test
    

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

    1. 例子2
    clean:
        rm ./*.o
        rm test
    install:test
        cp ./test /usr/bin/
    

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

    Autoconf 软件4成员

    • Aclocal, Autoconf, Automake, Autoscan
    • Autoconf: 根据当前环境自动生成 configure 和 makefile
    • Autoscan:检查源码目录结构
      1. autoscan 该命令会生成 configure.scan 文件, 我们需要修改文件名为configure.in,并对文件内容做小幅修改。
      2. AC_INIT(main.c) 说明该工程的主要文件是main.c
      3. AM_INIT_AUTOMAKE(test.1.0) 项目名为test, 版本为1.0
      4. AC_PROG_CC 要求最终的configure 要检测C语言编译器是否正常。
      5. AC_OUTPUT(Makefile) 最终的configure需要产生的文件叫Makefile
    • Aclocal 检测编译环境
      1. aclocal 改命令生成 aclocal.m4文件,它是根据configure.in的内容,做了详细的注解和说明。
    • Autoconf 生成configure脚本
      1. autoconf 生成 configure脚本
    • Automake 生成makefile蓝本 makefile.in,以供configure 使用
      1. 我们先要写出 Makefile.am ,然后 Automake才能依据Makefile.am来生成makefile.in
      2. Makefile.am 内容:
        1. AUTOMAKE_OPTIONS=foreign 一般GNU软件应该包含NEWS, AUTHOR, ChangeLog这些文件,Automake会检查这些文件是否存在,但是如果设置成 foreign,就不会去检查了。
        2. bin_PROGRAMS=test 说明编译之后的程序应该叫test
        3. test_SOURCES=main.c a.c b.c 说明该工程包括的源码文件。

    查看依赖关系

    • ldd ./test

    解压缩

    • tar gzip
    • 解压: tar -xzvf aaa.tar.gz
      1. -x 解包
      2. -c 打包
      3. -z 该包是用gzip压缩过的,需要先用gzip解压。
      4. -v 显示解压的过程
      5. -f 指明要解药的文件
      6. -j 该包是用bzip压缩过的,.tar.bz2格式
      7. -C 将解压缩后的文件存放到指定目录。
  • 相关阅读:
    Composite in Javascript
    Model Validation in Asp.net MVC
    HttpRuntime.Cache vs. HttpContext.Current.Cache
    Controller Extensibility in ASP.NET MVC
    The Decorator Pattern in Javascript
    The Flyweight Pattern in Javascript
    Model Binding in ASP.NET MVC
    Asp.net MVC
    jQuery Ajax 实例 全解析
    ASP.NET AJAX入门系列
  • 原文地址:https://www.cnblogs.com/imap/p/6092495.html
Copyright © 2011-2022 走看看