Linux常用命令手册

Linux历史

linux起源
Linus Torvalds

  • 1991年初,开始基于Minix(Unix的变种)进行开发
  • 1991年6月,确定开发一个类Unix操作系统内核
  • 1991年9月,开发完成内核的0.01版本,命名为Linux
    在这里插入图片描述
    包管理:
  • CentOS:rpm、yum
  • Ununtu:apt

Linux系统的组成

  • linux内核(linux 团队管理)
  • shell:用户与内核交互的接口
  • 文件系统:ext3、ext4等。windows 有 fat32 、ntfs
  • 第三方应用软件

在这里插入图片描述

Shell基本知识

Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器)

Shell可以执行:

  • 内部命令
  • 应用程序
  • shell 脚本

在这里插入图片描述
使用type命令可以区分内部命令外部命令
在这里插入图片描述
于是乎,我们利用 Shell 就可以干下面这些事了:

  • 命令行解释
  • 命令的多种执行顺序
  • 通配符( wild-card characters )
  • 命令补全、别名机制、命令历史
  • I/O重定向( Input/output redirection )
  • 管道( pipes )
  • 命令替换( 或$( ) )
  • Shell编程语言( Shell Script )

Shell的主要版本有以下这么多:

  • 我们常用(默认)的就是bash(bourne again shell)
  • zsh

使用 ps 命令观察正在执行的shell:
在这里插入图片描述

Linux目录结构

在这里插入图片描述

  • root 超级用户目录

  • bin 存放二进制可执行文件(ls,cat,mkdir等)

  • boot 存放用于系统引导时使用的各种文件

  • dev 用于存放设备文件

  • etc 存放系统配置文件

  • home 存放所有用户文件的根目录

  • var 用于存放运行时需要改变数据的文件

  • lib 存放跟文件系统中的程序运行所需要的共享库及内核模块

  • mnt 系统管理员安装临时文件系统的安装点

  • opt 额外安装的可选应用程序包所放置的位置

  • proc 虚拟文件系统,存放当前内存的映射

  • sbin 存放二进制可执行文件,只有root才能访问

  • tmp 用于存放各种临时文件

  • usr 用于存放系统应用程序,比较重要的目录 /usr/local 本地管理员软件安装目录

linux 目录以/划分 (ASCII 中\表示转义字符)
window目录以\划分

Linux 命令英文全称

文件的类型

  • 普通文件 -
  • 目录 d
  • 字符设备文件 c
  • 块设备文件 b
  • 套接字 s
  • 命名管道 p
  • 符号链接 l
    • 硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块
    • 软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径(简单地理解为 Windows 中常见的快捷方式)。
      在这里插入图片描述
      结果的最左边一列,是文件的 inode 值,你可以简单把它想成 C 语言中的指针。它指向了物理硬盘的一个区块,事实上文件系统会维护一个引用计数,只要有文件指向这个区块,它就不会从硬盘上消失。

ln [参数] [源文件或目录] [目标文件或目录]
硬链接 ln myfile hardfile
软链接 ln -s myfile softfile

源文件被删除后,硬链接无影响,软链接失效。
目录只能创建软链接,目录创建链接必须用绝对路径。可对不存在的文件或目录创建软链接;

Linux文件分为两部分:

  • 用户数据 (user data) :文件数据块 (data block),记录文件真实内容。
  • 元数据 (metadata):附加信息:文件大小、创建时间、所有者、inode号(索引节点号,是文件的唯一标示)。
    通过文件名打开文件:在这里插入图片描述

Linux下如何进行进程调度

进程调度器:合理分配 CPU 时间给运行的进程,创造一种所有进程并行运行的错觉。

在Linux内核中,调度器可以分成两个层级:

  • 通用调度器(核心调度器):在进程中被直接调用,他们作为一个组件和进程其他部分分开,而通用调度器和进程并没有直接关系,其通过第二层的具体的调度器类。
  • 具体的调度器类:直接管理进程

在这里插入图片描述
每个进程必然属于一个特定的调度器类,Linux会根据不同的需求实现不同的调度器类。各个调度器类之间具备一定的层次关系,即在通用调度器选择进程的时候,会从最高优先级的调度器类开始选择,如果通用调度器类没有可运行的进程,就选择下一个调度器类的可用进程,这样逐层递减。

每个CPU维护一个就绪队列,由结构 struct rq 表示,通用调度器直接和 rq 交互,在 rq 中又维护了子就绪队列,这些子就绪队列和具体的调度器类相关,进程入队出队都需要根据调度器类的具体算法。

命令基本格式

cmd [options] [arguments],options 称为选项,arguments 称为参数

在Linux中,可执行的文件 也进行了分类:

  • 内置命令:出于效率的考虑,将一些常用命令的解释程序构造在Shell 内部。
  • 外置命令:存放在/bin、/sbin 目录下的命令
  • 实用程序:存放在 /usr/bin、/usr/sbin、/usr/share、/usr/local/bin 等目录下的实用程序
  • 用户程序:用户程序经过编译生成可执行文件后,可作为 Shell 命令运行
  • shell 脚本:由Shell语言编写的批处理文件,可作为Shell命令运行

通配符:

  • *:匹配任何字符和任何数目的字符

  • ?:匹配单一数目的任何字符

  • [ ]:匹配[ ]之内的任意一个字符

  • [! ]:匹配除了[! ]之外的任意一个字符,!表示非的意思

常用命令

指令大全

基本操作

ls [选项] [目录名 | 列出相关目录下的所有目录和文件

-l 使用详细格式列表。
-a 列出包括.a开头的隐藏文件的所有文件
-t 用文件和目录的更改时间排序。
-c 根据ctime排序显示
-r 或 --reverse 反向排序。
-R 或 --recursive 递归处理,将指定目录下的所有文件及子目录一并处理。

rm [选项] 文件 | 删除文件

-r 删除文件夹
-f 删除不提示
-i 删除提示
-v 详细显示进行步骤

touch [选项] 文件 | 创建空文件或更新文件时间

-a 只修改存取时间
-m 只修改变动时间
-r eg: touch -r a b ,使b的时间和a相同
-t 指定特定的时间 eg: touch -t 201211142234.50 log.log
-t time [[CC]YY]MMDDhhmm[.SS], C:年前两位

echo:显示内容

-n 输出后不换行
-e 遇到转义字符特殊处理

eg:
echo "he\nhe" 显示he\nhe
echo -e "he\nhe" 显示he(换行了)he

more | 按页查看文章内容,从前向后读取文件,因此在启动时就加载整个文件

+n 从第 n 行开始显示
-n 每次查看 n 行数据
+/String 搜寻 String 字符串位置,从其前两行开始查看
-c 清屏再显示
-p 换页时清屏

less | 可前后移动地逐屏查看文章内容,在查看前不会加载整个文件

-m 显示类似于more命令的百分比
-N 显示行号
/ 字符串:向下搜索“字符串”的功能
? 字符串:向上搜索“字符串”的功能
n 重复前一个搜索(与 / 或 ? 有关)
N 反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
d 向后翻半页

sed 对数据行进行替换、删除、新增、选取等操作

a 新增,在新的下一行出现
c 取代,取代 n1,n2 之间的行 eg: sed ‘1,2c Hi’ ab
d 删除
i 插入,在新的上一行出现

查看文件中间一段

 sed -n '100,200p' filename 

sed命令截取tomcat某段时间内的catalina.out日志

sed -n '/2014-06-04 14:00:/,/2014-06-04 15:00:/p' catalina.out > ~/catalina.out.20140604-14
sed -n '/2016-11-02 15:00:/,/2016-11-02 15:05:/p' catalina.out > /tmp/123/error.txt
sed -n '/2018-01-01 00:00:/,/2018-01-30 00:00:/p' catalina.out > ./2018.1.error.log.txt

grep ‘正则表达式’ 文件名 | 用正则表达式搜索文本,并把匹配的行打印出来

-c 只输出匹配行的计数。
-I 不区分大小写(只适用于单字符)。
-l 只显示文件名
-v 显示不包含匹配文本的所有行。
-n 显示匹配行数据及其行号
-r 递归模式, 可同时处理所有层级子目录里的文件.

(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
在这里插入图片描述

打印文本中除掉“1”开头的行和空行的信息

egrep -v "^1|^$" file.txt

egrep 为 grep 的扩充版本

  • grep 之下不支持 ? 与 + 这两种 modifier, 但 egrep 则可.
  • grep 不支持 a|b 或 (abc|xyz) 这类"或一"比对, 但 egrep 则可.
  • grep 在处理 {n,m} 时, 需用 { 与 } 处理, 但 egrep 则不需.
    诸如此类的… 我个人会建议能用 egrep 就不用 grep

wc 统计指定文件中的字节数、字数、行数, 并将统计结果显示输出

-l filename 报告行数
-c filename 报告字节数
-m filename 报告字符数
-w filename 报告单词数

查看文件总行数

wc -l catalina.out

152159209 catalina.out

find | 查找文件

在全盘中找属于用户 xf 的所有扩展名为 html 的文件

 find / -name *.html -a -user xf

在根目录下查找文件httpd.conf,表示在整个硬盘查找

find / -name httpd.conf

查找目录

find /(查找范围) -iname '查找关键字' -type d

which 可执行文件名称 | 查看可执行文件的位置,在PATH变量指定的路径中查看系统命令是否存在及其位置

whereis [-bmsu] [BMS 目录名 -f ] 文件名 | 定位可执行文件、源代码文件、帮助文件在文件系统中的位置

-b 定位可执行文件。
-m 定位帮助文件。
-s 定位源代码文件。
-u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
-B 指定搜索可执行文件的路径。
-M 指定搜索帮助文件的路径。
-S 指定搜索源代码文件的路径。

diff [参数] [文件1或目录1] [文件2或目录2] | 比较单个文件或者目录内容

-b  不检查空格字符的不同。
-B  不检查空白行。
-i 不检查大小写
-q 仅显示差异而不显示详细信息
eg: diff a b > parch.log 比较两个文件的不同并产生补丁

&

将某个进程设为后台运行

#后台运行jupyter notebook

nohup jupyter notebook >notebook.log & 
nohup jupyter notebook > notebook.log 2>&1 &

(2>&1表示错误信息也重定向到1,即标准输出)

管道命令 |:前一个命令的输出是后一个命令的输入

ls -l /dev |more
列出dev目录下的详细信息,又要分页

重定向

是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改进

>  输出重定向到一个文件或设备 覆盖原来的文件
>! ................................................强制覆盖原来的文件
>>     ...........................................追加.....................
<  输入重定向到一个程序

rpm -ivh | 安装软件

-i:显示套件的相关信息;
-v:显示指令执行过程;
-h 或 --hash:套件安装时列出标记;

rpm -qa

查看现在已经安装了那些软件包

vi 编辑文件

:w filename 将文章以指定的文件名保存起来
:wq 保存并退出
:q! 不保存而强制退出

命令行模式功能键
1)插入模式
「i」切换进入插入模式「insert mode」,按"i"进入插入模式后是从光标当前位置开始输入文件;
「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
「o」进入插入模式后,是插入新的一行,从行首开始输入文字。

2)从插入模式切换为命令行模式
「ESC」键。

3)移动光标
  vi可以直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。
  按「ctrl」+「b」:屏幕往"后"移动一页。
  按「ctrl」+「f」:屏幕往"前"移动一页。
  按「ctrl」+「u」:屏幕往"后"移动半页。
  按「ctrl」+「d」:屏幕往"前"移动半页。
  按数字「0」:移到文章的开头。
  按「G」:移动到文章的最后。
  按「$」:移动到光标所在行的"行尾"。
  按「^」:移动到光标所在行的"行首"
  按「w」:光标跳到下个字的开头
  按「e」:光标跳到下个字的字尾
  按「b」:光标回到上个字的开头
  按「#l」:光标移到该行的第#个位置,如:5l,56l。

4)删除文字
  「x」:每按一次,删除光标所在位置的"后面"一个字符。
  「#x」:例如,「6x」表示删除光标所在位置的"后面"6个字符。
  「X」:大写的X,每按一次,删除光标所在位置的"前面"一个字符。
  「#X」:例如,「20X」表示删除光标所在位置的"前面"20个字符。
  「dd」:删除光标所在行。
  「#dd」:从光标所在行开始删除#行

5)复制
  「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
  「#yw」:复制#个字到缓冲区
  「yy」:复制光标所在行到缓冲区。
  「#yy」:例如,「6yy」表示拷贝从光标所在的该行"往下数"6行文字。
  「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与"y"有关的复制命令都必须与"p"配合才能完成复制与粘贴功能。

6)替换
  「r」:替换光标所在处的字符。
  「R」:替换光标所到之处的字符,直到按下「ESC」键为止。

7)回复上一次操作
  「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次"u"可以执行多次回复。

8)更改
  「cw」:更改光标所在处的字到字尾处
  「c#w」:例如,「c3w」表示更改3个字

9)跳至指定的行
  「ctrl」+「g」列出光标所在行的行号。
  「#G」:例如,「15G」,表示移动光标至文章的第15行行首。

系统相关

chmod

给 file 的属主分配读、写、执行权限(4+2+1),所在组分配读、执行权限(4+1),其他用户分配执行权限

chmod 751 file 

lsattr命令是显示chattr命令设置的文件属性

lsattr /etc/profile 

chattr 命令移除文件属性

sudo chattr -e /etc/profile

然后就可以修改文件权限了

sudo chmod 777 /etc/profile

chgrp [选项] group filename

改变文件或目录所属组
group可以是用户组的id,也可以是 /etc/group 中用户组的组名

chrown [选项] 用户或组 文件

更改某个文件或目录的属主和属组

shutdown -h now

立即关机

users 显示当前登录系统的用户

who 登录在本机的用户与来源

-H 或 --heading  显示各栏位的标题信息列

set 显示环境变量和普通变量

env 显示环境变量

查看环境变量路径

echo $PATH 
vi /etc/profile
vi /root/.bashrc  

“/etc/profile”对系统里所有用户都有效,用户主目录下的“.bash_profile”只对这个用户有效。

source ~/.bashrc

export 把普通变量变成环境变量

df [选项] [文件] | 显示指定磁盘文件的可用空间,如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示

-a 显示全部文件系统
-h 文件大小友好显示
-l 只显示本地文件系统
-i 显示inode信息
-T 显示文件系统类型
在这里插入图片描述

df -h

查看硬盘和分区

du [选项] [文件] | 显示每个文件和目录的磁盘使用空间

-h 方便阅读的方式
-s 只显示总和的大小

看全部占用的空间

 du -sh

看这个目录的大小

du /etc -sh

free [参数] | 显示linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer

如何查看内存使用情况
在这里插入图片描述
free -m 以Mb为单位显示

top [参数] | 显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等

查看各进程使用内存情况
在这里插入图片描述

PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值
COMMAND:进程启动命令名称

ps | 列出当前进程的快照

a 显示所有的进程
-a 显示同一终端下的所有程序
e 显示环境变量
f 显示进程间的关系
-H 显示树状结构
r 显示当前终端的程序
T 显示当前终端的所有程序
-au 显示更详细的信息
-aux 显示所有包含其他使用者的行程
-u 指定用户的所有进程

linux查询Java进程
ps -ef | grep java

Linux 的进程挂起和恢复

#ctrl+z:挂起,程序放到后台,程序没有结束。
#jobs:查看被挂起的程序工作号
恢复进程执行时,有两种选择:

  • fg命令将挂起的作业放回到前台执行;
  • 用bg命令将挂起的作业放到后台执行
  • 格式:fg %工作号;bg %工作号

watch [参数] [命令] |重复执行某一命令以观察变化

-n 时隔多少秒刷新
-d 高亮显示动态变化

netstat | 显示与IP、TCP、UDP和ICMP协议相关的统计数据

端口占用查看

netstat -tunpl | grep 6379

iptables

dport--------目的端口 destination
sport--------来源端口 source
input 进入规则:dport指本地,sport指外部。
output 出去规则:dport指外部,sport指本地。

iptables   -A  INPUT   -p  tcp   --dport  80  -j  ACCEPT
  1. 这是一条从外部进入内部本地服务器的数据
  2. 数据包的目的地址是80,就是要访问本地的80端口
  3. 允许以上的数据行为通过

uname -a

显示电脑以及操作系统的相关信息

cat /proc/version

说明正在运行的内核版本

cat /etc/issue

显示的是发行版本信息
lsb_release -a (适用于所有的linux,包括Redhat、SuSE、Debian等发行版,但是在debian下要安装lsb)

more /proc/cpuinfo

查看CPU信息

getconf LONG_BIT

查看CPU位数
ls 如果在root下ls有lib64 文件夹说明系统64

more /proc/meminfo

查看内存信息

ifconfig | 查看ip

在ifcfg-eth0 文件里你可以看到mac,网关等信息

cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep IPADDR

查看网关

cat /etc/sysconfig/network

创建用户

#这样的命令会在home目录下添加一个帐号

sudo adduser xxx 

#若想给新用户添加root权限

chmod +w /etc/sudoers

修改文件如下:

sudo vi /etc/sudoers  
# User privilege specification
root ALL=(ALL) ALL
xxx  ALL=(ALL) ALL

#切换用户

su xxx  

#切换到root用户

sudo su
sudo -i

#删除某个用户

userdel -r xxx

#查看文件夹权限

ls -ld /home/zzz 

#改变权限,只有自己又读写执行权限,同组用户和其他用户无任何权限

sudo chmod -R 0700 /home/zzz

执行 .class 文件

.class 文件需要有main函数,如果文件中有 package XXX; 需要cd 到package的起始路径
如果文件 import 了其他jar包,需要通过 -classpath 参数指定路径
windows下:

java -classpath .;../lib/* cn.edu.ncut.dc.webservice.WebServiceTest

linux下:

java -classpath .:../lib/* cn.edu.ncut.dc.webservice.WebServiceTest

区别是window下分隔符是; linux下是:

禁止Ubantu自动更新内核

1修改配置文件
修改配置文件/etc/apt/apt.conf.d/10periodic 然后0是关闭,将所有值改为0

vim etc/apt/apt.conf.d/10periodic

APT::Periodic::Update-Package-Lists “0”;
APT::Periodic::Download-Upgradeable-Packages “0”;
APT::Periodic::AutocleanInterval “0”;

更改Ubantu启动内核

查看现有内核

dpkg --get-selections |grep linux-image

查看当前内核

uname -a

用编辑器打开 grub 配置文件

sudo vim /etc/default/grub

找到

GRUB_DEFAULT=0

修改为:

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 3.16.0-43-generic"

保存退出,然后执行以下命令更新 Grub 引导

sudo update-grub

更新完成后重启系统

sudo reboot

参考:
【1】看完这篇Linux基本操作就会了
【2】97条Linux运维工程师常用命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值