首页 > 系统相关 >Linux与Shell编程期末复习

Linux与Shell编程期末复习

时间:2023-09-17 14:31:53浏览次数:33  
标签:文件 gcc Shell 复习 字符 命令 Linux test src

Linux中各类特殊变量的含义

$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

文件管理与常用命令

Linux文件和目录结构

  • / 根目录
  • /etc 供系统维护管理用的命令和配置文件
  • /tmp 存放临时文件
  • /boot 存放系统引导文件
  • /bin 系统常用命令,如ls, ln, cp, cat等
  • /home 用户目录
  • /root 超级管理员目录
  • /dev 存放设备文件
  • /usr
  • /usr/include C语言头文件存放目录
  • /usr/tmp 存放临时文件
  • /usr/bin 存放常用命令,如echo, grep, kill
  • /lib,/usr/lib 存放各种库文件,指C语言的链接库文件,以及terminfo终端库等等

文件通配符和文件类型

  • * 可执行普通文件
  • / 目录
  • @ 符号链接
  • | FIFOs
  • = 套接字
  • - 普通文件
  • p 目录文件
  • b/c 设备文件
  • l 链接文件
  • p 管道文件

Command

sort排序

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

  • -u 在输出行中去除重复项
  • -rsort默认排序方式为升序,加此选项改为降序
  • -o重定向输出文件
  • -n以数字形式排序,默认为字符串形式
  • -t设定排序索引的间隔符
  • -k指定排序的列数
  • -f忽略大小写
  • -b忽略每一行前面所有的空白部分

cat

  • -n 编号
  • -b 空白行不编号
  • -s 压缩连续空行

ls

  • -a 全部信息
  • -l 长信息
  • -F 附加文件类型

more

  • -d 提示
  • -f 计算实际显示行数
  • -s 合并显示空行
  • +/pattern 搜索字串并在此之后开始显示
  • -num 每行显示的行数
  • +num 从num行开始显示

  • space/n 下一屏
  • b 上一屏
  • enter 下一行
  • /pattern 搜索

less

  • -a 最后一页
  • -m 百分比
  • -M 百分比 行号 总行数
  • -N 行号
  • -p test 搜索test
  • -s 合并显示空行

head

  • -num

tail

  • -num

cp

  • -a = cp -drp
  • -d 保留文件链接
  • -f 强制执行
  • -i 交互提醒
  • -p 更新修改日期与访问权限
  • -r 递归复制文件树
  • -v 可视化操作
  • -l 不复制而只产生硬链接
  • -s 不复制而只产生软链接

mv

  • mv -i 交互提醒
  • -f 强制执行

rm

  • -r 递归删除文件夹
  • -f 强制执行
  • -i 交互提醒

diff

  • -b 忽略空格
  • -c 上下文格式显示
  • -C num 显示num行上下文

  • <为删除
  • >为新增

touch

mkdir

  • -p 帮助确保目录全部存在,如果不存在就新建

rmdir

tar

  • -c 打包
  • -x 解包
  • -v 可视化
  • -f 不交互
  • -z 对文件进行压缩
  • -czvf 压缩
  • -tzvf 列出压缩内容
  • -xzvf 解压

ln

  • ln 硬链接
  • -s 软链接

VIM

Linux与Shell编程期末复习_Linux

Linux与Shell编程期末复习_Shell_02

Linux C

CMake

makefile示例

build: clean main

mymath.o: include/mymath.h src/mymath.c
        gcc -fPIC src/mymath.c -I./include -c -o src/mymath.o

welcome.o: include/welcome.h src/welcome.c
        gcc -fPIC src/welcome.c -I./include -c -o src/welcome.o

libtest.so: mymath.o welcome.o lib
        gcc -shared -o lib/libtest.so src/*.o

lib:
        mkdir -p ./lib

main: libtest.so main.c
        gcc main.c -o main -I./include lib/libtest.so

clean:
        rm -f src/*.o
        rm -rf lib
        rm -f main

.PHONY: clean build

GCC

编译顺序

project
main.c
	-src
	-include
	-lib

指定的指令test.c

  • -E(预编译) test.i
  • -S(生成汇编) test.s
  • -c(生成机器码) test.o
  • -o(生成目标文件,链接) test

静态库

gcc test.c -c test.o
ar rcs testLib test.o
gcc -Llib -testLib

动态库

gcc -fPIC test.c -c
gcc -shared -o testLib.so test.o
gcc -Llib -testLib

Account

uid&gid

表示用户与组群文件有owner uid&gid 每个uid有与其对应的gid 显示文件系统时需要通过访问/etc/passwd以及/etc/group将uid/gid转化为实际的用户名与组群名

/etc/passwd

username : pwd(x见shadow) : uid : gid : desc : home_path : shell_path
uid为0是系统管理员即root
uid为1-499是系统账号,系统服务使用
uid为500-65535即为可登录用户账号

/etc/shadow

username : pwd(加盐后的) : 最近更改密码的日期(linux时间戳) : 密码不可被更改的天数(0即为可随意更改) : 密码需要重新变更的天数 : 密码需要重新变更的提示天数 : 密码过期后的宽限天数 : 账号失效日期 : 保留字段

/etc/group

groupname : pwd(x见gshadow) : gid : supported_accounts

Manage Account

useradd

useradd {username}

  • -c 描述信息
  • -s shell path
  • -d home path
  • -p password
passwd
userdel

userdel {username}

  • -f 强制
  • -r 递归删除所有信息
su

su {username}

  • '-l' 读取/profile的shell环境变量
  • exit返回主用户
sudo

sudo {exec}默认为root

  • -u 指定用户执行
/etc/sudoers

username ALL=(ALL) ALL
在任何地方均可运行sudo

who
last
lastlog

Shell

Bash

type

type {name}

  • -t 根据name的类型返回一个单词(别名,关键字,函数,内建,文件),否则返回空值。
  • -p 如果外部命令则显示完整的文件名
  • -a 根据PATH变量将所有含有name的命令进行罗列,包括别名
变量

echo ${var}

  • var=x (=前后均无空格,变量开头不能为数字)
  • var="var is ${VAR}"变量可以递归调用
  • 双引号内特殊字符可以保持原有特性,单引号内特殊字符除空格以外会全部原样输出
  • 如果要将var的值或一个命令的运行结果赋予另一个变量需要var1=$(var2)
  • export VAR可以使可以使VAR成为环境变量
  • unset 可以取消环境变量
别名alias
alias cmd="*"
unalias cmd
历史

history {num}

  • 直接输入可以得到最近的历史命令
  • -c 清空
  • -a 将新增的历史数据写入到一个文件
  • -r 将文件内的内容读入history
  • -w 将history记录的内容写入文件history为异步更新,用户登陆状态只会存在内存中,断开连接后才会落盘写入文件

!可以匹配历史命令

Bash环境信息

运行顺序:当前目录或指定目录->alias->builtin->$PATH搜寻到的命令
Bash启动是会自动从环境变量文件读入变量,分为全局与私有的
non-login shell与login shell读取的配置文件不一致
login shell读取顺序/etc/profile->/.bash_profile->/.bashrc
non-login shell只读取/.bashrc

组合按键

命令

效果

Ctrl+c

终止当前命令

Ctrl+d

EOF

Ctrl+m

Enter

ctrl+s

暂停输出

ctrl+q

恢复输出

ctrl+u

删除整行命令

ctrl+z

暂停挂起命令

通配符与特殊符号

符号

意义

*

代表任意长度的字符

?

代表一个任意字符

[x]

代表一个括号内的所有字符(必须有,非任意)

[a-z]

代表有一个按括号内编码顺序的范围的一个字符(必须有,非任意)

[\^x]

代表一个非括号内的字符(字符串过滤)

数据流的重定向

数据重定向可以将stdin,stdout,stderr传送到不同的设备或位置
exec 1>stdin 2>stderr(>是覆盖,>>是追加)
2>/dev/null可以清除错误信息
2>&1可以将正确与错误信息写入同一个文件

命令运行的判断依据

cmd1;cmd2连续命令下达,但是不考虑命令连续性即命令与命令之间可能乱序$?获取前一个命令的返回值 $?=0时即命令运行正确
cmd1 && cmd2 cmd2在cmd1运行完毕且正确时才运行
cmd1 || cmd2 cmd2在cmd1运行完毕但错误时才运行

Tunnel

管道命令界定符号|
|仅能处理前一个命令的正确输出结果,无法直接输出错误结果

颉取命令

颉取命令通常是以行为单位
cut -d 分隔符 -f 第几段
grep -v反向选择
grep -n输出行号
grep -i忽略大小写
常用如
cmd | grep -v pattren1 | grep pattern2

排序命令

sort -t 分隔符 -k 第几个
uniq -c 去重计数
wc -l 行
wc -w 单词
wc -c 字符

双向重定向命令

tee -a 追加
重定向一个副本至file中

字符转换命令

tr -d 删除一个字符串
tr -s 取代重复字符
tr ‘[a-z]’’[A-Z]’ 实现大小写转换
tr -d '*'删除内容

col 过滤控制字符
col -x 将tab换成空格
col -b 过滤所有控制符

join -t 指定字段分隔符
join num 指定分析字段
join -1/2 指定分析文件
最好事先sort

paste -d 指定分隔符,默认是tab
paste - 意为来自管道

expand -t num 指定一个tab替代为多少个空格

分割命令

split file PREFIX将文件按大小或行数进行分割
split -b 指定分割文件的最大大小
split -l 按行数分割
PREFIX为分割后的文件名的前导符

参数替换命令

xargs cmd
xargs -p 提示
xargs -n 一组命令的量
xargs -e’\*’ 停止命令的标识
能够将一个不支持管道的命令,接受来自其他命令的stdout

-号

stdin与stdout可以通过-来替代

正则表达式

特殊字符

egrep "" filename

符号

说明

^

\^word word在行首

$

word$ word在行尾

.

一定有一个任意字符

\

将特殊字符转义为一般符号

*

重复前一个字符,0到无穷多个.\*即为任意字符串

[\^]

舍去或欲求的字符集合

[n1-n2]

欲求的字符范围

{n,m}

连续n到m个的前一个字符

+

一个或一个以上

\?

0个或1个

|


()

组群

文件格式化与处理

sed -n 安静模式
sed -i 直接修改文件内容
sed -f 写入文件
动作:[n1],[n2]funnction n1,n2为动作施加行
function:a之下追加,c取代,d删除,i之上插入,p打印选择的数据,s替换 如sed ‘2,5d’
sed s/‘pt1’/‘pt2’/g 全局替换

awk -F 指定分隔符

awk -F ’ ’ ‘$3<10{print $1 “\t” $3}’

diff -Naur oldfile newfile > patch
patch -p0 < patch(oldfile->newfile)
patch -R -p0 <patch(oldfile->newfile->oldfile)

Shell编程

特征

纯文本,从上往下,从左到右
\可以延伸至下一行
/#为注释
/#!/bin/bash
$((运算内容))

test

test -e dictory

$特例

\Linux与Shell编程期末复习_Linux_03@ 输入参数
$n 第n个参数

循环

if [ * ]; then
    do sth
elif [ * ]; then
    do sth
else
    do sth
fi

while [ * ]
do
    do sth
done

until [ * ]
do
    do sth
done

for i in $(seq 1 100)
do
    do sth
done

for (( i=0; i<=100; i=i+1 ))
do
    do sth
done

标签:文件,gcc,Shell,复习,字符,命令,Linux,test,src
From: https://blog.51cto.com/u_15567308/7501913

相关文章

  • 《Unix/linux系统编程》教材第9章学习笔记
    结构化教材内容第9章:I/O库函数I/O库函数与系统调用系统调用是文件操作的基础,但它们只支持数据块的读/写。系统调用函数:open()、read()、write()、lseek()、close();I/O库函数:fopen()、fread()、fwrite()、fseek()、fclose();I/O库函数的根都在对应的系统调用函数中,例fopen()......
  • linux安装nacos
    一、准备1.安装包nacos-server-2.0.3.tar.gz2.jdk1.8+环境3.mysql二、解压安装#解压tarzxvfnacos-server-2.0.3.tar.gz-C/usr/local/nacos#进入解压目录中bin文件夹cd/usr/local/nacos/nacos-server-2.0.3/bin#试运行nacos服务#启动命令(standalone代表着单机模......
  • Unix/Linux系统编程学习笔记二
    学习笔记二一、教材知识点总结1.I/O库函数程序(1)fopen()使用字符串表示模式,其中"r"表示READ"w"表示WRITE。它返回一个指向FILE结构体的指针。fopen()首先发出open()系统调用来打开文件,以获取文件描述符编号fd。如果open0系统调用失败,则fopen()会返回一个NULL指针。否则,它会......
  • Linux Shell脚本实战:让你的工作变得更轻松、更高效
    作为一名Linux工程师,会写好的脚本不仅能提高工作效率,还能有更多的时间做自己的事。最近在网上冲浪的时候,也注意收集一些大佬写过的脚本,汇总整理一下,欢迎收藏,与君共勉!查看有多少远程的IP在连接本机#!/bin/bash#!/bin/bash#查看有多少远程的IP在连接本机(不管是通过ssh......
  • 系统内存管理:虚拟内存、内存分段与分页、页表缓存TLB以及Linux内存管理
    虚拟内存虚拟内存是一种操作系统提供的机制,用于将每个进程分配的独立的虚拟地址空间映射到实际的物理内存地址空间上。通过使用虚拟内存,操作系统可以有效地解决多个应用程序直接操作物理内存可能引发的冲突问题。在使用虚拟内存的情况下,每个进程都有自己的独立的虚拟地址空间,它们......
  • 《深入LINUX内核架构》学习笔记 ——01
    模块相关的知识1.模块相较于宏内核(微内核优点)模块消除了宏内核的许多限制,包括:缺乏动态可拓展性、导致内核映像尺寸膨胀、测试新特性时必须重启系统等。2.静态链接、动态链接及模块依赖(TIPS)《深入理解计算机系统》中有这样一段话:共享库是一个目标模块,在运行或加......
  • goland dlv在远程linux里运行代码开发,并debug调适
    一、配置好ssh自动同步代码参考下面连接:https://www.cnblogs.com/haima/p/13257524.html二、配置devbug监听运行GORemote填写配置linux上运行监听服务如:上图有两种方式直接运行代码并监听dlvdebug--headless--listen=:12345--api-version=2--accept-multiclie......
  • IFAction导出的游戏如何在linux程序下运行?
    在linux系统里,应该都自带python环境,把游戏以web方式导出,在文件夹下创建一个python文件(文件后缀以.py结束),把以下代码复制进去,#author:rkey#date:20230904#note:用于解决IFAction导出的web版游戏在linux系统下运行的问题。importtkinterastkfromthreadingimportThrea......
  • linux安装nacos
    linux安装nacos1、jdk安装1.1、准备jdk1.8安装包1.2、解压JDK安装包1.3、配置JDK变量环境1.4、刷新环境变量使其生效1.5、查看JDK是否安装成功2、安装maven2.1、首先到maven官网下载maven压缩包2.2、将下载的压缩包上传到linux的/usr/local目录2.3、解压文件2.4、配置环境变量2.5、......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......