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 将解压缩后的文件存放到指定目录。
  • 相关阅读:
    jquery的优势
    基于指纹识别技术的超市储物箱设计
    jquery核心
    jquery中的筛选
    红包算法设计
    jquery中trim() 去掉收尾空格
    jquery中效果的创建
    项目缓存
    StringUtils方法全集
    IE8下onclick事件不支持
  • 原文地址:https://www.cnblogs.com/imap/p/6092495.html
Copyright © 2011-2022 走看看