文章目录
linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心。
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
用于复制文件或目录,不仅限于文件的复制,还包括重命名文件、递归复制目录等。
cp –r test/ newtest:将当前目录test/下的所有文件复制到新目录newtest下
scp
scp:有Security的文件copy,基于ssh登录
1.把当前一个文件copy到远程另外一台主机:scp ./bess_init.c yjj@10.100.151.95:/home/yjj/
2.把文件从远程主机copy到当前主机:scp yjj@10.100.151.95:/home/lzw/Workspace/*.c ./bess
scp -r yjj@10.100.151.240:/home/lzw/Workspace/freertos_for_R4 ./freertos_for_R4
sudo scp –r wb-yjj386927@10.101.73.6:/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 &
网络相关
ping
Packet Internet Groper 因特网包探索器
用来检查网络是否通畅或者网络连接速度的命令,通常用来测试与目标主机的连通性。
原理:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。
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
network interfaces configuring 用于显示或配置网络设备
不带参数的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 yjj@10.100.151.95
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 'file=@photo.png' 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 “}}”
wget
在Linux下开发的开放源代码的软件,后被移植到包括Windows在内的各个平台。
一个从网络上自动下载文件的工具,支持通过HTTP HTTPS FTP三个最常见的TCP/IP协议下载。
wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py
文件相关
重定向
输出重定向 >
如果文件存在, 则原来的内容被清空, 不存在则创建文件
输出重定向 >>
输出追加到文件中, 如果文件存在, 追加到末尾, 不存在则创建文件
在执行命令时,可以指定命令的标准输入输出和错误,要实现这一点就需要使用文件重定向
对标准错误进行重定向时必须使用文件描述符,但是对于标准输入和输出来说这不是必需的
- 把标准输出(非错误非警告)重定向到一个新文件中。此时没有改变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 ./
find
在目录结构中搜索文件,并执行指定的操作。
find path -options [-print -exec -ok …]
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
用于以树状图列出目录的内容。
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 <input_file_name> > <output_file_name>: in二进制文件
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 … …
kill -9 324 // 杀死进程324
service
控制系统服务。可以用来启动、停止、重新启动和关闭系统服务,并可以显示所有系统服务的当前状态。
service --status-all | grep httpd => service httpd status //查看指定服务的状态
ps
Process Status,列出系统中当前运行的那些进程。
用法:
ps aux | grep supervisord //查看supervisord进程详细信息
-aux 参数用于显示进程的详细信息。
-ef 参数显示进程的树状结构,以父进程-子进程的形式展示
查找进程名所在目录:
1.通过ps aux | grep supervisord 得到进程的pid 为12597
2.通过ll /proc/12597
cwd符号链接的是进程运行目录 / exe符号链接的是执行程序的绝对路径
cmdline就是程序运行时输入的命令行命令 / environ记录了进程运行时的环境变量
fd目录下是进程打开或使用的文件的符号连接
进程状态(state)
S 休眠状态 sleeping
R 等待运行 runable
I 空闲状态 idle
Z 僵尸状态 zombie
T 跟踪状态 traced
僵尸状态用kill -9不能杀死进程时,杀死父进程。
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: <libc-dev>
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
#系统配置如下图
awk
一个强大的文本分析工具,相对于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命令格式:
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
man / . …
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 <stdio.h>
#include <unistd.h>
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 <stdio.h>
#include <stdlib.h>
#include <dirent.h>
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;
}