Linux操作系统

概述

  • 不同版本的linux命令有的用法有一些差异,如:在Ubuntu中命令参数可以写在最后,而unix中须写在中间

常用命令

  • 查看系统环境变量信息
    • echo $PATH
  • 终端提示符,示例:aa@bb:~$
    • aa 用户名
    • @ 连接符
    • bb 主机名
    • ~ 路径(~家目录 /根目录)
    • $ 权限
      • $ 普通用户
      • # 管理员权限
  • 命令 --help
    • 查看当前命令的帮助信息
  • man 章节 命令/信息
    • 获得指定命令帮助手册
    • 章节,共9种类型,常用的有3种
      • 1 命令信息
      • 2 操作系统函数信息/系统调用
      • 3 库函数(c库提供的函数)信息
      • 章节可以省略,单有些命令不加章节号,查询的信息可能不准确
    • man man
      • 查看man自己的帮助信息
  • pwd 查看当前目录的绝对路径
  • cd 切换/进入指定目录
    • cd ..
      • 去上一层目录(父级目录)
    • cd -
      • 回到上一个命令下的路径(相当于windows下的回退,不一定是父级目录)
  • find 路径 -name 文件名
    • 在目录(包括子目录)中搜索匹配文件
  • whereis <文件名|命令>
    • 在系统中查找文件
    • 查找指定命令的目录路径
  • ls 查看当前目录详情
类型+权限 所属组 所属者
drwx------ xxx xxx
    • 类型+权限:第0位(文件类型) 1-3(所属者权限) 4-6(所属组权限) 7-9(所有/其他用户权限)
    • 文件类型(共7中):-普通文件;d目录;l连接;s可执行/套接字文件;c字符设备驱动程序;b块设备驱动程序;p管道文件
    • 权限分类:r读;w写;x执行;-禁止
ls *[0-9]*.txt #使用正则匹配查看,文件名中有数字的文件

ls -l
# drwx------+ 11         shao   staff   352B    12 29 22:15  test
# 类型+权限    链接文件个数 所属组  所属者   文件大小  时间         文件名

#可以使用分号同时执行多个命令
ls;pwd
  • dir 列出目录信息
  • vdir 列出目录信息
  • cat 列出及合并文件、查看文件内容
    • -n 显示行号
  • more (向后)分页查看文件
  • less (向前/向后)分页浏览查看文件
  • head 查看文件开头
  • tail 查看文件结尾
  • touch 新建文件
    • 如果文件已经存在,则更新文件的时间戳
  • rm 删除文件/目录
    • -f 强制删除
    • -r 递归删除文件夹
  • mkdir 新建目录
mkdir test1 test2 test3 #同时创建多个目录
mkdir -p test1/test2/test3 #递归创建目录
  • mv 文件改名、移动文件
mv a.txt test/ #将文件a.txt移动到test目录中
mv a.txt a2.txt #文件重命名
mv test/ test2 #目录重命名
  • cp 拷贝文件
cp a.txt test/ #复制a.txt文件到test目录下
cp test/ test2/ -a #复制tset目录下所有内容到test2目录中
cp a.txt a2.txt #当前文件下,文件复制
  • ln [参数] 源文件名 链接文件名
    • 建立硬连接和符号连接,类似于快捷方式
    • -s 软连接
ln -s test.txt ltest
ls -l ltest
# lrwxr-xr-x  1 shao  staff  8  2  2 17:45 ltest      ->  test.txt
#                                           链接文件名 指向  源文件名
  • mc(Midnight Commander) 启动处理文件的图像化界面程序
  • clear 清屏
  • grep 查找信息 文件名 [参数]
    • 在文件中查找指定的内容,会列出查找信息所在行的信息,高亮显示查找信息关键字
    • -n 显示行号
    • -R 递归查找子目录
grep aa * -R -n #不指定文件名,在当前目录下所有的文件及其子文件中查找
  • tar [主选项+辅选项] 压缩文件名.tar.gz 源文件或目录
    • 文件压缩
tar -zcvf mytar.tar.gz file1 file2 file3 #将file1 file2 file3压缩为mytar.tar.gz文件
tar -zxvf mytar.tar.gz -C /usr/local #解压缩到指定目录

#压缩和解压时bz2格式文件
tar -jcvf mytar.tar.bz2 file1 file2 file3
tar -jxvf mytar.tar.bz2 -C /usr/local
  • ps
    • 显示当前系统中的进程信息
    • 查看当前进程信息
      • ps
    • 查看当前系统的所有进程
      • ps -ef
      • ps ajx
  • kill 命令
    • kill 信号编号 进程ID
      • 向指定进程发送信号
      • kill -9 123 杀死ID为123的进程
    • kill -l
      • 查询信号编号列表
  • ipconfig getifaddr en0
    • 查看电脑ip地址

非系统默认命令

  • 有的命令可以单独安装
    • 有apt-get工具的安装示例:sudo apt-get install 命令名
  • tree 以树行方式图形化列出目录列表

软件包

Linux应用软件的安装包有三种:tar、rpm、dpkg

  • rpm是Redhat Linux提供的一种包封装格式,有五种操作方式:安装、卸载、升级、查询、验证

BASH

bash(Bourne Again SHell)是自由软件基金会发布的Bourne Shell的兼容程序

  • 默认情况下,linux命令的标准输入设备是键盘;标准输出设备是屏幕。
  • 输出重定向:使shell命令的执行结构不是直接显示到屏幕而是送到一个文件,可以用输出重定向。
    • > 可以覆盖或新建一个文件
    • >> 可以在已存在的文件后面追加新内容
  • 输入重定向:shell命令的输入可以来自一个文件,用输入重定向可以完成。
    • 输入重定向的操作符一种是 <
    • 另一种称为here文档,用 << 实现
  • 错误重定向:与程序的标准输出一样,错误输出也可以重定向。
    • 2> 新建或覆盖
    • 2>> 在已存在的文件后面追加新错误信息
  • 管道符:利用shell提供的管道(pipe)功能,可以将命令的标准输出作为另一个命令的标准输入
    • | 管道操作符
ls --help | more #将ls帮助信息以分页的方式显示
  • 历史表:linux系统为用户从各种角度提供了避免重复劳动的机制。历史表就是其中的一中。历史表由bash自动维护,可以保存500行命令。每次用户退出登录,系统自动将当前的历史表存入一个文件,其缺省的名字为.bash_history。下次登录,用户开始一次新会话,bash会自动将新的命令追加到已经建立的历史表中。用history命令可以查看历史表中命令行清单
    • !! 重复执行最后一条命令

系统用户管理配置

  • . 账号配置文件:linux中和用户管理有关的文件包括 /etc/passwd、/etc/group、/etc/shadow文件
    • /etc/passwd文件:列出了所有有效用户名及其相关信息,每个用户名都有一行,分为7个字段,中间用冒号定界
      • 用户名:密码:用户ID:组ID:注释:主目录:登录shell
    • /etc/group文件:缺省的/etc/group文件包含有很多个组。每行含有四段
      • 组名:口令:组ID:用户
    • 添加用户命令
      • adduser
  • ip地址和主机名映射文件
    • /etc/hosts
  • 端口号和服务名之间的映射文件
    • /etc/services
  • 配置名字解析器
    • /etc/host.conf
    • /etc/nsswitch.conf
  • 配置DNS客户
    • /etc/resolv.conf
  • 主机地址、掩码和缺省路由器
    • /etc/init.d/network

Makefile

  • make是linux系统中的一个命令,是个可执行程序,用来解析makefile文件的命令,存放在/usr/bin/中
  • makefile 是一个文件,用于描述程序的编译或执行规则。类似于shell脚本文件
  • make命令格式
    • make [-f file] [targets]
    • make默认在工作目录中寻找名为GNUmakefile、makefile、Makefile的文件作为make的输入文件,-f可以指定自定义的文件名作为make的输入文件
    • targets:若使用make命令时没有指定目标,则make命令默认会执行输入文件内的第一个目标,然后退出。目标可以是一个或多个用空格隔开,也被称为假象目标(相当于别名)
  • 编写makefile文件
# 文件书写格式
# 假象目标(相当于别名):依赖文件列表
#   命令...
            
# myMakefile 文件
main:main.o sub.o sum.o
    gcc main.o sub.o sum.o -o main
main.o:main.c
    gcc -c main.c -o main.o
sub.o:sub.c
    gcc -c sub.c -o sub.o
sum.o:sum.c
    gcc -c sum.c -o sum.o
clean:
    rm -rf *.o main a.out
  • 执行makefile
make -f myMakefile
# gcc -c main.c -o main.o
# gcc -c sub.c -o sub.o
# gcc -c sum.c -o sum.o
# gcc main.o sub.o sum.o -o main

make -f myMakefile clean
# rm -rf *.o main a.out
  • makefile变量相当于c语言中的宏
    • 自定义变量
      • 在文件中自定义
      • make命令传入
    • 系统变量:make解析makefile前,读取将系统的环境变量并设置为makefile的变量
    • 预定义变量(自动变量),可以直接使用
      • $@ 目标名
      • $< 依赖文件列表中的第一个文件
      • $^ 依赖文件列表中去重复文件的部分,或所有依赖文件
      • AR 归档维护程序的程序名,默认ar
      • ARFLAGS 归档维护程序的选项(也就是参数)
      • AS 汇编程序的名称,默认as
      • ASFLAGS 汇编程序的选项(也就是参数)
      • CC c编译器的名称,默认cc
      • CFLAGSC c编译器的选项(也就是命令参数)
      • CPP c预编译器的名称,默认值为$(CC)-E
      • CPPFLAGS c预编译的选项(也就是参数)
      • CXX c++编译器的名称,默认值g++
      • CXXFLAGS c++编译器的选项(也就是参数)
    • 定义:变量名=变量值
      • 中间不能有空格
    • 使用
      • $(变量名)
      • ${变量名}
cc=gcc
#cc=arm-linux-gcc
target=main
obj=index

$(target):
    $(cc) *.c -o $(obj).out
    echo $(PWD) #输出路径
    echo "test=$(test)" #如果在系统韩剧变量中设置了一个test变量(如:export test=10)这里就可以拿到

#使用预定义变量编写makefile文件,编译所有.c文件
cc=gcc
target=main
obj=main.o main2.o main3.o
CFLAGS=-Wall -g

$(target):$(obj)
    $(cc) $^ -o $@
%*.o:%*.c
    $(cc) $(CFLAGS) -c $< -o $@
clean:
    rm -rf *.o $(target) a.out

推荐文章