Linux基础及常用命令

一. Linux shell脚本

Linux kernel是统一的,但是shell有很多种,比如Bash、Zsh等。

可执行程序一般有两种实现方式:一种是二进制方式,另一种是脚本(script)方式。二进制程序(如.exe文件)是已经编译完的程序,计算机可直接执行;脚本是由一条一条的命令组成的文本文件,脚本在执行时多了一道翻译的过程,所以它比二进制程序执行效率要稍低一些。

shell脚本在本质上就是将某些Linux命令“堆放”在一起(shell脚本运行时,当中的命令依次接受脚本解释器的解释,例如,一个包含多条命令的脚本,即使最后一条命令有语法错误,前面的命令仍然可以照常运行;即使中间某条命令没有正常运行,假设后面的命令不依赖于它,后面的命令仍然可以照常运行)。

单字符选项(参数)的前面为一个减号“-”,如-f、-i等;多字符选项(参数)的前面为两个减号“--”,如--help、--version等。

Linux系统区分大小写,且不使用扩展名识别文件的类型,而是根据文件头的内容来识别其类型,为了提高文件的可读性,在Linux系统中可以使用扩展名。

二. 常用命令

1. 查看文件清单命令 ls

ls 显示当前目录中的所有文件,不包含隐藏文件

ls –a 显示当前目录中的所有文件,包含隐藏文件

ls –l 显示文件及其详细信息

多个选项一起使用时,用一个减号即可,选项的放置次序一般可以任意,用-la和-al,效果相同

2. 浏览文件命令 cat、more、less、head和tail

cat file_name:查看文件的内容

more file_name:分页显示文件的内容,每显示一页,more命令就等待用户的进一步指令。用户的常用指令有:按回车键,显示下一行;按空格键,显示下一页;按b键,返回到上一页;按q键,退出命令

less file_name:与more命令相似    区别:速度(less不必读整个文件,加载速度会比more更快)、内容(less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容)

head file_name:查看文件开头的部分,默认显示文件的前10行,head -5 file_name则显示文件的前5行

tail -f file_name:该命令用来追踪日志,能实时看到最新操作的变化(动态查看日志),与head命令相呼应,默认显示文件的最后10行        eg:tail -f -5 log_test

3. 文件统计命令 wc

wc file_name:统计文件的行数、单词数和字节数

-l、-w、-c参数分别显示文件的行数、单词数和字节数

4. 切换当前工作目录命令 cd

cd dic_name:切换到指定目录   

cd ..或cd ../:切换到上级目录

cd ../../:切换到上两级目录

cd -:切换到上一步操作时的目录

cd后面既可以跟相对路径,也可以跟绝对路径

5. 创建目录命令 mkdir

mkdir dic_name:新建目录

mkdir -p dic_name/subdic_name:创建多层目录(mkdir -p命令中的各级目录,可能都不存在,可能某一级或者某几级已经存在,也可能都已经存在,在这几种情况下,mkdir -p命令都不会出错。从上层目录到最后一级目录,哪一级目录不存在就创建哪一级,如果都已经存在,相当于mkdir -p命令做了一个空操作,所以即使只创建一层的目录,也建议加上-p参数)

6. 复制命令 cp

cp [options] source dest:主要用于复制文件或目录

-r 参数在复制目录时使用

-f:强行覆盖,不会遇到权限不足的问题

-i:若目标文件已经存在,在覆盖前会先询问

cp命令是有危险的,可能会发生这种情况:文件b.txt存在,执行cp a.txt b.txt之后,原来的b.txt的内容就被a.txt的内容给覆盖掉。 -b参数有备份作用(backup),执行cp -b a.txt b.txt,b.txt的内容备份至新文件b.txt~中,b.txt中的内容被a.txt的内容给覆盖。

7. 重命名或移动命令 mv

mv a.txt b.txt:将a.txt重命名为b.txt

mv a.txt b.txt temp:将a.txt和b.txt移动至目录temp下

mv命令的-f、-i、-b参数与cp命令的这些参数作用相同

8. 创建软链接和硬链接命令 ln

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用 ln 命令链接(link)它就可以,不必重复的占用磁盘空间。

ln -s 源文件或目录 目标文件或目录:软链接(符号链接)

例如:ln -s /bin/less /usr/local/bin/less 

为某一个文件在另外一个位置建立一个同步的链接。符号链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上,可以理解为 Windows 的快捷方式。当源文件被删除了,链接文件就打不开了。因为记录的是路径,所以可以为目录建立符号链接。

ln 源文件(必须已存在) 目标文件或目录:硬链接(实体链接)

ln命令(软链接和硬链接)会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化。

9. 显示当前目录命令 pwd

pwd -P:显示实际路径,即物理路径(如果当前目录或各级父目录存在软链接,则显示软链接的“源”路径)

pwd -L:显示的是“表面上”的路径,即逻辑路径

10. 删除命令 rm

rm -rf file_name :删除当前目录下的指定文件

rm -rf *: 删除当前目录下的所有文件

rm -rf *.txt :删除以.txt为后缀的所有文件

“- f ”忽略不存在的文件,强制删除,不给出提示。 

“- r” 指示rm将参数中列出的全部目录和子目录均递归地删除。 

“- i ”进行交互式删除。如果用户输入“y”,文件将被删除。

11. 改变权限命令 chmod

ls -l 命令列出的文件信息的第一部分中的第 1 位为文件类型字段(d : 目录,- : 文件,l : 链接文件),后 9 位为文件权限字段,前3个字符、中间3个字符和后面3个字符分别表示文件所有者、文件所属组和所有其他账户的权限:

文件类型及权限   链接数   文件拥有者   所属群组  文件大小   文件最后被修改的时间    文件名

chmod [ugoa][+-=][rwx-] file_name:改变文件和目录的权限

u表示文件的所有者(user),g表示文件的所属组(group),o表示除所有者和所属组组员以外的其他账户(other),a表示所有账户(all),+、-、=分别表示对权限的增加、减少、定义,r、w、x、-分别表示读权限、写权限、执行权限、无权限。

eg:chmod u+rw example.txt   给文件的所有者增加读写权限

改变文件的权限,还有一种“数值”的方法,r、w、x、-可以分别用4、2、1、0表示

eg:chmod 775 example.txt  给文件的所有者和所属组赋予读、写、执行权限,给其他账户只赋予读和执行权限

-R 参数在修改某个目录内所有文件和子目录的权限时使用

chownchgrp命令分别可以改变文件的所有者和所属组

12. 重定向 >

0 表示stdin标准输入

1 表示stdout标准输出

2 表示stderr标准错误

2>12>&1的写法有什么区别:

  • 2>1的作用是把标准错误的输出重定向到1,但这个1不是标准输出,而是一个文件!!!,文件名就是1
  • 2>&1的作用是把标准错误的输出重定向到标准输出1,&指示不要把1当作普通文件,而是fd=1即标准输出来处理

2>&1 &中最后一个&:&表示把该命令以后台的job的形式运行

&:让程序在后台运行

这样,所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。

  • >    覆盖
  • >>  追加
  • &>>  正确和错误信息均写入同一个文件

可以将不需要的标准输出以及标准错误输出重定向到 /dev/null,相当于扔进垃圾箱。

/dev/null  黑洞文件,垃圾桶

/dev/zero 无限0资源设备

tee:输出重定向会将输出内容重定向到文件中,而 tee 不仅能够完成这个功能,还能保留屏幕上的输出。也就是说,使用 tee 指令,一个输出会同时传送到文件和屏幕上。

格式:tee [-a] file      -a:附加到既有文件的后面,而非覆盖它

13. 忽略所有挂断信号 nohup

nohup:后台执行,退出shell后进程不会中断

如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。

14. 管道 |

管道:可以把前面进程的输出结果作为后面进程的输入内容来处理

eg:head -16 /etc/passwd | tail -1

eg:cat 002999_0 | python mapper.py | sort | python reducer.py(本地测试mapreduce程序)

15. 例行性工作排程 crontab

仅执行一次的工作排程:at 指令(前提:atd是启动的;使用 atq/atrm 来管理 ;用法:将 at 加上一个时间即可,比如now或具体时间 )

batch:功能同at指令,但在系统有空时才进行背景任务(也是使用 atq/atrm 来管理 )

crontab:循环执行的例行性工作排程

16. 其他常用命令

vim file_name:编辑(新建)文件

touch file_name:创建空文件(无论文件是否事先存在,运行命令后,该文件的修改时间均被设定为当前时间)

mkdir --helpman mkdir:查询mkdir命令的帮助说明(使用手册、具体的参数解释)

echo text:echo命令后面跟上要输出的文本

-e:text中的转义符号起到转义的作用(比如\n表示换行)

-E:text中的转义符号不起到转义的作用(比如正常输出"\n"这个字符,而不是换行)

gzip:压缩文件    -d:解压     gunzip:解压

tar zxvf file_name.tar:解压文件并显示文件的详细信息

sz:将选定的文件下载(发送)到本地机器

rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器

wget  从网络下载一个文件并保存在当前目录

tree dictionary_name:以树形结构显示该目录下的所有子目录

tree:查看当前目录,不用跟目录名

tree -L 3 :在目录树中最深显示到第3层子目录

du -h file_name:查看文件大小,-h可选,表示以K,M,G为单位

du -h --max-depth=1:只显示当前路径下的一级目录的文件大小

ps:查看某个时间点的进程信息

查看自己的进程: ps -l 

查看系统所有进程: ps aux 

查看特定的进程:ps aux | grep pattern

top:动态观察程序的变化(相对于 ps 是撷取一个时间点的程序状态, top 则可以持续侦测程序运作的状态)

pstree:查看程序之间的相关性

通过md5命令可以检查两个或多个文件的内容是否完全相同:

test命令:检查文件和比较值

测试标志代表意义
文件名、文件类型
-e该文件名是否存在
-f该文件名是否存在且为file
-d该文件名是否存在且为目录
-b该文件名是否存在且为一个block
-c该文件名是否存在且为一个character device设备
-S该文件名是否存在且为一个socket文件
-p该文件名是否存在且为一个FIFO(pipe)文件
-L该文件名是否存在且为一个连接文件
文件权限检测
-r检测文件名是否存在且具有“可读”权限
-w检测文件名是否存在且具有“可写”权限
-x检测文件名是否存在且具有“可执行”权限
-u检测文件名是否存在且具有“SUID”权限
-g检测文件名是否存在且具有“SGID”权限
-k检测文件名是否存在且具有“Sticky bit”权限
-s检测文件名是否存在且为“非空白文件”
两个文件的比较
-nt(newer than)判断file1是否比file2新
-ot(older than)判断file是否比file2旧
-ef判断file1与file2是否为同一个文件,可用在判断hard link上
数字之间的判定
-eqequal
-nenot equal
-gtgreater than
-ltless than
-gegreater than or equal
-leless than or equal
判断字符串的数据
test -z string判断字符串是否为0,若为空返回true
test -n string判断字符串是否为0,若为空返回false
test str1 = str2判断str1是否等于str2,若相等,返回true
test str1 != str2判断str1是否等于str2,若相等,返回false
多重条件的判断
a与,两个条件同时成立,eg:test -r file a test -x file,同时成立返回true
o或,任何一个条件成立,eg:test -r file o test -x file,任意一个成立返回true
非,反向状态,如test!-x file,当file不具有执行权限时,返回true

find [起始目录] 选项及寻找条件 [操作]:在目录中搜索文件,它的使用权限是所有用户。

eg:find . -name "*.txt" -print 或 find -name "*.txt"    从当前目录下开始查找后缀名为.txt的文件(默认的操作为-print,就是将找到的内容显示在屏幕上)

df:列出文件系统的整体磁盘使用量。df命令参数功能:检查文件系统的磁盘空间占用情况,可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

ssh:远程登录(服务器)

命令:ssh 客户端用户名@服务器ip地址   eg:ssh fdb@192.168.0.1

如果客户机的用户名和服务器的用户名相同,登录时可以省略用户名   eg:ssh 192.168.0.1

输入ssh命令之后,会要求我们输入远程主机的密码,输入的密码正确就可以成功登录了。

免密登录:将本客户机的公钥文件 id_rsa.pub(利用ssh-keygen -t rsa生成的密钥对之一)中的内容添加到服务器上的~/.ssh/authorized_keys文件中即可。

scp [options] source dest:基于 ssh 登陆进行安全的远程文件拷贝命令

如何将vim文本中的 T 全部替换成 t ?      :%s/T/t/g

三. 其他

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作。由于孤儿进程会被 init 进程收养,所以孤儿进程不会对系统造成危害。

僵尸进程:一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。僵尸进程通过 ps 命令显示出来的状态为 Z(zombie)。系统所能使用的进程号是有限的,如果产生大量僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进程就会变成孤儿进程,从而被 init 进程所收养,这样 init 进程就会释放所有的僵尸进程所占有的资源,从而结束僵尸进程。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值