ls
list directory contents 列出当前目录清单
-l:以详情模式(long listing fashion)列出文件夹的内容。等价于ll。
-a:列出文件夹里的所有内容(包括以"."开头的隐藏文件)
-h:增强对文件大小易读性,方便看文件大小。
-lah:显示当前目录下所有文件(详情模式、包含隐藏文件、易读性)
lsblk 列出块设备
ldd
list dynamic dependencies:列出动态库依赖关系
pwd
print working directory
模块操作
insmod 载入模块
rmmod 删除不需要的模块
lsmod 获得系统中加载了的所有模块(读取并分析/proc/modules
文件)
Linux有许多功能是通过模块的方式,在需要时才载入kernel。这样可以使kernel较为精简,进而提高效率。这类可载入的模块,通常是设备驱动程序。
uname
Unix Name,显示当前操作系统名称。
-r:显示操作系统的发行版号。
history
历史记录,显示在终端中所执行过的所有命令的历史。
sudo
super user do
允许授权用户执行超级用户或者其它用户的命令。通过在sudoers列表的安全策略来指定。
/etc/sudoers文件用来保存一些用户,使这些用户可以通过sudo命令来暂时获取root的权限。
这些用户使用sudo时输入的密码是当前用户密码,而不是root密码。
mkdir
Make directory,创建新目录。
如果目录已经存在,会返回一个错误信息:不能创建文件夹,文件夹已经存在了。
mkdir -p /backup/cmake
-p:用于创建级联目录,如果目录已存在,不会有错误提示。若父目录不存在,将会创建父目录。
rm
rmdir:删除空目录
rm -rf:目录名字 小心慎用
-r:向下递归,不管有多少级目录一并删除
-f:直接强行删除,不作任何提示
删除软连接:
正确方式(删除软链接,但不删除实际数据):rm -rf ./test
错误的删除方式(会把原来test内容删除):rm -rf ./test/
date
显示或设定系统的日期与时间。
将日期设置为2014年6月18日:date -s 06/18/14
将时间设置为14点20分50秒:date -s 14:20:50
将时间设置为2019年1月5日18点14分30秒:date -s “2019-01-05 18:14:30”
touch
将文件的访问和修改时间更新为当前时间。
只会在文件不存在时才会创建,如果文件已经存在它会更新时间戳但不会改变文件的内容。
chmod
改变文件的权限,控制文件如何被他人所调用。
root@tecmint:~# chmod 777 abc.sh
chown
改变文件拥有者和所在用户组
Linux/Unix 是多人多工操作系统,所有的文件皆有拥有者。
这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的文件拥有者,也没有权限可以自己的文件拥有者改设为别人。
linux的文件调用权限分为三级 : 文件拥有者、群组、其他。
root@tecmint:~# ls -l
drwxr-xr-x 3 server root 4096 May 10 11:14 Binar //目录Binar属于用户server和用户组root
将文件file1.txt的拥有者设为 runoob 群体的使用者 runoobgroup
chown runoob:runoobgroup file1.txt
将目前目录下的所有文件与子目录的拥有者皆设为runoob,群体的使用者runoobgroup
chown -R runoob:runoobgroup *
echo
回显 (类似于printf)
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
name=yang;
echo $name //yang
tar
-c:建立压缩档案 -x:解压 -t:查看内容
-r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件
这五个是独立的命令,压缩解压要用到其中一个
下面的参数是根据需要在压缩或解压档案时可选的
-z:有gzip属性 -j:有bz2属性 -Z:有compress属性
-v:显示所有过程 -O:将文件解开到标准输出
参数-f是必须的(使用档案名字),是最后一个参数,后面只能接档案名
解压tar包时:不加-C只能在当前目录下保存生成的文件(或目录)
-C指定生成目录(目录必须存在) tar -zxvf uboot_q.tar.gz -C 123
tar -zcvf xxx.tar.gz test/* //压缩成tar包
tar -zxvf xxx.tar.gz ./ //解压tar包
su
switch user切换用户
cp scp
cp –r test/ newtest:将当前目录test/下的所有文件复制到新目录newtest下
scp:有Security的文件copy,基于ssh登录
1.把当前一个文件copy到远程另外一台主机:scp ./bess_init.c [email protected]:/home/yjj/
2.把文件从远程主机copy到当前主机:scp [email protected]:/home/lzw/Workspace/*.c ./bess
scp -r [email protected]:/home/lzw/Workspace/freertos_for_R4 ./freertos_for_R4
sudo scp –r [email protected]:/mnt/serverRoute/navi/lib/debug/libhybrid.so ./
shutdown
shutdown -h now 立刻关机
alias
alias:显示当前设置的所有别名
alias ll:显示别名ll的定义
alias cdPublic=‘cd /home/yang/Public’:设置别名cdPublic
nohup
no hang up,不挂断地运行命令。
&:在后台运行
nohup command &
1.检测TCP/IP协议和网卡功能是否正常ping localhost或ping 127.0.0.1,
如果有reply from**,就证明本机网络没问题。
如果看到有timeout出现,就证明网络不通或网络有问题
2.ping对方地址,获取对方主机IP ping www.baidu.com返回的是:115.239.211.112
不带参数的ifconfig命令可以显示当前启动的网络接口
配置网卡的IP地址:ifconfig eth0 192.168.0.1 netmask 255.255.255.0
改网卡的MAC地址:ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx
hw: hardware 硬件 / ether: ethernet以太网 / eth0,eth1,eth2: 网卡一,网卡二,网卡三
在重启后依旧生效则需在/etc/network/interfaces中加入此命令
网卡eth0关闭 # ifconfig eth0 down
网卡eth0启用 # ifconfig eth0 up
ssh
远程服务器
ssh username@ipaddress ssh [email protected]
nm
names 列出文件中的函数和全局变量等(目标文件和可执行文件)
netstat
查看端口使用
curl
CommandLine URL,利用URL语法在命令行下工作的文件传输工具,能从服务器下载数据,也能往服务器上发送数据,支持多种协议。
-H:指定头部类型
-b:用来向服务器发送 Cookie。curl -b 'foo=bar' https://google.com
-d(data):http post方式传送数据。
-c:将服务器设置的 Cookie 写入一个文件。curl -c cookies.txt https://www.google.com
-F:用来向服务器上传二进制文件。curl -F '[email protected]' https://google.com/profile
-o:将服务器的回应保存成文件,同于wget命令。curl -o example.html https://www.example.com
-v:输出通信的整个过程,用于调试。curl -v https://www.example.com
curl “https://oapi.dingtalk.com/robot/send?access_token=57d7b05c0689dfe55fe52c8aee9c245b5fffa01dd2d8c62ea0906ed8e5fbc655” -H “Content-Type: application/json” -d "{“msgtype”: “text”, “text”: {“content”: "123 go “}}”
输出重定向 >
如果文件存在, 则原来的内容被清空, 不存在则创建文件输出重定向 >>
输出追加到文件中, 如果文件存在, 追加到末尾, 不存在则创建文件
- 把标准输出(非错误非警告)重定向到一个新文件中。此时没有改变2=stderr的输出方式(还是屏幕),
所以如果有错误信息还是可以在屏幕上看到
command > filename 等同于command 1> filename- 只需要把make输出中的错误(及警告)信息重定向到文件中: command 2> filename
- 把正常输出信息和错误信息输出到分别的文件中,可以用:
make xxx 1> build_output_normal.txt 2>build_output_error.txt
即联合使用了1和2,正常信息和错误信息,都输出到对应文件中- 把标准输出和标准错误一起重定向到一个文件中: command > filename 2>&1
其中的2>&1表示错误信息输出到&1中,而&1指的是前面的那个文件filename
command < file1 > file2 命令以file1文件作为标准输入以file2文件作为标准输出
command < filename 把command命令以filename文件作为标准输入
command << delimiter 从标准输入中读入,直至遇到delimiter分界符
command <&m 把文件描述符m作为标准输入
command >&m 把标准输出重定向到文件描述符m中
所有的信息都输出到同一个文件中make > build_output_all.txt 2>&1
cat
1.一次显示整个文件 cat filename
2.从键盘创建一个文件 cat > filename
3.将几个文件合并为一个文件cat file1 file2 > file
cat /etc/issue 查看系统版本信息: CentOS release 6.9
cat /proc/version正在运行的内核版本:Linux version 2.6.32
tail
用于查看文件的内容。
tail -f filename 把文件尾部(10行)的内容显示屏幕上并不断刷新,文件有更新就显示到屏幕
tailf = tail -f
tailf /home/admin/hybrid-rtc/logs/app/hybrid-rtc-hybrid-rtc.log
source
设置环境变量,通过文件(命令列)设置环境变量时用source 命令。
source在当前bash环境下执行命令,scripts是启动一个子shell来执行命令。
这样如果把设置环境变量(或alias)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH
grep
Globally search a Regular Expression and Print,一种强大的文本搜索工具,它能使用正则表达式搜索文本并把匹配的行打印出来。
命令选项:
-?同时显示匹配上下问的?行
-b 在打印匹配行前面打印该行所在的块号码
-c --count只打印匹配的总行数,不显示匹配的内容
-n --line-number 在匹配的行前面打印行号
-s 不显示文件不存在或无法读取文件的错误信息
-v 反检索,只显示不匹配的行
-r 递归读取目录下的所有文件,包括子目录
-V 版本信息
-i 忽略大小写
在a.c b.c文件中查找匹配到"test"的行
grep ‘test’ a.c b.c
当前目录下递归查找匹配到"test"的行
grep ‘test’ -r ./
path: find命令所查找的目录路径 (. 表示当前目录;/ 表示系统根目录)
-print: find命令将匹配的文件输出到标准输出
-exec: find命令对匹配的文件执行该参数所给出的shell命令
相应命令的形式为’command’ {} ; 注意{}和;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令。
在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
-options选项:
-name 按照文件名查找
-perm 按照文件权限来查找文件
-user 按照文件属主来查找文件
-group 按照文件所属的组来查找文件
-type 查找某一类型文件b-块设备文件d-目录c-字符设备文件p-管道文件l -符号链接文件f-普通文件
-size n[c]:查找文件长度为n块的文件,带有c时表示文件长度以字节计
在当前目录下递归查找以".log"结尾的普通文件
find . -type f -name “*.log”
在当前目录下递归查找大于1K的文件
find . -size +1000c -print
在当前目录下递归查找文件大小为0的文件,然后删除查找的文件
find ./ -size 0 -exec rm {} ;
查找/opt/soft/test/目录下权限为 777的文件
find /opt/soft/test/ -perm 777
tree [-aACdDfFginNpqstux][-I <范本样式>][-P <范本样式>][目录…]
-a 显示所有文件和目录
-C 在文件和目录清单加上色彩,便于区分各种类型
-d 只显示目录名称
-L 显示深度 tree -L 2
-D 列出文件或目录的更改时间
-f 在每个文件或目录之前,显示完整的相对路径名称
-g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码
-N 直接列出文件和目录名称,包括控制字符
-s 列出文件或目录大小。
expr
一个手工命令行计数器,用于UNIX下求表达式变量的值,一般用于整数值也可用于字符串
1、计算字串长度
expr length “this is a test” 14
2、抓取字串
expr substr “this is a test” 3 5 is is
3、抓取第一个字符数字串出现的位置
expr index “sarasara” a 2
4、整数运算
expr 14 % 9 5
expr 30 * 3 90
(使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义)
seq
产生从某个数到另外一个数之间的所有整数 #seq 1 10 //1 2 3 4 5 6 7 8 9 10
split
将大文件分割成数个较小的文件,在默认情况下将按照每1000行切割成一个小文件
split [–help][–version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]
-<行数> : 指定每多少行切成一个小文件
-b<字节> : 指定每多少字节切成一个小文件
-C<字节> : 与参数"-b"相似,但是在切割时将尽量维持每行的完整性
–help : 在线帮助
–version : 显示版本信息
[输出文件名] : 设置切割后文件的前置文件名, split会自动在前置文件名后再加上编号
$split -6 README #将README文件每六行分割成一个文件
dos2unix
Unix系统里,每行结尾只有<换行>,即"/n"
Windows系统里面,每行结尾是<换行><回车>,即"/n/r"
回车,回到当前行的行首,而不会换到下一行;
换行,换到当前位置的下一行,而不会回到行首。
xxd hexdump od
hexdump -C input.txt
查看十六进制、二进制
To convert a binary data file to a C include source file
xxd -i -c 4
i:输出为c包含文件的风格,数组方式存在
c:每行输出4个
To convert a hex text file to a binary file:
xxd -r -p SetParameterMicroCode_0318_Context.txt > context.bin
mount
挂载Linux系统外的文件 umount 卸除目前挂在Linux目录中的文件系统
mount 命令时不加任何参数,就会输出系统挂载的所有文件系统
mount /dev/hda1 /mnt #将 /dev/hda1 挂在 /mnt 之下
umount -v /dev/sda1#通过设备名卸载 umount /mnt/#通过挂载点卸载
mount / -o rw,remount #将根分区重新挂载为读写状态
fdisk
创建和维护分区表。
fdisk -l:显示当前分区情况
mkfs
make filesysytem:在特定的分区建立Linux文件系统
top
性能分析工具。实时显示系统中各个进程的资源占用状况,默认5秒刷新一下进程列表,类似于Windows的任务管理器。
du disk usage
显示磁盘空间使用情况。逐级进入指定目录的每一个子目录,并显示该目录占用文件系统数据块的情况(默认当前目录)
du -h --max-depth=1 //深度一层
root@tech163:/home/htmlfile# du –h //查看当前目录以及子目录的大小
16K ./test
60K ./bbb
84K
df
disk free,查看磁盘使用情况。
df -h:查看磁盘空间(-h
易读,大小会是K、M、G
)
free
用于显示内存状态。
-b:Byte
-k:KB
-m:MB
last
show listing of last logged in users,用来列出目前与过去登录系统的用户相关信息
export
用于设置或显示环境变量
export -p //列出当前的环境变量值
添加环境变量,临时保存(重启系统后失效)
export PATH=/usr/local/DS-5_v5.22.0/sw/ARMCompiler5.05u2/bin: P A T H e x p o r t L D L I B R A R Y P A T H = / o p t / A c t i v e P / l i b : PATH export LD_LIBRARY_PATH=/opt/ActiveP/lib: PATHexportLDLIBRARYPATH=/opt/ActiveP/lib:LD_LIBRARY_PATH //添加动态库的查找路径
环境变量保存的文件:/home/yang/.bashrc
kill
-l 打印信号编号,若不加信号的编号参数,则列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户,kill某个用户的所有进程
kill -l 查看所有信号1)SIGHUP 2)SIGINT 3)SIGQUIT 4)SIGILL 5)SIGTRAP … …
service
控制系统服务。可以用来启动、停止、重新启动和关闭系统服务,并可以显示所有系统服务的当前状态。
service --status-all | grep httpd => service httpd status //查看指定服务的状态
ps
Process Status,列出系统中当前运行的那些进程。
用法:
ps aux | grep supervisord //查看supervisord进程详细信息
查找进程名所在目录:
1.通过ps aux | grep supervisord 得到进程的pid 为12597
2.通过ll /proc/12597
cwd符号链接的是进程运行目录 / exe符号链接的是执行程序的绝对路径
cmdline就是程序运行时输入的命令行命令 / environ记录了进程运行时的环境变量
fd目录下是进程打开或使用的文件的符号连接
pidof
用于查找指定名称的进程的进程号/id号。
参数 : 进程名称(指定要查找的进程名称)
用法 pidof nginx —> 13312 5371
sync
将有关文件系统的存储器常驻信息送入物理介质内。突然断电前,需要去执行sync命令
管道 |
把前面一个指令传出的正确输出信息(standard output 的信息)(对于stdandard error信息没有直接处理能力)传递给下一个接收命令,作为标准的输入(standard input)
cat logcat.log | grep -n ‘Activity’
yum
: RedHat / Fedora软件包管理器,用于rpm包
apt-get
: Ubuntu软件包管理器,用于deb包
安装 : sudo apt-get install …
卸载 : sudo apt-get remove …
更新 : sudo apt-get update …
源码安装3个步骤:配置(configure)、编译(make)、安装(make install)
#Configure是一个可执行脚本,./configure –help输出详细的选项列表。
#-–prefix选项是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr/local/bin
#默认库文件放在/usr/local/lib,配置文件放在/usr/local/etc,其它资源文件放在/usr/local/share
#./configure --prefix=/usr/local/test 把所有资源文件放在/usr/local/test,方便卸载或移植
apt-cache
apt-cache depends 显示软件包的依赖性关系
ubuntu:~$ apt-cache depends build-essential
build-essential
|Depends: libc6-dev
Depends:
libc6-dev
Depends: gcc
Depends: g++
Depends: make
make-guile
sudo apt-get install build-essential
# build-essential是c/c++语言的开发包,包含了gcc make gdb和libc函数库等
#安装 gdebi(用于安装手动下载包的GUI程序、可以命令行模式运行)
sudo apt install gdebi
#安装 Beyond Compare
1. wget http://www.scootersoftware.com/bcompare-4.3.4.24657_amd64.deb
2. sudo gdebi ./bcompare-4.2.9.23626_amd64.deb
破解
3. cd /usr/lib/beyondcompare/
4. sudo sed -i "s/keexjEP3t4Mue23hrnuPtY4TdcsqNiJL-5174TsUdLmJSIXKfG2NGPwBL6vnRPddT7tH29qpkneX63DO9ECSPE9rzY1zhThHERg8lHM9IBFT+rVuiY823aQJuqzxCKIE1bcDqM4wgW01FH6oCBP1G4ub01xmb4BGSUG6ZrjxWHJyNLyIlGvOhoY2HAYzEtzYGwxFZn2JZ66o4RONkXjX0DF9EzsdUef3UAS+JQ+fCYReLawdjEe6tXCv88GKaaPKWxCeaUL9PejICQgRQOLGOZtZQkLgAelrOtehxz5ANOOqCaJgy2mJLQVLM5SJ9Dli909c5ybvEhVmIC0dc9dWH+/N9KmiLVlKMU7RJqnE+WXEEPI1SgglmfmLc1yVH7dqBb9ehOoKG9UE+HAE1YvH1XX2XVGeEqYUY-Tsk7YBTz0WpSpoYyPgx6Iki5KLtQ5G-aKP9eysnkuOAkrvHU8bLbGtZteGwJarev03PhfCioJL4OSqsmQGEvDbHFEbNl1qJtdwEriR+VNZts9vNNLk7UGfeNwIiqpxjk4Mn09nmSd8FhM4ifvcaIbNCRoMPGl6KU12iseSe+w+1kFsLhX+OhQM8WXcWV10cGqBzQE9OqOLUcg9n0krrR3KrohstS9smTwEx9olyLYppvC0p5i7dAx2deWvM1ZxKNs0BvcXGukR+/g" BCompare
5. 打开Beyond Conpare,弹出Trial Mode Error!
6. 输入以下秘钥
--- BEGIN LICENSE KEY ---
GXN1eh9FbDiX1ACdd7XKMV7hL7x0ClBJLUJ-zFfKofjaj2yxE53xauIfkqZ8FoLpcZ0Ux6McTyNmODDSvSIHLYhg1QkTxjCeSCk6ARz0ABJcnUmd3dZYJNWFyJun14rmGByRnVPL49QH+Rs0kjRGKCB-cb8IT4Gf0Ue9WMQ1A6t31MO9jmjoYUeoUmbeAQSofvuK8GN1rLRv7WXfUJ0uyvYlGLqzq1ZoJAJDyo0Kdr4ThF-IXcv2cxVyWVW1SaMq8GFosDEGThnY7C-SgNXW30jqAOgiRjKKRX9RuNeDMFqgP2cuf0NMvyMrMScnM1ZyiAaJJtzbxqN5hZOMClUTE+++
--- END LICENSE KEY -----
#安装搜狗输入法
wget "http://cdn2.ime.sogou.com/dl/index/1524572264/sogoupinyin_2.2.0.0108_amd64.deb"
sudo gdebi ./sogoupinyin_2.2.0.0108_amd64.deb
#系统配置如下图
一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk命令格式:
awk '{pattern + action}' {文件}
pattern 表示 AWK 在数据中查找的内容
action 是在找到匹配内容时所执行的一系列命令。
花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。
1、awk "样式" 文件:把符合样式的数据行显示出来
2、awk '{操作}' 文件:对每一行都执行{ } 中的操作
3、awk '样式 {操作}' 文件:对符合样式的数据行执行{ }中的操作
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file
awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的
cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1,$7} END {print "blue,/bin/nosh"}'
awk '/sun/' 文件:显示含有“sun”的所有行
awk '{ print $2,$3 }' 文件:打印每行的第二个和第三个字段
awk 'END{ print NR }' 文件:统计文件的行数
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作
sed命令格式:
sed [-nefri(选项)] ‘command’ 文件
常用选项:
-n∶使用安静(silent)模式。在一般sed的用法中,所有来自STDIN的资料一般都会被列出到终端上。但如果加上-n参数,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的文件内容,而不是输出到终端。不必使用管道命令或数据流重导向(危险动作)
’$’ :代表最后一行
锚定行的开始 如:/^sed/匹配所有以sed开头的行
锚定行的结束 如:/sed$/匹配所有以sed结尾的行
,(逗号):选定行的范围
执行.sh脚本时报错: "start.sh /bin/bash^M: 坏的解释器:没有那个文件或目录”
原因:.sh文件是从windows拷贝过来的,多了\r
解决方法:sed -i 's/\r$//' start.sh
sed -i '$d' microcode.inc.c:删除文件microcode.inc.c最后一行
sed -n '2,/test/p' 文件:打印从第二行开始到第一个包含以test开始的行之间的所有行
常用命令:
a∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
i∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作
# sed -n '1p' ab #显示第一行
d:删除命令
sed '2d' 文件:删除把第二行 剩下的显示出来
sed '1, 4d' 文件:删除第一行到第四行 剩下的显示出来
sed '2, $d' 文件:删除第二行到末行 剩下的显示出来
sed '$d' 文件:删除末行 剩下的显示出来
sed '/test/'d 文件:删除所有包含test的行
s:替换命令
sed 's/test/mytest/g' 文件:在整行范围内把test替换为mytest。
如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
sed -n 's/test/mytest/p' 文件:(-n)选项和p标志一起使用表示只打印那些发生替换的行
也就是,如果某一行开头的test被替换成mytest,就打印它
sed 's/192.168.0.1/&localhost/' 文件:&符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost
sed -n 's/\(love\)able/\1rs/p' 文件:love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来
c:取代命令
sed -i '1 c static const u8_t _microcode[4096] = {' microcode.inc.c
e:多条执行命令
sed -e '1,5d' -e 's/test/check/' 文件:(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果
w:写入文件命令
sed -n '/test/w file' example-----在example中所有包含test的行都被写入file里
sed '/la/d' 文件: 把含la的行删除 剩下的显示出来 ps: /...../搜索
sed -n '/la/p' 文件:把含la的行显示出来
sed -n 's/ls/Oo/p' 文件:把数据行中的la转换成Oo
1命令 2系统调用 3库函数
用法:man 3 open
Linux的man手册共有以下几个章节:
1、Standard commands (标准命令)
2、System calls (系统调用)
3、Library functions (库函数)
4、Special devices (设备说明)
5、File formats (文件格式)
6、Games and toys (游戏和娱乐)
7、Miscellaneous (杂项)
8、Administrative Commands (管理员命令)
确定文件或文件夹的访问权限
//access的实现
//确定文件或文件夹的访问权限
//检查某个文件的存取方式,比如说是只读方式、只写方式等
//如果指定的存取方式有效,则函数返回0,否则函数返回-1
#include
#include
int main(int argc, char *argv[])
{
int fd, fd2;
fd = open(...);
fd2 = fd;
if(access(argv[1], R_OK) == 0)
printf("%s is readable\n", argv[1]);
if(access(argv[1], W_OK) == 0)
printf("%s is writable\n", argv[1]);
if(access(argv[1], X_OK) == 0)
printf("%s is executable\n", argv[1]);
return 0;
}
//实现ls命令的功能,显示当时目录下的文件
#include
#include
#include
void err_sys(const char *str){
perror(str);
exit(1);
}
int main(void){
DIR *dp;
struct dirent *p;
dp = opendir(".");
if(dp == NULL)
err_sys("opendir error");
while(1){
p = readdir(dp);
if(p == NULL)
break;
if(p->d_name[0] != '.')
printf("%s\n", p->d_name);
}
closedir(dp);
return 0;
}
//lstat 获取文件相关的信息
#include
#include
int main(int argc, char *argv[]){
struct stat buf;
lstat(argv[1], &buf);
if(S_ISREG(buf.st_mode))
printf("regular file\n");
else if(S_ISDIR(buf.st_mode))
printf("dir file\n");
else if(S_ISLNK(buf.st_mode))
printf("symbol link file\n");
else
printf("other...\n");
return 0;
}
//cp的实现
// ./mycp src dst
#include
#include
#include
#define NEW_PERM 0644
void err_sys(const char *str){
perror(str);
exit(1);
}
void err_usr(const char *str){
fputs(str, stderr);
exit(2);
}
int main(int argc, char *argv[]){
int src, dst;
char buf[1024]; int n;
if(argc != 3)
err_usr("usage: ./mycp src dst\n");
src = open(argv[1], O_RDONLY);
if(src == -1)
err_sys("open error");
dst = open(argv[2],
O_WRONLY | O_CREAT | O_TRUNC, NEW_PERM);
if(dst == -1)
err_sys("open error");
while(n = read(src, buf, 1024))
write(dst, buf, n);
close(src);
close(dst);
return 0;
}