工具参考书之Linux命令学习

  1. 写在前面
  2. 文件管理
    1. rm:删除文件或目录
    2. ls:列出目录内容
    3. du:查看目录或文件所占用磁盘空间的大小
    4. cp:复制文件或目录
    5. mkdir:建立目录
    6. touch:改变文件或目录时间
    7. cat:将文件显示到基本输出
    8. ln:链接文件或目录
    9. grep: 查找文件里符合条件的字符串
    10. find:查找文件或目录
    11. locate:查找文件
    12. which:查找环境变量中的文件
    13. rename:批量重命名
    14. unzip:解压zip文件
    15. tar:备份还原文件
    16. cmp:比较两个文件是否有差异
    17. comm:比较两个已排过序的文件
    18. file:辨识文件类型
    19. echo:显示字符串到标准输出
    20. dd: 块拷贝命令
    21. chmod:变更文件或目录权限
    22. chown:变更文件或目录拥有者或所属群
  3. 系统管理
    1. useradd:添加用户
    2. userdel:删除用户
    3. usermod:修改用户基本信息
    4. passwd:设置用户密码
    5. finger: 查看用户信息
    6. id:查看用户ID(UID),组ID(GID)
    7. chfn:更改figner显示的用户信息
    8. chsh:更改使用的shell
    9. su:变更用户身份
    10. sudo:以其他身份来执行指令
    11. groupadd: 添加用户组
    12. groupmod:修改用户组信息
    13. groups: 显示用户所属组
    14. gpasswd:管理组
    15. shutdown:系统关机命令
    16. export:设置或显示环境变量
    17. free:显示内存状态
    18. &:后台运行程序
    19. jobs:显示后台任务状态
    20. kill:删除执行中的进程
    21. pkill:直接杀死运行中的程序
    22. xkill:杀死图形程序
    23. pgrep:查找进程id
    24. ps:报告程序状况
    25. pstree:以树状图显示程序
    26. screen:多重视窗管理程序
    27. alias:设置指令的别名
    28. systemd:系统的启动和管理 (参考文章原地址)
      1. Unit管理
      2. 日志管理
      3. 其它systemd常用的命令
  4. 设备管理
    1. mount:挂载命令
    2. findmnt:查询挂载的文件系统
    3. df:显示磁盘相关信息
    4. lspci:查看pci设备信息
    5. blkid: 查看块设备(包括交换分区)的信息
    6. lsblk:查看块设备
    7. lsusb:查看usb设备
    8. lsmod:查看内核已经载入模块状态
    9. modinfo:显示模块信息
    10. depmod:分析模块的依赖性
    11. modprobe:用于内核添加删除模块
    12. insmod:向内核插入模块
    13. rmmod:卸载模块
    14. ldd:查看程序所需要的共享库
    15. xrandr:管理显示器
  5. 软件包管理
    1. pkg-config:用于提供库等路径
    2. pacman:Arch软件包管理工具
    3. Ubuntu软件包管理
      1. aptitude
      2. apt-get
      3. apt-cache
      4. dpkg

写在前面

  • 查看命令帮助:man (manual),如 man ls;
  • 命令参数前一横:一般为字符形式,如 -d;命令参数前两横:一般为单词形式,如 --directory (注意:这里说的是一般情况);
  • 输入命令时多用Tab,可以自动补全,尤其是zsh
  • 这里的命令均是学了多少就记录多少,一个命令不会详解其所有用法。
  • Linux命令大全

文件管理

rm:删除文件或目录

rm file
    # 移除文件
rm -d dir
rm --directory dir
    # 移除空目录
rm -r folder/dir
rm -R folder/dir
rm -recursive folder/dir
    # 移除非空目录dir, -r 递归处理,将dir目录及目录下文件和子目录一并处理
rm -f -force
    # 强制删除
rm -v -verbose
    # 显示执行过程

ls:列出目录内容

ls -a
    # 显示所有文件和目录,包括隐藏的
ls -l
    # 显示详细信息
ls -lh
    # 用G M K等大单位来显示文件大小
ls -l --block-size=MB
    # 用M作为单位显示大小
ls -ld /etc/r*.d
ls -ld /etc/init.d
    # 详细显示r*.d(*是通配符,init.d是一个目录)目录信息,而不显示目录包含的文件信息

du:查看目录或文件所占用磁盘空间的大小

du -s <dirname>
    # 只显示 <dirname>的大小,不显示子目录或子文
du -sh <dirname>
    # 以合适的单位显示<dirname>的大小
du -a <dirname>
    # 显示<dirname>及子目录和子文件的大小

# 替代品:ncdu

cp:复制文件或目录

cp file dir/ff
    # 将file文件复制到dir目录下,并重命名为ff
cp -r floder/dir /temp/
    # 将目录dir及目录下的文件和子目录复制到temp下,即有temp/dir

mkdir:建立目录

mkdir a
    # 创建目录
mkdir -p /a/b/c
    # 创建多级目录

touch:改变文件或目录时间

touch file
    # 建立空文件file

cat:将文件显示到基本输出

cat file
    # 显示file的内容,基本输出即指屏幕
cat -n 或 --number
    # 输出行号

ln:链接文件或目录

ln -s file_src file_des
    # 建立符号连接,打开file_des时,即打开file_src,相当于快捷方式
    # -s 为软链接,保持同步变化,但不占硬盘空间,而硬链接同样保持同步变化,但占硬盘空间

grep: 查找文件里符合条件的字符串

grep str file
    # 在file中查找str字符串
grep -n或--line-number
    # 显示行列
grep -i或--ignore-case
    # 忽略字符大小写

find:查找文件或目录

find ~/ -name filename
    # 在 ~/ 查找filename的文件或目录
find ~/ -iname '*file'
    # 忽略大小写,查找符合 *file 形式的文件或目录
find ~/ -name '[aA][bB]d'
    # 查找 abd或Abd或aBd或ABd
find -name 'src*'
    # 在当前目录查找以src开头的文件或目录
find -name '*src*'
    # 查打包含src的文件或目录
find -size 30M
    # 查找等于30M的文件
find -size +10M -size -30M
    # 查找小于30M但大于10M的文件

locate:查找文件

locate [-d<数据库文件>][--help][--version][范本样式...]
locate /etc/sh
    # 搜索etc目录下所有以sh开头的文件
updatedb
    # 手动更新数据库/var/lib/locatedb

which:查找环境变量中的文件

which [-n<文件名长度>][-p<文件名长度>][-w]
which ls
    # 查看命令ls的位置

rename:批量重命名

rename perlexpr file
    # file:要处理的文件
    # perlexpr:perl正则表达式(ub16.04的rename是用perl实现的,所以没有 rename from to file形式)

rename s/file/list/ file*
    # 将所有file开头的文件变成list开头。
    # "s/<str>/<rep>/":替换,str替换成rep
rename tr/A-Z/a-z/ file*
    # 将所有file开头的文件,变成小写
    # "tr/<par>/<rep>/":转化,par转成rep

unzip:解压zip文件

unzip [-cflptuvz][-agCjLMnoqsVX][-P<密码>][-d][-x]
unzip file.zip -d ~/dir
    # 解压file文件,放~/dir目录中

tar:备份还原文件

-c # 建立新的归档文件
-r # 向归档文件末尾追加文件
-x # 从归档文件中解出文件
-t # 查看归档包中的文件
-u # 更新原压缩包中的文件
   # 这五个是独立的命令,压缩解压只会用到其中一个

-v # 处理过程中输出相关信息
-C # 解压到指定文件夹,大写的C
-f # 后面要立刻接被处理的档案名,建议-f单独写一个选项
-j # 使用bzip2算法,后缀为tar.bz2(用得较多)
-z # 使用gzip算法,后缀为tar.gz(用得较多)
-J # 使用xz算法,后缀为tar.xz
-Z # 使用compress算法,后缀为tar.Z

tar -c -f tmp.tar file.c
    # 创建归档文件tmp.tar,tar只打包,不压缩
tar -r -f tmp.tar <dir>
    # 向tmp.tar中追加目录
tar -xj -f tmp.tar.bz2
    # 解压归档文件tmp.tar.bz2,使用bzip2压缩
tar -xz -f tmp.tar.gz -C <dir>
    # 解压归档文件tmp.tar.gz到指定目录,使用gzip压缩
tar -t -f tmp.tar.gz | grep foo
    # 查看归档文件,并查找含有关键foo的文件或目录

cmp:比较两个文件是否有差异

cmp file1.txt file2.txt
    # 比较两个文件,相同则不输出任何消息
cmp - file.txt
cmp file.txt -
    # 将file.txt与标准输入(即从终端输入)比较。输入命令回车后,需要从终端输入要比较的内容,回车然后ctrl+d输入结束,开始比较

comm:比较两个已排过序的文件

comm [-123][第1个文件][第2个文件]
    -1   # 不显示只在第1个文件里出现过的列。
    -2   # 不显示只在第2个文件里出现过的列。
    -3   # 不显示只在第1和第2个文件里出现过的列。
comm file1 file2
    # 比较两个文件
    # 结果: 仅file1出现的行; 仅file2出现的行; 两个文件均出现的行

file:辨识文件类型

file text.txt
    # 查看文件类型
file -z tempfile
    # 尝试解文件

echo:显示字符串到标准输出

echo [-ne][字符串]
echo -e 'hello world\n'
    # 对\n等字符转义,同c语言中的转义
echo $PATH
    # 显示变量名PATH
echo '
    # 从标准输入后再输出,输入单引号’后结束输入,开始输入(两个单引号‘’算一个命令)

dd: 块拷贝命令

dd [option]

# if 输入文件
# of 输出文件
# bs 设置读写的块大小为bs个字节,可代替ibs 和obs,默认大小为1个扇区(512字节)
# ibs 读入块大小
# obs 写入块大小
# skip=N:从输入文件开头跳过N个块后再开始复制(读)
# seek=N:从输出文件开头跳过N个块后再开始复制(写)
# count=N:拷贝N个块
# conv:设置转换格式

# 块大小单位:
#   c=1, w=2, b=512
#   kB=1000           , K=1024
#   MB=1000*1000      , M=1024*1024
#   GB=1000*1000*1000 , G=1024*1024*1024

dd if=/dev/zero of=img count=1000
# 创建512*1000字节的文件
dd if=/dev/zero of=img count=1000 bs=1
# 创建 1000字节的文件

chmod:变更文件或目录权限

chmod [-cfRv][--help][--version][mode][文件或目录]
  -R 表示对当前目录下的所有文件和子目录进行相同的权限更改
  mode 权限设置字串,格式为[ugoa] [+-=] [rwx]
      u user,表示文件的拥有者
      g group,表示与此文件拥有者属于一个组群的人
      o other,表示其他用户,拥有者和组群之外的人
      a all,表示包含以上三者即文件拥有者(u)、群组(g)、其他(o)
      + 表示增加权限
      - 表示取消权限
      = 表示唯一设置权限
      r 表示有读取的权限
      w 表示有写入的权限
      x 表示有执行的权限
    mode = 数字abc,chmod可以用数字来表示权限
        a,b,c各为一个数字,分别表示User、Group、及Other的权限。
        r=4,w=2,x=1  (即二进制权值)
        若要rwx属性则4+2+1=7
        若要rw-属性则4+2=6
        若要r-x属性则4+1=5
chmod u+w file          # u增加写入权限
chmod u=w file          # u设置为只有定入权限
chmod 777 file          # 所有用户拥用rwx权限

chown:变更文件或目录拥有者或所属群

chown me file
    # file所有者改为me
chown -R hello:staff /folder
    # folder目录及目录下所有目录和文件的所有者改为hello,群组为staff
    # -R 递归操作当前目录下的所有目录和文件

系统管理

useradd:添加用户

useradd abc -g root -G jgrp
    # 创建用户abc,属于root组,附加群组为jgrp
useradd abc -d /home/abc -m
    # 指定用户的主目录为/home/abc,-m表示若主目录不存在则自动创建
useradd abc -s zsh
    # 指定用户abc使用的shell为zsh
useradd abc -u 544
    # 指定用户ID为544
adduser也可以添加户

userdel:删除用户

userdel -r abc
    # 删除用户时,也删除其主目录
userdel -f abc
    # 强制删除用户

usermod:修改用户基本信息

usermod -G staff abc
    # 将abc添加到 staff组中
usermod -l ccd abc
    # 将用户名abc改为ccd
usermod -d /home/ccd abc
    # 将abc的主目录改成ccd

passwd:设置用户密码

passwd
    # 修改当前用户密码
passwd abc
    # 更改用户abc的密码

finger: 查看用户信息

finger [-lmsp]
    # -l:列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,还有计划文件和方案文件内容;
    # -m:排除查找用户的真实姓名;
    # -s:列出该用户的帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话;
    # -p:列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,但不显示该用户的计划文件和方案文件内容。

id:查看用户ID(UID),组ID(GID)

id abc
    # 显示abc的UID、GID和归属组

chfn:更改figner显示的用户信息

chfn -[fhop] <用户名>
    # -f: 设置真实姓名(full-name)
    # -h: 设置电话(home-phone)
    # -o: 设置办公地址(office)
    # -p: 设置办公电话(office phone)

chsh:更改使用的shell

chsh -l
    # 查看可用的shell
chsh -s /bin/zsh abc
    # 将用户abc使用的shell改成zsh

su:变更用户身份

su root
# 切换root用户,不带用户时,预设为root
# root的"~/"是"/root",不是"/home/username"

sudo:以其他身份来执行指令

sudo passwd
    # 初次设置root密码,不然不能用root

groupadd: 添加用户组

groupadd -g 344 abcgrp
    # 创建组abcgrp,指定组ID为344
groupdel abcgrp
    # 删除组abcgrp

groupmod:修改用户组信息

groupmod -g 522 abcgrp
    # 将abcgrp的组ID改成522
groupmod -n ccdgrp abcgrp
    # 将abcgrp组名改为ccdgrp

groups: 显示用户所属组

groups abc
    # 显示用户abc所属的组

gpasswd:管理组

gpasswd -[adAr]
# -a:添加用户到组
# -d:从组删除用户
# -A:指定管理员
# -r:删除密码

gpasswd -A peter group
# 添加peter为group组的管理员
gpasswd -a mary group
# 添加mary到group组

shutdown:系统关机命令

shutdown -h     #关闭系统,即关机
shutdown -r     # 重启
reboot          # 重启

export:设置或显示环境变量

export PATH="$PATH:$HOME/dir"
    # 添加路径$HOME/dir到PATH中,只是临时添加,不是更改配置文件

free:显示内存状态

free -b(k)(m)(g)
    # 以byte(kb)(mb)(gb)显示内存状态
free -s 5 -c 10
    # 每隔5秒显示一次,共显示10次

&:后台运行程序

command &
# 在后台运行命令command,但标准输出仍会显示到当前终端
# command命令运行结束后,自动结束
sh tmp.sh & > /dev/null
# 后台运行tmp.sh,并将输出结重定向到空设备,即不显示输出
ctrl+z
# 将终端的运行的命令放到后台,并且暂停运行
# 如在终端打开了chrome,这时终端不能用且不能关了,用ctrl+z就可将chrome放入后台运行

jobs:显示后台任务状态

jobs
# 显示与当前终端相关连的后台任务
# 可以看到任务的工作号,即1,2,3...
jobs -l
# 同时显示后台任的工作号和PID
bg %n
# 继续运行暂停(suspended)的任务,任务工作号为n
fg %n
# 将后台运行的任务放到前台运行,任务工作号为n

kill:删除执行中的进程

kill [-s <信息名称或编号>][程序]
kill [-l <信息编号>]
# [程序]可以是程序的 PID 或是 PGID,也可以是工作编号;
kill 2950           # 结束PID为2950的程序
kill %n             # 结束工作号为n的程序

kill -s SIGTERM 2950 # 请求正常结束程序,此为默认选项
kill -15 2950        # 请求正常结束程序,此为默认选项
kill -l 15           # 查看信号15的名称,会输出“TERM”,即SIGTERM信号

kill -s SIGKILL 2950 # 强制结束程序
kill -9 2950         # 强制结束程序
kill -l SIGKILL      # 醒看信号SIGKILL的编号,会输出9

pkill:直接杀死运行中的程序

pkill firefox       # 结束firefox程序
                    # firefor是程序名,也即是“命令名”
                    # 要结束一个程序的单个进程,使用 kill PID

xkill:杀死图形程序

xkill           # 运行后,鼠标光标会会变成“X”型,点击相应的程序图形窗口就可以结束程序

pgrep:查找进程id

pgrep chro -l           # 查找关键字chro的进程id,并显示进程名称

ps:报告程序状况

ps:process status
ps -A | grep chrome     # 在所有运行的程序中查找chrome

pstree:以树状图显示程序

pstree:process status tree
pstree                  # 以树状图显示程序
pstree -a               # 显示所有程序及其相关信息

screen:多重视窗管理程序

screen -S newwork       # 新建一个视窗
screen -ls              # 列出所有视窗
screen -r work          # 恢复work视窗

alias:设置指令的别名

alias name = 'command line'     # 基本用法
alias mv='mv -i'                # mv就自带参数-i
alias -p                        # 列出现有的所有别名

systemd:系统的启动和管理 (参考文章原地址

Systemd的优点是功能强大,使用方便,缺点是体系庞大,非常复杂,与操作系统的其他部分强耦合。Systemd并不是一个命令,而是一组命令,涉及到系统管理的方方面面。

Unit管理

Systemd可以管理所有系统资源,不同的资源统称为Unit(单位)。Unit一共分成12种:

Service unit   : 系统服务
Target unit    : 多个Unit构成的一个组
Device Unit    : 硬件设备
Mount Unit     : 文件系统的挂载点
Automount Unit : 自动挂载点
Path Unit      : 文件或路径
Scope Unit     : 不是由Systemd启动的外部进程
Slice Unit     : 进程组
Snapshot Unit  : Systemd快照,可以切回某个快照
Socket Unit    : 进程间通信的socket
Swap Unit      : swap文件
Timer Unit     : 定时器
  • systemctl:Systemd的主命令
# 对于用户来说,最常用的是下面这些命令,用于启动和停止Unit(主要是service)。
systemctl start apache.service     # 立即启动一个服务
systemctl stop apache.service      # 立即停止一个服务
systemctl restart apache.service   # 重启一个服务
systemctl kill apache.service      # 杀死一个服务的所有子进程
systemctl reload apache.service    # 重新加载一个服务的配置文件
systemctl daemon-reload            # 重载所有修改过的配置文件
systemctl show httpd.service       # 显示某个Unit的所有底层参数
systemctl show -p CPUShares httpd.service           # 显示某个Unit的指定属性的值
systemctl set-property httpd.service CPUShares=500  # 设置某个Unit的指定属性
#查看系统状态和单个Unit的状态
systemctl status                            # 显示系统状态
sysystemctl status bluetooth.service        # 显示单个Unit的状态
systemctl -H root@<ip> status httpd.service # 显示远程主机的某个Unit的状态

# 除了status命令,systemctl还提供了三个查询状态的简单方法,主要供脚本内部的判断语句使用。
systemctl is-active application.service     # 显示某个Unit是否正在运行
systemctl is-failed application.service     # 显示某个Unit是否处于启动失败状态
systemctl is-enabled application.service    # 显示某个Unit服务是否建立了启动链接
                            # 还有基本的系统管理
sudo systemctl reboot       # 重启系统
sudo systemctl poweroff     # 关闭系统,切断电源
sudo systemctl halt         # CPU停止工作
sudo systemctl suspend      # 挂起系统
sudo systemctl hibernate    # 让系统进入冬眠状态
sudo systemctl hybrid-sleep # 让系统进入交互式休眠状态
sudo systemctl rescue       # 启动进入救援状态(单用户状态)
  • systemctl list-units:查看当前系统的所有Unit
systemctl list-units                        # 列出正在运行的Unit
systemctl list-units --all                  # 列出所有Unit,包括没有找到配置文件的或者启动失败的
systemctl list-units --all --state=inactive # 列出所有没有运行的Unit
systemctl list-units --failed               # 列出所有加载失败的Unit
systemctl list-units --type=service         # 列出所有正在运行的、类型为service的Unit

日志管理

Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。

sudo journalctl       # 查看所有日志(默认情况下 ,只保存本次启动的日志)
sudo journalctl -k    # 查看内核日志(不显示应用日志)
sudo journalctl -b    # 查看系统本次启动的日志
sudo journalctl -b -0 # 查看系统本次启动的日志
sudo journalctl -b -1 # 查看上一次启动的日志(需更改设置)

# 查看指定时间的日志
sudo journalctl --since="2012-10-30 18:17:16"
sudo journalctl --since "20 min ago"
sudo journalctl --since yesterday
sudo journalctl --since "2015-01-10" --until "2015-01-11 03:00"
sudo journalctl --since 09:00 --until "1 hour ago"

sudo journalctl -n 20                    # 显示尾部指定行数的日志
sudo journalctl -f                       # 实时滚动显示最新日志
sudo journalctl /usr/lib/systemd/systemd # 查看指定服务的日志
sudo journalctl _PID=1                   # 查看指定进程的日志
sudo journalctl /usr/bin/bash            # 查看某个路径的脚本的日志
sudo journalctl _UID=33 --since today    # 查看指定用户的日志
sudo journalctl -u nginx.service         # 查看某个 Unit 的日志

# 查看指定优先级(及其以上级别)的日志,共有8级
# 0: emerg
# 1: alert
# 2: crit
# 3: err
# 4: warning
# 5: notice
# 6: info
# 7: debug
sudo journalctl -p err -b

sudo journalctl -b -u nginx.service -o json          # 以 JSON 格式(单行)输出
sudo journalctl -b -u nginx.serviceqq -o json-pretty # 以 JSON 格式(多行)输出,可读性更好

其它systemd常用的命令

  • systemd-analyze:查看启动耗时
  • hostnamectl:查看当前主机的信息
  • localectl:查看本地化设置
  • timedatectl:查看当前时区设置
  • loginctl:查看当前登录的用户

设备管理

mount:挂载命令

mount [-t vfstype][-o options][挂载设备][目录]
mount /dev/sda1 mymount
    # 把sda1(第一块硬盘第一分区)挂载到mymount目录
mount -o rw /dev/sda1 mymount
    # 读写方式挂载
mount -o loop /file mymount
    # 将文件(如ISO文件)挂载成设备
mount -t fat32 /dev/sda1 mymount
    # 指定要挂载的设备类型为fat32

findmnt:查询挂载的文件系统

findmnt
    # 以树状图列出所有挂载的文件系统
findmnt /dev/sdb1
    # 查询一个设备的挂载信息
findmnt /
    # 查询挂载点信息

df:显示磁盘相关信息

df  -T -h
    # 显示磁盘信息,包括分区类型,大小以G M K 等大单位显示

lspci:查看pci设备信息

lspci
    # 显示pci简略信息
lspci -v
    # 显示pci设备详细信息,-vv更详细,-vvv非常详细

blkid: 查看块设备(包括交换分区)的信息

sudo blkid          # 列出当前系统中所以已挂载文件系统的类型
blkid /dev/sda1     # 查看指定设备信息
sudo blkid -s LABEL # 查看设备的LABEL
sudo blkid -s UUID  # 查看设备的UUID

lsblk:查看块设备

lsblk
# 列出块设备,会显示名称(sda,sdb)、大小、挂载点等信息
lsblk -f
# 列出文件系统、标签、UUDI等信息
lsblk -p
# 列出设备完整路径

lsusb:查看usb设备

lsusb
    # 列出所有usb信息
lsusb -v
    # 显示pci设备详细信息,-vv更详细

lsmod:查看内核已经载入模块状态

lsmod
  # 按行显示:Module, Size, Used by

modinfo:显示模块信息

modinfo ext3
    # 查看ext3模块的详细信息

depmod:分析模块的依赖性

depmod mod.ko
    # 检查mod.ko的依赖关系,并定入modules.dep文件和映射文件
depmod -n mod.ko
    # 检查mod.ko的依赖关系,将结果输出到stdout

modprobe:用于内核添加删除模块

modprobe mpd
    # 加载mpd模块
    # modprobe会更据modules.dep中的依赖关系加载
modprobe -r mpd
    # 卸载mpd模块

insmod:向内核插入模块

insmod mpd
    # 加载mpd模块
    # insmod是直接载入,不能处理模块依赖关系

rmmod:卸载模块

rmmod mpd
    # 卸载mpd模块
rmmod -f mpd
    # 强制卸载mpd模块
rmmod -w mpd
    # 将mpd模块孤立,直至不被使用

ldd:查看程序所需要的共享库

ldd test
    # 显示test所需要的共享库
ldd -d test
    # 为数据对象执行重定位,报告丢失的EFL对象
ldd -r test
    # 为数据对象和函数执行重定位,报告丢失的EFL对象

xrandr:管理显示器

xrandr
    # 查看当前显示器状态
xrandr --output HDMI-1 --mode 1920x1080
    # 设置通过HDMI连接的显示器分辨率
    # 设置完后一般两显示为复制显示
xrandr --output LVDS-1 --primary
    # 将笔记本自身显示器设为主显示器
xrandr --output HDMI-1 --right-of LVDS-1
    # 设置HDMI在LVDS的右边扩展显示
xrandr --ourput HDMI-1 --off
    # 关闭HDMI-1

# 附:arandr, lxrandr为xrandr的图形客户端
# 附:xrandr的设置为临时设置,在/etc/X11/xorg.conf可进行文件配置

软件包管理

pkg-config:用于提供库等路径

pkg-config --libs opecv
    # 查看opencv的库位置,将会有如下输出:
-L/usr/local/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lippicv -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core
    # 可以看到-L和-l表示库的目录的和文件
pkg-config --cflags opencv
    # 查年opencv的cflags参数,将会有如下输出:
-I/usr/local/include/opencv -I/usr/local/include
    # 可以看到-I表示包含的目录

    # pkg-config是找一个*.pc的文件,可以查看opencv.pc的位置:
locate opnecv.pc
    # 我的在/usr/local/lib/pkgconfig/opencv.pc

pacman:Arch软件包管理工具

pacman -S <packge-name>     # 安装软件(install)
pacman -U <pkg-file>        # 安装本地包(unpack),其扩展名为 *.tar.gz, *.tar.xz
pacman -U <http://pkg-file> # 安装远程包

pacman -Sy                  # 同步(synchronize)软件数据库,先比较是否为最新的,是的话不再下载数据库
pacman -Syy                 # 强制同步软件数据库,无论是否为最新的,都重新下载数据库
                            # 将数据库理解成一个软件列表,从中可以知道有哪些软件
pacman -Su                  # 更新(update)整个系统,即比对数据库,有更新版本的软件,则更新
pacman -Syu                 # 先同步数据库,然后再更新系统
pacman -Syyu                # 先强制同步数据库,然后再更新系统
pacman -Sy <packge-name>    # 先同步数据库,然后安装软件
pacman -Ss <keywords>       # 在数据库和已安装软件包中查询(search)软件
pacman -Si <keywords>       # 显示软件包信息(information)
pacman -Sw <keywords>       # 下载(download)软件包,但不安装
pacman -Sc                  # 清理(clean)未安装的软件包缓存
                            # 包文件位于 /var/cache/pacman/pkg(有软件包缓存时,下次重新安装则不用再下载)
pacman -Scc                 # 清理所有缓存软件包

pacman -Qs <packge-name>    # 查询已安装的软件包
pacman -Qi <packge-name>    # 查询已安装软件包的信息

pacman -R <packge-name>     # 删除(remove)单个软件包,保留该软件包全部的依赖
pacman -Rs <packge-name>    # 删除(remove)单个软件包,删除该软件包的依赖(如果该依赖没有与其它软件存在依赖关系)
pacman -Rsc <packge-name>   # 删除(remove)单个软件包,删除该软件包的依赖,和所以依赖该软件包的程序

Ubuntu软件包管理

  • apt-get是一款适用于Unix和Linux系统的应用程序管理器,成名的原因之一在于其出色的解决软件依赖关系的能力。
  • aptitude与apt-get一样,是Debian及其衍生系统中功能极其强大的包管理工具。与apt-get不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。
  • dpkg为Debian专门开发的套件管理系统,但不会解决模块的依赖关系,且不会关心ubuntu的软件仓库内的软件,可以用于安装本地的deb文件。

aptitude

aptitude search package
aptitude search "str1 str2"  # keyword: str1 && str2
aptitude search str1 str2    #          str1 || str2
    # 查找软件包,i为已经安装,p为未安装的
aptitude install package
    # 安装软件包
aptitude remove package
    # 删除软件包

apt-get

apt-get install package
    # 安装软件包
apt-get install --reinstall package
    # 重新安装包
apt-get -f install
    # 修复安装,比如dpkg装完一个软件包后,提示一些库没有,用此命令即可修复
apt-get remove package
    # 删除软件包(不包抱配置文件)
apt-get remove --purge pakage
    # 删除软件包(包抱配置文件)
add-apt-repository ppa:"ppa_name"
    # 添加ppa个人软件源,将其添加至当前apt(/etc/apt/sources.list.d)库中
apt-get update
    # 是同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,即运行这条命令时,是我们想知道软件源中有哪些软件了
sudo apt-get autoclean
    # 清理旧版本的软件缓存
sudo apt-get clean
    # 清理所有软件缓存
sudo apt-get autoremove
    # 删除系统不再使用的孤立软件

apt-cache

apt-cache show package
    # 显示指定软件包的信息,包括版本号,安装状态和包依赖关系等
apt-cache search package
    # 按关键字查找软件包
apt-cache depends package
    # 显示指定软件包所依赖的软件包

dpkg

dpkg -i package.deb
    # 安装软件包,安装deb包,但不能自己解模专依赖问题,只会提示你需要安装依赖的模块
dpkg -r package
    # 删除软件包
dpkg -r --purge pacakge
    # 连同软件包的配置文件一块删除
dpkg --info xxx.deb
    # 查看deb包的信息
dpkg -l
    # 查看系统中已安装软件包信息
dpkg --instdir=DIR
    # 指定安装目录
dpkg -L pacakge
    # 列出与该包相关联的文件

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 [ yehuohan@gmail.com ]

文章标题:工具参考书之Linux命令学习

本文作者:Y

发布时间:2017-06-06, 14:21:13

最后更新:2019-05-21, 20:48:22

原始链接:http://yehuohan.github.io/2017/06/06/%E7%AC%94%E8%AE%B0/DOC/%E5%B7%A5%E5%85%B7%E5%8F%82%E8%80%83%E4%B9%A6%E4%B9%8BLinux%E5%91%BD%E4%BB%A4%E5%AD%A6%E4%B9%A0/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。