Linux常用命令手册
Posted ~无关风月~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux常用命令手册相关的知识,希望对你有一定的参考价值。
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目录结构
- bin 存放二进制可执行文件(ls,cat,mkdir等)
- boot 存放用于系统引导时使用的各种文件
- dev 用于存放设备文件
- etc 存放系统配置文件
- home 存放所有用户文件的根目录
- lib 存放跟文件系统中的程序运行所需要的共享库及内核模块
- mnt 系统管理员安装临时文件系统的安装点
- opt 额外安装的可选应用程序包所放置的位置
- proc 虚拟文件系统,存放当前内存的映射
- root 超级用户目录
- sbin 存放二进制可执行文件,只有root才能访问
- tmp 用于存放各种临时文件
- usr 用于存放系统应用程序,比较重要的目录 /usr/local 本地管理员软件安装目录
- var 用于存放运行时需要改变数据的文件
文件的类型
- 普通文件 -
- 目录 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
- 这是一条从外部进入内部本地服务器的数据
- 数据包的目的地址是80,就是要访问本地的80端口
- 允许以上的数据行为通过
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运维工程师常用命令
以上是关于Linux常用命令手册的主要内容,如果未能解决你的问题,请参考以下文章