本文章是本人在学习Linux过程中积累的Linux相关指令的使用方法及其原理的介绍,在这里和大家分享一下。
一、Linux目录操作命令[ ~ ] 代表自己的Home目录
(1)显示目录文件 ls
--------------------------------------------------------------------------------------------------------------------------
ls 显示出当前目录下的文件
ls -a 显示出包含隐藏文件的所有文件
ls -t 按照文件最后修改时间显示文件
ls -F 显示出当前目录下的文件及其类型
ls -l 显示目录下所有文件的许可权、拥有者、文件大小、修改时间及名称
ls -lg 同上
ls -R 显示出该目录及其子目录下的文件
ls -hlp 获得更多帮助
(2)建新目录 mkdir
--------------------------------------------------------------------------------------------------------------------------
mkdir dir1 (新建一名为dir1的目录)
(3)删除目录 rmdir
--------------------------------------------------------------------------------------------------------------------------
rmdir dir1 删除目录dir1,但它必须是空目录,否则无法删除
rm -r dir1 删除目录dir1及其下所有文件及子目录
rm -rf dir1 不管是否空目录,统统删除,而且不给出提示,使用时要小心
(4) 改变工作目录位置 cd
--------------------------------------------------------------------------------------------------------------------------
cd 改变目录位置至用户login时的working directory
cd dir1 改变目录位置,至dir1目录
cd ~user 改变目录位置,至用户的working directory cd
.. 改变目录位置,至当前目录的上层目录
cd ../user 改变目录位置,至上一级目录下的user目录
cd /dir1/dir2 改变目录位置,至绝对路径(Full path)
cd - 回到进入当前目录前的上一个目录
(5)显示当前所在目录pwd
--------------------------------------------------------------------------------------------------------------------------
pwd
(6)查看目录大小du
--------------------------------------------------------------------------------------------------------------------------
du dir1 显示目录dir1及其子目录容量(以kb为单位)
du -s dir1 显示目录dir1的总容量
(7)显示环境变量
--------------------------------------------------------------------------------------------------------------------------
echo $HOME 显示家目录
echo $PATH 显示可执行文件搜索径
env 显示所有环境变量(可能很多,最好用"env | more","env |grep PATH"等)
(8)修改环境变量
--------------------------------------------------------------------------------------------------------------------------
export PATH=$PATH:/usr/local/bin
想知道export的具体用法,可以用shell的help命令:help export
二、系统询问与权限口令
(1)查看系统中的使用者 who
--------------------------------------------------------------------------------------------------------------------------
(2)查看username
--------------------------------------------------------------------------------------------------------------------------
who am I 查看自己的username
(3)改变自己的username的帐号与口令 su
--------------------------------------------------------------------------------------------------------------------------
su username
su username 输入帐号
password 输入密码
(4)检查用户所在组名称 groups
groups
--------------------------------------------------------------------------------------------------------------------------
三、I/O命令
(1)管道(pipe-line)
--------------------------------------------------------------------------------------------------------------------------
command1|command2 将command1的执行结果送到command2 作为输入
ls -R1|more 以分页方式列出当前目录文件及子目录名称
cat file1|more 以分页方式,列出file1的内容
(2)标准输入控制
--------------------------------------------------------------------------------------------------------------------------
command-line<file 将file作为command-line的输入
mail -s “mail test” user@iis.sinica.edu.tw<file1 文件file1当作信件的内容,subject 名称为mail test 送给收信人
(3)标准输出控制
--------------------------------------------------------------------------------------------------------------------------
command>filename 将command的执行结果送至指定的filename中
ls -l >list 将执行”ls -l” 的结果写入文件list中
command>!filename 若filename文件已存在,则强迫重写
command>&filename 将command执行所产生的任何信息写入
filename
command>>filename 将command 的执行结果,附加(append)到filename
command>>&filename 将command执行所产生的任何信息附加于filename中
四、其他常用命令
(1)命令在线帮助 man
--------------------------------------------------------------------------------------------------------------------------
man ls 查询ls这个指令的用法
(2)设定命令记录表长度 history
--------------------------------------------------------------------------------------------------------------------------
set history=n 定命令记录表长度为n(可记载执行过的前面n个命令)
history 查看命令记录表的内容
(3)显示说明 info
--------------------------------------------------------------------------------------------------------------------------
info gcc 查看gcc的说明,按上下箭头选定菜单,回车进入,"u"键返回上级菜单.
info 不加参数则进入最上一级菜单
五、文件操作
(1)查看文件(可以是二进制的)内容
--------------------------------------------------------------------------------------------------------------------------
cat
cat file1 以连续显示方式,查看文件file1的内容
cat file1|more 以分页方式查看文件的内容
(2)删除文件
--------------------------------------------------------------------------------------------------------------------------rm
rm file?
rm f*
rm filename
(3)复制文件 cp
--------------------------------------------------------------------------------------------------------------------------
cp file1 file2 将file1复制成file2
cp file1 dir1 将file1复制到目录dir1
cp /tmp/file1 将file1复制到当前目录
cp /tmp/file1 file2 将file1 复制到当前目录名为file2
cp –r dir1 dir2 (recursive copy)复制整个目录。
(4)移动或更改文件、目录名称mv
--------------------------------------------------------------------------------------------------------------------------
mv file1 file2 将文件file1,更名为file2
mv file1 dir1 将文件file1,移到目录dir1下
mv dir1 dir2 将目录dir1移动到目录dir2下
(5)比较文件(可以是二进制的)或目录的内容diff
--------------------------------------------------------------------------------------------------------------------------
diff file1 file2 比较file1与file2的不同处
diff -r dir1 dir2 比较dir1与dir2的不同处
(6)文件中字符串的查找 grep
--------------------------------------------------------------------------------------------------------------------------
grep string file 查找并列出串abc所在的整行文字
(7)文件或命令的路径
--------------------------------------------------------------------------------------------------------------------------寻找
whereis command 显示命令的路径
which command 显示路径及使用者所定义的别名
whatis command 显示命令的功能摘要
find search -path -name filename -print
搜寻指定路径下某文件的路径
locate filename 根据系统预先生成的文件/目录数据库(/var/lib/slocate/slocate.db)查找匹配的文件/目录,查找速
度很快,如果有刚进行的文件改变而系统未到执行定时更新数据库的时间,可以打入updatedb命令手动更
新.
(8)建立文件或目录的链接 ln
--------------------------------------------------------------------------------------------------------------------------
ln source target1 建立source文件(已存在)的硬链接,命名为target1
ln -s source target2 建立source文件的符号链接,命名为target2
(9)文件属性的设置 chmod
--------------------------------------------------------------------------------------------------------------------------
chmod [-R] mode name [-R]为递归处理,将指定目录下所有文件及子目录一并处理
mode为3-8位数字,是文件/目录读、写、执行允许权的缩写(r:read,数字代号为"4" w:write,数字代号为"2" x:execute,数字代号为"1")
chmod 755 dir1 将目录dir1设定成任何人皆有读取及执行的权利,但只有拥有者可作写修改。其中7=4+2+1,5=4+1
chmod 700 file1 将file1设为拥有者可以读、写和执行
chmod o+x file2 将file2,增加拥有者可执行的权利
chmod g+x file3 将file3,增加组使用者可执行的权利
chmod o-r file4 将file4,除去其它使用者可读取的权利
(10)改变文件或目录所有权 chown
--------------------------------------------------------------------------------------------------------------------------chown user file1 将文件file1改为user所有
chown .fox file1 将文件file1改为fox组所有
chown user.fox file1 将文件file1改为fox组的user所有
chown -R user dir1 将目录dir1及其下所有文件和子目录,改为user 所有
(11)改变文件或目录的组拥有权 chgrp
--------------------------------------------------------------------------------------------------------------------------
chgrp vlsi file1 将文件file1改为vlsi组所有
chgrp -R image dir1 将目录dir1及其下所有文件和子目录,改为image群组
(12)改变文件或目录的最后修改时间 touch
--------------------------------------------------------------------------------------------------------------------------
touch name
六、文本编辑器Vi
(1)Vi简介
--------------------------------------------------------------------------------------------------------------------------
vi是在Linux 上被广泛使用的中英文编辑软件。vi是visual ditor的缩写,是UNIX提供给用户的一个窗口化编辑环境。
(2)Vi的工作模式
--------------------------------------------------------------------------------------------------------------------------
显示器出现vi的编辑窗口,同时vi会将文件复制一份至缓冲区(buffer)。vi先对缓冲区的文件进行编辑,保留在磁
盘中的文件则不变。编辑完成后,使用者可决定是否要取代原来旧有的文件。
Vi提供两种工作模式:即输入模式和控制模式(Insert Mode and Control Mode).使用者进入Vi后即处于命令模式下面
当需要进行修改时,则需要进入输入模式。
(3)命令模式
--------------------------------------------------------------------------------------------------------------------------
输入模式下,按ESC可切换到命令模式。命令模式下,可选用下列指令离开
:q! 离开vi,并放弃刚在缓冲区内编辑的内容
:wq 将缓冲区内的资料写入磁盘中,并离开vi
:ZZ 同wq
:x 同wq
:w 将缓冲区内的资料写入磁盘中,但并不离开vi
:q 离开vi,若文件被修改过,则要被要求确认是否放弃修改的内容,此指令可与:w配合使用
(4)命令模式下光标的移动
H
-------------------------------------------------------------------------------------------------------------------------- 左移个字符
J
下移一个字符
K
上移一个字符
L
右移一个字符
0
移至该行的首
$
移至该行的末
^
移至该行的第一个字符处
H
移至窗口的第一列
M
移至窗口中间那一列
L
移至窗口的最后一列
G 移至该文件的最后一列
W, W
下一个单词 (W 忽略标点)
B, B
上一个单词 (B 忽略标点)
+
移至下一列的第一个字符处
-
移至上一列的第一个字符处
(移至该句首
)
移至该句末
{移至该段首
}
移至该段末
NG
移至该文件的第n列
N+
至光标所在位置之后第n列
n-
移至光标所在位置之前第n列
(5)输入模式
a
--------------------------------------------------------------------------------------------------------------------------(append) 在光标之后加入资料
A 在该行之末加入资料
i
(insert) 在光标之前加入资料
I 在该行之首加入资料
o
(open) 新增一行于该行之下,供输入资料用
O
新增一行于该行之上,供输入资料用
Dd
删除当前光标所在行
X
删除当前光标字符
X
删除当前光标之前字符
U
撤消
·
重做
F
查找
s
替换,例如:将文件中的所有"FOX"换成"duck",用":%s/FOX/duck/g"
ESC
离开输入模式
七、GNU C编译器
--------------------------------------------------------------------------------------------------------------------------
(1)GNU简介
LINUX上可用的C编译器是GNU C编译器,它建立在*软件基金会编程许可证的基础上,因此可以*发布。
LINUX 上的GNU C编译器(GCC)是一个全功能的ANCI C兼容编译器,而一般UNIX(如SCO UNIX)用的编译器是CC
。
下面介绍GCC和一些GCC编译器最常用的选项。
(2)GCC编译命令
gcc
--------------------------------------------------------------------------------------------------------------------------
[options][filenames]
gcc -p-g test.c 将调试信息写入可执行文件中(.out)
gcc -pg test.c只建立profile信息,而不将调试信息写入可执行文件
gcc –o count count.c 指定文件名替代默认的a.out可执行文件的文件名
(3)执行可执行文件
./a.out
./count
--------------------------------------------------------------------------------------------------------------------------
八、GDB调试工具
(1)GDB简介
--------------------------------------------------------------------------------------------------------------------------
LINUX包含了一个叫gdb的GNU调试程序。gdb是一个用来调试C和C++程序的强有力调试器。它使你能在程序运行时观察
程序的内部结构和内存的使用情况。它具有以下一些功能:
·监视程序中变量的值;
·设置断点以使程序在指定的代码行上停止执行;
·一行行的执行代码。
(2)GDB指令
--------------------------------------------------------------------------------------------------------------------------
file 装入欲调试的可执行文件
kill 终止正在调试的程序
list 列出产生执行文件的源代码部分
next 执行一行源代码但不进入函数内部
step 执行一行源代码并进入函数内部
run 执行当前被调试的程序
quit 终止gdb
watch 监视一个变量的值而不管它何时被改变
break 在代码里设置断点,使程序执行到这里时被挂起
make 不退出gdb就可以重新产生可执行文件
shell 不离开gdb就执行UNIX shell 命令
九、Linux多线程
(1)Linux下进程的结构
-------------------------------------------------------------------------------------------------------------------------- Linux下的进程结构由代码段、数据段和堆栈段组成。
代码段存放进程的代码数据,当有多个进程共同执行一个程序时,多个进程指向同一代码段。
数据段是存放进程的全局变量,常数和动态数据分配的数据空间,比如molloc()等申请内存空间的函数。
堆栈段存放的是子程序的返回值以及程序的局部变量。
(2)创建进程函数 fork()函数
--------------------------------------------------------------------------------------------------------------------------
当一个进程调用fork()函数之后,系统就会重新分配数据段和堆栈段,而代码段则与当前进程相同。这样就使得父
进程和子进程不共享任何数据,只是共享相同的代码数据。
如果多个进程之间需要共享数据,则需要使用shmget,shmat.shmdt等函数来操作。
对于父进程,fork()函数返回子进程的进程号。
对于子进程,fork()函数返回0。
(3)启动当前新进程 exec()函数
--------------------------------------------------------------------------------------------------------------------------
当调用exec()函数的时候,系统就将当前进程的代码段替换为新的代码段,并为当前的代码段分配新的数据段和堆栈段
。唯一相同的就是当前的进程号,也就是说,同一个进程,但是运行了不同的程序。本身进程死亡,新进程执行。
(4)启动额外新进程 exec()和fork()函数共同使用
--------------------------------------------------------------------------------------------------------------------------