Linux基础指令大全

时间:2021-04-20 08:11:17

本文章是本人在学习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          
删除当前光标之前字符

撤消
·         
重做
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()函数共同使用

--------------------------------------------------------------------------------------------------------------------------