从今天起,周期更新嵌入式开发技术文档。学习嵌入式必须持之以恒,绝不是小说里的大侠习武,内功深厚,一看即成!尤其是张无忌、段誉、虚竹,那是明显的开挂行为。社会上三教九流的那些速成班也都是为金钱而奴役的,并没有多少是授人以渔。要学好嵌入式是必须先扎实计算机语言,比如C就是必须的,因为底层驱动无论是Linux还是uc/OS或者裸跑,都是离不开他的,当然能懂点汇编就更好了。关于作者,也并不是什么高手,只是一个嵌入式技术爱好者,对UC/OS和Linux略懂一二,现任职台湾某IC设计公司应用工程师,负责公司产品驱动以及应用的开发,对视频模块以及音频模块有较深理解。大家有什么技术问题欢迎贴出来一起探讨。
第一篇将贴出我整理的一些Linux常用命令,这个是嵌入式开发基础的基础,这是特别篇,从第二篇开始将贴出本人写的一些小程序,从程序分析一些驱动开发原理以及应用的多线程。因为本人不是一个理论爱好者,虽然喜欢写文章,但是不喜欢玩纸上谈兵,要当一名将军,必须到战场上去,实战才能成就韩信,徐达,只搞理论最后不是赵括就是李景隆。
1.添加用户:useradd
格式:useradd [选项] 用户名
例:
useradd dhtzlfx
创建dhtzlfx用户
选项诠释:
-m:
在home目录下创建用户
例:useradd -m dhtzlfx
在home 目录下创建dhtzlfx用户
-d:
在指定目录下创建用户
例:useradd –d /home/download/dhtzlfx
在download目录中创建dhtzlfx用户
2.创建用户密码:passwd
格式:passwd 用户名
为新建的用户创建密码
3.删除用户:
格式:userdel 用户名
删除用户
4.切换用户:su
格式:su [选项] 用户名
选项诠释:
-f ,–fast
不必读启动文件(如 csh.cshrc等),仅用于csh或tcsh两种Shell。
-l ,–login
加了这个参数之后,就好像是重新登陆一样,大部分环境变量(例如HOME、SHELL和USER等)都是以该使用者(USER)为主,并且工作目录也会改变。如果没有指定USER,缺省情况是root。
-m, -p,–preserve-environment
执行su时不改变环境变数。
-c command
变更账号为USER的使用者,并执行指令(command)后再变回原来使用者。
例:
su –c ls dhtzlfx
变更帐号为 dhtzlfx 并在执行 ls 指令后退出变回原使用者。
su [用户名]
a>在root用户下,输入 su 普通用户.则切换至普通用户, 从root切换到变通用户不需要密码
b>在普通用户下,输入 su [用户名]
提示 password:
输入用户的PASSWORD, 则切换至该用户
5.关机:shutdown now
格式:shutdown now
立刻关机
6.拷贝: cp
格式:cp [选项] 源文件或目录 目标文件或目录
该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中
例:1. cp file1 dir1
将文档 file1 复制到目录 dir1 下,文件名仍为 file1
cp /tmp/file1
目录 /tmp 下的文档 file1复制到现行目录下,档名仍为 file1.
cp /tmp/file1 file2
将目录 /tmp 下的文档 file1复制到现行目录下,档名变为为file2
选项含义:
- a
该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。
- d
拷贝时保留链接。
- f
删除已经存在的目标文件而不提示。
- i
和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。
例:cp -i file1 file2
将文档 file1 复制成 file2 . –i为提示确认。
- p
此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。
- r
若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。
例:cp -r dir1 dir2
(recursive copy) 复制整个目录.若目录 dir2存在,则将目录dir1,及其所有文档和子目录,复制到目录 dir2下,新目录名称为dir1.若目录dir2不存在,则将dir1,及其所有文档和子目录,复制为目录 dir2
- l
不作拷贝,只是链接文件。
需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖
7.移动、更名: mv
格式:mv [选项] 源文件或目录 目标文件或目录
例:
1. mv /home/test /home/test1
将/home目录下的test文件更名为test1
2.mv /home/dir1 /tmp/
将/home目录下dir1目录移动(剪切)到/tmp目录下
选项的含义:
- i
交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答y或n,这样可以避免误覆盖文件。
- f
禁止交互操作。在mv操作要覆盖某已有的目标文件时不给任何指示,指定此选项后,i选项将不再起作用。
命令格式:mv a b
总结起来有以下几种情况:
a是文件名,b不存在 a改名为b。
a是文件名,b是文件名 a改名为b,原b被覆盖。
a是文件名,b是目录名,b下没有名为a的文件或目录 a移动到b目录下。
a是文件名,b是目录名,b下没有名为a的文件 a移动到b目录下,覆盖原b/a。
a是文件名,b是目录名,b下已有名为a的目录 cannotoverwrite directory‘b/a' with non-directory(不能用非目录覆盖’b/a‘)
a是目录名,b不存在 a改名为b
a是目录名,b是文件名 cannot overwrite non-directory 'b' with directory 'a'(不能使用目录覆盖非目录'b' )
a是目录名,b是目录名,b下没有名为a的文件或非空目录 a移动到b目录下成为子目录。
8.删除: rm
格式:rm [选项] 文件或目录
例:
1. rm /home/test
删除/home目录下的test文件
2.rm –r /home/dir
删除/home目录下的dir目录
选项含义:
- f
忽略不存在的文件,从不给出提示。
- r
指示rm将参数中列出的全部目录和子目录均递归地删除。
- i
进行交互式删除。
9.创建目录: mkdir
格式:mkdir [选项] 目录名
例:
1. mkdir /home/workdir
在/home目录下创建workdir目录
2. mkdir –p /home/dir1/dir2
创建/home/dir1/dir2目录,如果dir1不存在,先创建dir1
选项含义:
-m
用于对新建目录设置存取权限,也可以用 chmod命令进行设置。
-p
需要时创建上层文件夹(或目录),如果文件夹(或目录)已经存在,则不视为错误。
10.改变工作目录: cd
格式:cd 目录名
例:
cd /home/
进入/home目录
11.查看当前路径: pwd
格式:pwd
范例:
1. pwd
显示当前工作目录的绝对路径
12.查看目录: ls
格式:ls [选项] [目录或文件]
例:
1. ls /home
显示/home目录下的文件与目录(不包含隐藏文件)
2. ls –a /home
显示/home目录下的所有文件与目录(包含隐藏文件)
3. ls –l /home
显示/home目录下的文件与目录的详细信息
4. ls –c /home
显示/home目录下的文件与目录,按修改时间排序
选项参数:
-a
用于显示所有文件和子目录(保罗点文件)。
-l
除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来。
-r
将目录的内容清单以英文字母顺序的逆序显示。
-t
按文件修改时间进行排序,而不是按文件名进行排序。
-A
同-a,但不列出“.”(表示当前目录)和“..”(表示当前目录的父目录)。
-F
在列出的文件名和目录名后添加标志。例如,在可执行文件后添加“*”,在目录名后添加“/”以区分不同的类型。
-R
如果目标目录及其子目录中有文件,就列出所有的文件。
-Cx
按行跨页对文件名进行排序。
-CF
按列列出目录中的文件名,并在文件名后附加一个字符以区分目录和文件的类型:目录文件名之后附加一个斜线(/)。可执行文件名之后附加一个星号(*)。符号链接文件名之后附加一个@符号。普通文件名之后不附加任何字符。
-CR
以分栏格式显示目标目录及其各级子目录中的所有文件(目录文件都可以称为文件),也称为递归列表。
13.打包与压缩: tar
格式:tar [选项] 目录或文件
例:
1.tar cvf tmp.tar /home/tmp
将/home/tmp目录下的所有文件和目录打包成一个
tmp.tar文件
2.tar xvf tmp.tar
将打包文件tmp.tar在当前目录下解开
3.tar cvzf tmp.tar.gz /home/tmp
将/home/tmp目录下的所有文件和目录打包并压
缩成一个tmp.tar.gz文件
4.tar xvzf tmp.tar.gz
将打包压缩文件tmp.tar.gz在当前目录下解开
选项参数:
-c
建立一个压缩文件的参数指令(create的意思);
-x
解开一个压缩文件的参数指令!
-t
查看 tarfile 里面的文件!
特别注意,在参数的下达中, c/x/t仅能存在一个!不可同时存在!因为不可能同时压缩与解压缩。
-z
是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j
是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v
压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f
使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
『tar -zcvPf tfile sfile』才对喔!
-p
使用原文件的原来属性(属性不会依据使用者而变)
-P
可以使用绝对路径来压缩!
-N
比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
14.解压缩: unzip
格式:unzip [选项] 压缩文件名.zip
范例:
1.unzip tmp.zip
解压tmp.zip文件
15.改变访问权限: chmod
知识点:
linux文件权限:
例:
-rw-r--r-- 2 dhtzlfx dhtzlfx 483997 8月 17 15:34 sobsrc.Tgz
注意这里共有10个位置。第一个字符指定了文件类型,如果第一个字符是横线,表示是一个非目录的普通文件。如果是d,表示是一个目录。r代表只读,w代表写,x代表可执行,横线代表无该项权限。
格式:chmod [who][+ | - | =][mode] 文件名
参数:
who:
u 表示文件的所有者。
g 表示与文件所有者同组的用户。
o 表示“其他用户”。
a 表示“所有用户”。它是系统默认值。
+ 添加某个权限
- 取消某个权限
= 赋予给定权限
mode:
r 可读
w 可写
x 可执行
例:
chmod g+w cwork.c
与文件所有者同组的用户添加可写权限
mode所表示的权限可使用下述字母
(数字)的任意组合:
r 可读(4)
w 可写(2)
x 可执行(1)
例:
chmod 764 cwork.c
第一种用户:7:4+2+1
第二种用户:6:4+2
第三种用户:4:4
16.查看磁盘使用情况:df
格式:df [选项]
范例:
df –k
以KB为单位显示磁盘使用情况
选项参数:
-a
显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。
-k
以k字节为单位显示。
-i
显示i节点信息,而不是磁盘块。
-t
显示各指定类型的文件系统的磁盘空间使用情况。
-x
列出不是某一指定类型文件系统的磁盘空间使用情况(与t选项相反)。
-T
显示文件系统类型。
17.查看目录大小:du
格式:du [选项] 目录
范例:
du –b ipc
以字节为单位显示ipc这个目录的大小
选项参数:
-a或-all
为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况。
-b或-bytes
显示目录或文件大小时,以byte为单位。
-c或–total
除了显示目录或文件的大小外,同时也显示所有目录或文件的总和。
-D或–dereference-args
显示指定符号连接的源文件大小。
-h或–human-readable
以K,M,G为单位,提高信息的可读性。
-H或–si
与-h参数相同,但是K,M,G是以1000为换算单位,而不是以1024为换算单位。
-k或–kilobytes
以1024 bytes为单位。
-l或–count-links
重复计算硬件连接的文件。
-L<符号连接>或–dereference<符号连接>
显示选项中所指定符号连接的源文件大小。
-m或–megabytes
以1MB为单位。
-s或–summarize
仅显示总计,即当前目录的大小。
-S或–separate-dirs
显示每个目录的大小时,并不含其子目录的大小。
-x或–one-file-xystem
以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-X<文件>或–exclude-from=<文件>
在<文件>指定目录或文件。
–exclude=<目录或文件>
略过指定的目录或文件。
–max-depth=<目录层数>
超过指定层数的目录后,予以忽略。
–help 显示帮助。
–version 显示版本信息。
linux中的du命令使用示例:
1> 要显示一个目录树及其每个子树的磁盘使用情况
du /home/linux
这在/home/linux目录及其每个子目录中显示了磁盘块数。
2> 要通过以1024字节为单位显示一个目录树及其每个子树的磁盘使用情况
du -k /home/linux
这在/home/linux目录及其每个子目录中显示了 1024字节磁盘块数。
3> 以MB为单位显示一个目录树及其每个子树的磁盘使用情况
du -m /home/linux
这在/home/linux目录及其每个子目录中显示了 MB磁盘块数。
4> 以GB为单位显示一个目录树及其每个子树的磁盘使用情况
du -g /home/linux
这在/home/linux目录及其每个子目录中显示了 GB磁盘块数。
5>查看当前目录下所有目录以及子目录的大小:
du -h .
“.”代表当前目录下。也可以换成一个明确的路径
-h表示用K、M、G的人性化形式显示
6>查看当前目录下user目录的大小,并不想看其他目录以及其子目录:
du -sh user
-s表示总结的意思,即只列出一个总结的值
du -h –max-depth=0 user
–max-depth=n表示只深入到第n层目录,此处设置为0,即表示不深入到子目录。
7>列出user目录及其子目录下所有目录和文件的大小:
du -ah user
-a表示包括目录和文件
8>列出当前目录中的目录名不包括xyz字符串的目录的大小:
du -h –exclude=’*xyz*’
9>想在一个屏幕下列出更多的关于user目录及子目录大小的信息:
du -0h user
-0(杠零)表示每列出一个目录的信息,不换行,而是直接输出下一个目录的信息。
18.网络配置:ifconfig
格式:ifconfig [选项] [网络接口]
范例:
1. ifconfig eth0 192.168.0.1
配置eth0这一网卡的ip地址为192.168.0.1
2. ifconfig eth0 down
暂停eth0这一网卡的工作
3. ifconfig eth0 up
恢复eth0这一网卡的工作
19.查看网络状态:netstat
格式:netstat [选项]
范例:
1. netstat -a
查看系统中所有的网络监听端口。
20.软件安装:rpm
格式:rpm [选项] [安装文件]
范例:
1. rpm -ivh tftp.rpm
安装名字为tftp的文件
2. rpm -qa
列出所有已安装rpm包
3. rpm –e name
卸载名字为name的rpm包
21.挂载:mount umount
mount
格式:mount [选项] 设备源 目标目录
范例:
mount /dev/cdrom /mnt
将光驱挂载到/mnt目录下
umount
格式:umount 目标目录
范例:
umount /mnt (对应mount例)
取消光驱在/mnt下的挂载
22.查找文件:find
格式:find 路径 -name ‘文件名’
范例:
1. find ./ -name ‘co*’
在当前目录及其子目录中寻找名为co开头的文件
2. find ./ -name ‘test’
在当前目录及其子目录中寻找名为test的文件
23.查找字符串:grep
格式:grep [选项] 字符串
范例:
1. grep “file”./ -rn
在当前目录及其子目录中,查找包含file字符串的文件
2. netstat –a | grep tftp
查看所有端口中用于tftp的端口
24.动态查看CPU的使用:top (ctrl+c退出)
格式:top
范例:
top
查看系统中的进程对cpu、内存等的占用情
况。
25.查看进程:ps
格式:ps [选项]
范例:
1.ps aux
查看系统中的所有进程
26.杀死进程:kill
格式:kill [选项] 进程号
范例:
1.kill –s SIGKILL 4096
杀死4096号进程
27.帮助:man (Q退出)
格式:man 命令名
范例:
1. man grep
查看grep命令的使用方法
2. man ping
查看ping命令的使用方法