Contents

LinuxSys:Linux常用命令

本文采用知识共享署名 4.0 国际许可协议进行许可,转载时请注明原文链接,图片在使用时请保留全部内容,可适当缩放并在引用处附上图片所在的文章链接。

LinuxCommondLine
- [chmod](#chmod) - [显示所有系统变量](#显示所有系统变量) - [apt 查看软件版本,并安装特定版本的软件](#apt-查看软件版本并安装特定版本的软件) - [设置环境变量](#设置环境变量) - [查找命令在系统中的位置](#查找命令在系统中的位置) - [归档和压缩](#归档和压缩) - [压缩与解压](#压缩与解压) - [批量解压文件](#批量解压文件) - [截图](#截图) - [配置 FTP 服务器](#配置-ftp-服务器) - [进程相关](#进程相关) - [进程管理](#进程管理) - [查看系统磁盘使用率](#查看系统磁盘使用率) - [查看内核版本](#查看内核版本) - [查看 CPU ,内存](#查看-cpu-内存) - [安装/卸载 .deb 包](#安装卸载-deb-包) - [Ubuntu 查看当前远程链接用户](#ubuntu-查看当前远程链接用户) - [grep](#grep) - [保存终端日志](#保存终端日志) - [查看程序使用的动态库](#查看程序使用的动态库) - [查看程序使用的头文件位置](#查看程序使用的头文件位置) - [查看安装源](#查看安装源) - [库相关操作](#库相关操作) - [cd](#cd) - [文件操作](#文件操作) - [复制文件,目录](#复制文件目录) - [移动 重命名 文件或目录](#移动-重命名-文件或目录) - [创建文件删除文件](#创建文件删除文件) - [创建目录删除目录](#创建目录删除目录) - [查看硬件信息](#查看硬件信息) - [文本处理](#文本处理) - [基于列处理文本](#基于列处理文本) - [文本排序](#文本排序) - [文本比对](#文本比对) - [转换](#转换) - [搜索替换](#搜索替换) - [软件管理](#软件管理) - [常用命令](#常用命令) - [管道和重定向](#管道和重定向) - [xargs](#xargs) - [-I {}](#-i-) - [find -print0和xargs -0](#find--print0和xargs--0) - [资源限制 ulimit](#资源限制-ulimit) - [使用ulimit](#使用ulimit) - [使用方式](#使用方式) - [用户启动脚本](#用户启动脚本) - [应用程序启动脚本](#应用程序启动脚本) - [作用范围](#作用范围) - [`/etc/security/limits`](#etcsecuritylimits) - [永久设置 `ulimit -n 65535`](#永久设置-ulimit--n-65535)

chmod

语法:chmod [对谁操作] [操作符] [赋予的权限] 文件名
操作对象:u    用户user,表现文件或目录的所有者
        g    用户组group,表现文件或目录所属的用户组
        o    其他用户other
        a    所有用户all
操作符:+ 添加权限 - 减少权限 =直接给定一个权限 权限:1、r 2、w 3.x

1
2
chmod +x * 
chnod -x *

显示所有系统变量

env

apt 查看软件版本,并安装特定版本的软件

1
2
sudo apt-cache showpkg package  // 查看可以安装的版本
sudo apt-get install xxx=x.y.z  // 指定版本安装

设置环境变量

添加全局变量在/etc/profile文件中

1
2
vi /etc/profile
export PATH="$PATH:/etc/apache/bin"

注意:= 即等号两边 不能有任何空格 修改后运行 ./profile 重新加载环境变量使修改生效。

查找命令在系统中的位置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
which ls # 查找 ls 命令的默认位置
whereis ls # 查找 系统中所有叫做 ls 的文件和文件夹

locate keyword 系统查找文件, 数据库中查找,每天跟新一次, updatedb 命令 创建刷新数据库, 扫描所有文件
find 查找位置 查找参数

find / 根分区查找 . 当前目录查找 
find . -name *xxx* 当前目录中,从文件名中查找包含 xxx 的文件
find / -name *.conf 根分区中查找 .conf 结尾的文件
find / -perm 777 查找硬盘中所有权限是 777 的文件
find / -type d   返回操作系统的目录 d 代表目录 l 代表链接(快捷方式)
find . -name "a*" -exec ls -l {} \;   查出所有以a 开头的文件, 并查看文件详细信息,ls -l 显示文件详细
-user 某个用户的文件 -group  某个组的文件 -ctime 查找某个创建时间的文件 -size 文件大小查找文件
find / -usr EricYang 查找属于EricYang 的文件

归档和压缩

压缩与解压

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
zip 压缩文件名 需要压缩的文件
unzip 压缩的文件名
gzip 文件名
tar 归档命令 将多个文件打包到一个文件
tar -cvf etcbackup.tar /etc 归档etc文件夹
tar -xvf etcbackup.tar  释放归档的文件到当前文件夹
tar -cvzf etcbackup.tar.gz /etc 归档并压缩

tar -xzvf file.tar.gz	# 解压缩到当前目录

zip -r new.zip dirname
unzip new.zip

批量解压文件

1
2
3
for tar in *.tar; do tar xvf $tar; done
for tar in *.tar.gz;  do tar xvf $tar; done
for tar in *.tar.bz2; do tar xvf $tar; done

截图

1
gnome-screenshot -a // 手动截取选定区域

配置 FTP 服务器

1
2
apt-get install vsftpd  // 需要先安装 FTP 服务
service vsftpd start	// 启动

打开 /etc/vsftpd 修改下面几项:

1
2
3
4
5
6
7
listen=YES				// 开启服务
anonmyous_enable=YES // 允许匿名登录
local_enable=YES		// 允许本地用户登录
write_enable=YES		// 允许全局写权限
local_umask=022		// 设置访问权限 上一条写权限同样适用
// 022表示7(rwx)5(rx)5(rx)
// u 所有者 g 同组人员 o 其他组人员

进程相关

进程管理

1
2
3
4
pkill -9 进程名  // 通过进程名杀死(-9 表示强制)
kill -9 进程ID	// 通过进程ID杀死
netstat [-lnp|-anp|-tnp] | grep 8000  // 查找使用8000端口号的进程
ps -aux	// 显示所有用户的进程并打印相应的CMD命令

查看系统磁盘使用率

df -h

查看内核版本

uname -a

查看 CPU ,内存

top // 查看 CPU , 内存情况
free -h // 查看内存使用率

安装/卸载 .deb 包

sudo dpkg -i package.deb // 安装
sudo dpkg -r package // 卸载

Ubuntu 查看当前远程链接用户

w

grep

1
2
3
4
5
grep -C 5 foo file 显示file文件里匹配foo字串那行以及上下5行
grep -B 5 foo file 显示foo及前5行
grep -A 5 foo file 显示foo及后5行

cat xxx | grep -C 5 xxx

保存终端日志

sudo script /mnt/DG/DATA/LOG/screen.log

查看程序使用的动态库

ldd libra

查看程序使用的头文件位置

locate gst/gst.h

查看安装源

vi /etc/apt/sources.list

库相关操作

  • ld 是gcc的链接程序。
  • ldd是查看可执行文件中所依赖的库的程序,比如想查main程序用到了那些动态库,可以直接 ldd main
  • ldconfig用来更新文件/etc/ld.so.conf的修改生效。
  • nm用来查看.so库中的函数名字,标记是T的就是动态库里面生成的名字。如:nm /lib/libc*.so

cd

cd .. 上级目录
cd . 当前目录
cd ~ 用户home目录 /home/EricYang
cd - 上一个工作目录

文件操作

复制文件,目录

cp 源文件 目标文件
cp -r 源文件夹 目标文件夹
cp -rv 源文件夹 目标文件夹 显示复制详细信息

移动 重命名 文件或目录

mv 文件 文件夹
mv 文件 文件夹/文件2 移动文件并重命名
mv 文件 文件2 重命名

创建文件删除文件

touch 文件
rm 文件
rm 文件夹
rm -r 文件夹 删除文件夹下所有文件和此文件夹
rm -ri 文件夹 删除每个文件时有交互
rm -rif 文件夹 强制删除 f 覆盖 i

创建目录删除目录

mkdir dirname
rmdir dirname dirname中非空则删除失败

查看硬件信息

lspci 列出所有pci设备
lspci -v 查看详细信息
lsusb 列出所有usb设备
lsusb -v 查看设备详细信息
lsmod 查看当前加载的所有模块(驱动)

文本处理

基于列处理文本

cut -d  指定分割符 默认TAB
    -f  指定输出的列号
    -c	基于字符进行分割
    cut -d: -f1 /etc/passwd
    cut -c2-6 /etc/passwd

wc	-l 只统计行数
    -w 只统计单词数
    -c 只统计字节数
    -m 只统计字符数

文本排序

sort filename 对文件内容排序, 基于每行首字母
sort	-r 	倒序
        -n 	基于数字进行排序
        -f	忽略大小写
        -u	删除重复行
        -t c 使用c作为分隔符为列进行排序
        -k x 当进行基于指定地府分割味蕾的排序时,指定基于哪个列排序

文本比对

diff filename1 filename2 
        -i 忽略大小写
        -b 忽略空格数量的改变
        -u 同意显示比较信息(一般用以生成patch文件)

转换

tr -d "apple" < filename (只接受重定向数据流)   删除 “apple”
tr 'a-z' 'A-Z' < filename   大小写转换

搜索替换

使用正则表达式搜索替换
sed 's/linux/unix/g' filename      搜索文件linux替换为unix /g 一行中出现多个匹配项的时候都匹配
sed '1,50s/linux/unix/g' filename  1-50行 搜索文件linux替换为unix
sed -e 's/linux/unix/g' -e 's/nash/nash_su/g' filename 指定多个pattern
sed -f sededit filename   sededit 文件保存匹配pttern 用以重复使用

软件管理

查询版本(查看依赖包):
aptitude show 软件名

列出所有已安装的软件包:
apt list --installed 
dpkg -l |awk '/^[hi]i/{print $2}' > 1.txt
aptitude search -F '%p' '~i' > 1.txt
dpkg --get-selections > 1.txt

创建当前安装的软件包的备份:
dpkg --get-selections > list.txt

然后(在另一个系统上)从该列表还原安装:
dpkg --clear-selections
sudo dpkg --set-selections < list.txt

要删除过时的软件包:
sudo apt-get autoremove

常用命令

date 当前时间 
date -u 格林威治时间
date +%Y--%m--%d 2012--10--02
date -s "20:20:20"  修改当前日期的时间,需要超级用户权限
cal 查看日历
uptime 查看系统的运行时间, 系统运行了多长时间,负载,用户登陆数目
cat 文件 显示文件内容
more 文件 翻页显示文件内容,只能向下翻页 space
less 文件  上下翻页 按Q退出
head 文件 显示文件头几行 默认10行
head -n 3 文件 只显示开透视三行
tail 文件 显示末尾几行 默认10行 
tail -n 3 文件 显示文件尾部3行
tail -f 文件 追踪显示文件更新,日志 , 
echo "xxx" >> 文件  将xxx追加到文件的末尾

管道和重定向

多命令协作:通过管道和重定向完成.(将多个命令结合在一起),几乎所有命令的输入和返回输出是纯文本.
example : cat 输入 文件路径 返回 文件文本内容

命令行shell的数据流定义:

名称 说明 编号 默认
STDIN 标准输入 0 键盘
STDOUT 标准输出 1 终端
STDERR 标准错误 2 终端

命令通过STDIN接收参数或数据,通过STDOUT输出结果或通过STDERR输出错误.

分类 关键字 定义 例子
重定向 > 将STDOUT重定向到文件(覆盖) echo “baidu” > outfile / ls > outfile
» 将STDOUT重定向到文件(追加) echo “baidu” » outfile/ date »outfile
2> 将STDERROR重定向到文件(覆盖) ls nothere 2> errorout
2>&1 将STDERROR与STDOUT结合 ls nothere 2>&1 alloutput
< 重定向STDIN grep linuxcast < /etc/passwd
管道 | 将一个命令的STDOUT ls -l | grep linuxcast
作为另一个命令的STDIN find / -user linuxcast | grep video

2> /dev/null 重定向给null,丢弃

xargs

xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令,例如:

1
2
3
4
5
6
find /sbin -perm +700 |ls -l       #这个命令是错误的
find /sbin -perm +700 |xargs ls -l   #这样才是正确的

find ./ -type f -name *.d -print0 | xargs -0 rm -rf #删除所有 .d 文件
find ./ -type f -name *.o -print0 | xargs -0 rm -rf #删除所有 .o 文件
find ./ -type f -name *.depend -print0 | xargs -0 rm -rf #删除所有 .depend 文件

-I

xargs 的一个选项 -I,使用 -I 指定一个替换字符串 {},这个字符串在 xargs 扩展时会被替换掉,当 -I 与 xargs 结合使用,每一个参数命令都会被执行一次:

1
2
# 复制所有图片文件到 /data/images 目录下
ls *.jpg | xargs -n1 -I {} cp {} /data/images

find -print0和xargs -0

find -print0表示在find的每一个结果之后加一个NULL字符,而不是默认加一个换行符。find的默认在每一个结果后加一个’\n’,所以输出结果是一行一行的。当使用了-print0之后,就变成一行了。
然后xargs -0表示xargs用NULL来作为分隔符。这样前后搭配就不会出现空格和换行符的错误了。选择NULL做分隔符,是因为一般编程语言把NULL作为字符串结束的标志,所以文件名不可能以NULL结尾,这样确保万无一失。

1
find . -name "*.txt" -print0 | xargs -0 rm

资源限制 ulimit

通过 ulimit 改善系统性能
查看系统用户所有限制值:ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 30488
max locked memory       (kbytes, -l) 16384
max memory size         (kbytes, -m) unlimited
open files                      (-n) 8192       # 用户最多打开文件个数
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192       # 最大用花栈
cpu time               (seconds, -t) unlimited
max user processes              (-u) 30488      # 最大的进程个数
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:

  • 所创建的内核文件的大小
  • 进程数据块的大小
  • Shell 进程创建文件的大小
  • 内存锁住的大小
  • 常驻内存集的大小
  • 打开文件描述符的数量
  • 分配堆栈的最大大小
  • CPU 时间
  • 单个用户的最大线程数
  • Shell 进程所能使用的最大虚拟内存。
  • 同时,它支持硬资源和软资源的限制。

使用ulimit

ulimit 命令的格式为:ulimit [options] [limit]

选项 [options] 含义 例子
-H 设置硬资源限制,一旦设置不能增加。 ulimit – Hs 64;限制硬资源,线程栈大小为 64K。
-S 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。 ulimit – Sn 32;限制软资源,32 个文件描述符。
-a 显示当前所有的 limit 信息。 ulimit – a;显示当前所有的 limit 信息。
-c 最大的 core 文件的大小, 以 blocks 为单位。 ulimit – c unlimited; 对生成的 core 文件的大小不进行限制。
-d 进程最大的数据段的大小,以 Kbytes 为单位。 ulimit -d unlimited;对进程的数据段大小不进行限制。
-f 进程可以创建文件的最大值,以 blocks 为单位。 ulimit – f 2048;限制进程可以创建的最大文件大小为 2048 blocks。
-l 最大可加锁内存大小,以 Kbytes 为单位。 ulimit – l 32;限制最大可加锁内存大小为 32 Kbytes。
-m 最大内存大小,以 Kbytes 为单位。 ulimit – m unlimited;对最大内存不进行限制。
-n 可以打开最大文件描述符的数量。 ulimit – n 128;限制最大可以使用 128 个文件描述符。
-p 管道缓冲区的大小,以 Kbytes 为单位。 ulimit – p 512;限制管道缓冲区的大小为 512 Kbytes。
-s 线程栈大小,以 Kbytes 为单位。 ulimit – s 512;限制线程栈的大小为 512 Kbytes。
-t 最大的 CPU 占用时间,以秒为单位。 ulimit – t unlimited;对最大的 CPU 占用时间不进行限制。
-u 用户最大可用的进程数。 ulimit – u 64;限制用户最多可以使用 64 个进程。
-v 进程最大可用的虚拟内存,以 Kbytes 为单位。 ulimit – v 200000;限制最大可用的虚拟内存为 200000 Kbytes。

使用方式

用户启动脚本

如果用户使用的是 bash,就可以在用户的目录下的 .bashrc 文件中,加入 ulimit – u 64,来限制用户最多可以使用 64 个进程。此外,可以在与 .bashrc 功能相当的启动脚本中加入 ulimt。

应用程序启动脚本

如果用户要对某个应用程序 myapp 进行限制,可以写一个简单的脚本 startmyapp。

1
2
ulimit – s 512 
myapp

以后只要通过脚本 startmyapp 来启动应用程序,就可以限制应用程序 myapp 的线程栈大小为 512K。

作用范围

ulimit 限制的是当前 shell 进程以及其派生的子进程

举例来说,如果用户同时运行了两个 shell 终端进程,只在其中一个环境中执行了 ulimit – s 100,则该 shell 进程里创建文件的大小收到相应的限制,而同时另一个 shell 终端包括其上运行的子程序都不会受其影响

/etc/security/limits

是否有针对某个具体用户的资源加以限制的方法呢?答案是有的,方法是通过修改系统的 /etc/security/limits 配置文件。该文件不仅能限制指定用户的资源使用,还能限制指定组的资源使用。该文件的每一行都是对限定的一个描述,格式如下:

<domain> <type> <item> <value>

  • domain 表示用户或者组的名字,还可以使用 * 作为通配符。
  • Type 可以有两个值,soft 和 hard。I
  • tem 则表示需要限定的资源,可以有很多候选值,如 stack,cpu,nofile 等等,分别表示最大的堆栈大小,占用的 cpu 时间,以及打开的文件数。通过添加对应的一行描述,则可以产生相应的限制。 例如:

* hard noflle 100

该行配置语句限定了任意用户所能创建的最大文件数是 100。
现在已经可以对进程和用户分别做资源限制了,看似已经足够了,其实不然。很多应用需要对整个系统的资源使用做一个总的限制,这时候我们需要修改 /proc 下的配置文件。/proc 目录下包含了很多系统当前状态的参数,例如 /proc/sys/kernel/pid_max,/proc/sys/net/ipv4/ip_local_port_range 等等,从文件的名字大致可以猜出所限制的资源种类

永久设置 ulimit -n 65535

/etc/security/limits.conf:

1
2
*    soft    nofile 8192
*    hard    nofile 8192