Linx常用指令

Linux基础

1. Linux启动

  1. 内核引导。

  2. 运行 init。

  3. 系统初始化。

  4. 建立终端 。

  5. 用户登录系统。

2. 常用文件管理命令

  1. ls: 列出当前目录下所有文件,蓝色的是文件夹,白色的是普通文件,绿色的是可执行文件

    ls -a:查看所有文件包括隐藏文件(以.开头的文件就是隐藏文件)

    ls -l:查看当前路径下文件的读、写、执行权限

    ls | wc -l:查看ls下有多少个文件

  2. pwd: 显示当前路径

  3. cd XXX: 进入XXX目录下, cd .. 返回上层目录

    .:当前目录; ..:上级目录

    ~:家目录,回到路径/home/acs

    cd -:返回改变路径前的路径

  4. cp XXX YYY: 将XXX文件复制成YYY,XXX和YYY可以是一个路径

  5. mkdir XXX: 创建目录XXX

    mkdir -p:如果文件夹不存在,则创建

  6. rm XXX: 删除普通文件; rm XXX -r: 删除文件夹;

    rm *./txt:删除所有同类文件比如txt格式

    rm *:删除所有文件(不包括文件夹)

    rm * -r :删除所有文件夹

    rmkdir:删除一个空的目录

  7. mv XXX YYY: 将XXX文件移动到YYY,和cp命令一样,XXX和YYY可以是一个路径;重命名也是用这个命令

  8. touch XXX: 创建一个文件

  9. cat XXX: 展示文件XXX中的内容 tac最后一行开始显示 ; nl显示同时带行号

  10. 复制文本:windows/Linux下:Ctrl + insert,Mac下:command + c

  11. 粘贴文本:windows/Linux下:Shift + insert,Mac下:command + v

  12. clear清屏

  13. history:查看历史输入指令

  14. tree:以树形显示文件目录结构

  15. file xxx:查看文件属性

  16. where/which xxx:查看xxx在哪

3. 环境变量

环境变量类似于全局变量,可以被各个进程访问到。我们可以通过修改环境变量来方便地修改系统配置。

查看

列出当前环境下的所有环境变量:

1
2
3
env  # 显示当前用户的变量
set  # 显示当前shell的变量,包括当前用户的变量;
export  # 显示当前导出成用户变量的shell变量

输出某个环境变量的值:

1
echo $PATH

修改

为了将对环境变量的修改应用到未来所有环境下,可以将修改命令放到~/.bashrc文件中。

修改完~/.bashrc文件后,记得执行source ~/.bashrc,来将修改应用到当前的bash环境下。

declare设置环境变量 declare [+/-][选项] [变量名=变量值]

unset <待清除环境变量>

常见环境变量

  1. HOME:用户的家目录。
  2. PATH:可执行文件(命令)的存储路径。路径与路径之间用:分隔。当某个可执行文件同时出现在多个路径中时,会选择从左到右数第一个路径中的执行。下列所有存储路径的环境变量,均采用从左到右的优先顺序。
  3. LD_LIBRARY_PATH:用于指定动态链接库(.so文件)的路径,其内容是以冒号分隔的路径列表。
  4. C_INCLUDE_PATH:C语言的头文件路径,内容是以冒号分隔的路径列表。
  5. CPLUS_INCLUDE_PATH:CPP的头文件路径,内容是以冒号分隔的路径列表。
  6. PYTHONPATH:Python导入包的路径,内容是以冒号分隔的路径列表。
  7. JAVA_HOME:jdk的安装目录。
  8. CLASSPATH:存放Java导入类的路径,内容是以冒号分隔的路径列表。

module工具箱

常用命令说明
module av | avail显示可使用模块
module li | list显示已加载模块
module load |add [modulefile]加载模块
module unload |rm [modulefile]卸载模块
module purge清理说有已加载模块
module show|display [modulefile]查询配置信息
module use [modulefile]使用其他module path
module switch|swap [modulefile1] [modulefile2]切换modulefile

4. 常用命令

linux-command

Linux命令手册

常用终端快捷键

  1. ctrl c: 取消命令,并且换行
  2. ctrl d:关闭终端
  3. crtl l: 清空终端 (也可输入clear)
  4. ctrl u: 擦除从当前光标位置到行首的全部内容
  5. ctrl k: 擦除从当前光标位置到行尾的全部内容
  6. crtl w: 擦除光标位置前的单词
  7. crtl y: 粘贴使用前三种查出方式的文本。(误删的时候派上用场)
  8. crtl a: 移动光标到行首
  9. crtl e: 移动光标到行尾
  10. tab键:可以补全命令和文件名,如果补全不了快速按两下tab键,可以显示备选选项

4.1 系统状况

  1. top:查看所有进程的信息(Linux的任务管理器)

    打开后,输入M:按使用内存排序

    打开后,输入P:按使用CPU排序

    打开后,输入q:退出

  2. df -h:查看硬盘使用情况

  3. free -h:查看内存使用情况

  4. du -sh:查看当前目录占用的硬盘空间

    du -shc *:查看当前子目录占用的硬盘空间

    du -h --max-depth=1 ~/:home 目录下的所有文件和文件夹的大小,但只显示一层目录深度

    du -h -d 1 /var/lib/docker/overlay2 | grep -E "G\b":只显示大小中包含以 G 结尾的整个单词

  5. ps aux:查看所有进程

    ps aux | grep xxx:使用管道查看具体xxx进程

    ps -ef | grep xxx:更详细

  6. kill -9 pid:杀死编号为pid的进程

    传递某个具体的信号:kill -s SIGTERM pid

  7. netstat -nt:查看所有网络连接

    netstat -nlp | grep 22:查看22端口号是否被占用

    查看网络设置:netsh wlan show profiles

    具体设置:wlan show profiles wifi名称 key=clear

  8. w:列出当前登陆的用户

  9. ping www.baidu.com:检查是否连网

4.2 文件权限

  1. chown:更改文件属性

    chown bin xxx:将xxx的拥有者改为bin账号

    chown root:root xxx:将xxx拥有者与群组改回root

  2. chmod:修改文件权限

    drwxrwxrwx10位

    第一位d是不是文件夹,超链接

    第一组rwx:自己——可读,可写,可执行 二进制(rwx 111对应7)

    第二组rwx:同组——可读,可写,可执行

    第三组rwx:其他——可读,可写,可执行

    chmod +x xxx:给xxx添加可执行权限

    chmod -x xxx:去掉xxx的可执行权限

    chmod 777 xxx:将xxx的权限改成777

    chmod 777 xxx -R:递归修改整个文件夹的权限

    1. chgrp:更改文件属组
    2. file: 查看文件类型
    3. stat:查看文件属性

4.3 文件检索

  1. find /path/to/directory/ -name '*.py':搜索某个文件路径下的所有*.py文件

    find . -path "./envs" -prune -o -name "libatomic.a" -print:同时排除特定的目录envs

  2. grep xxx:从stdin中读入若干行数据,如果某行中包含xxx,则输出该行;否则忽略该行。

    find XXX/ -name '*.cpp' | xargs cat | grep xxx在XXX文件夹的cpp文件搜索xxx

  3. wc:统计行数、单词数、字节数

    既可以从stdin中直接读入内容;也可以在命令行参数中传入文件名列表;

    wc -l:统计行数

    wc -w:统计单词数

    wc -c:统计字节数

  4. tree:展示当前目录的文件结构

    tree /path/to/directory/:展示某个目录的文件结构

    tree -a:展示隐藏文件

  5. ag xxx:搜索当前目录下的所有文件,检索xxx字符串

    ag命令的帮助文档

  6. cut:分割一行内容

    从stdin中读入多行数据

    echo $PATH | cut -d ':' -f 3,5:输出PATH:分割后第3、5列数据

    echo $PATH | cut -d ':' -f 3-5:输出PATH:分割后第3-5列数据

    echo $PATH | cut -c 3,5:输出PATH的第3、5个字符

    echo $PATH | cut -c 3-5:输出PATH的第3-5个字符

  7. sort:将每行内容按字典序排序

    可以从stdin中读取多行数据

    可以从命令行参数中读取文件名列表

  8. xargs:将stdin中的数据用空格或回车分割成命令行参数

    find . -name '*.py' | xargs cat | wc -l:统计当前目录下所有python文件的总行数

4.4 查看文件内容

  1. more:浏览文件内容

    回车:下一行

    空格:下一页

    b:上一页

    q:退出

  2. less:与more类似,功能更全

    回车:下一行

    y:上一行

    Page Down:下一页

    Page Up:上一页

    q:退出

  3. head -3 xxx:展示xxx的前3行内容

    同时支持从stdin读入内容

  4. tail -3 xxx:展示xxx末尾3行内容

    同时支持从stdin读入内容

    tail -n 5 xxx:查看xxx尾部5行内容 (常用于日志)

    tail -f xxx:实时追踪该xxx文档的所有更新 (常用于 flume 采集数据)

4.5 用户相关

  1. history:展示当前用户的历史操作。内容存放在~/.bash_history
  2. 终端中粘贴字符时头尾出现“0~“和“1~“的特殊字符 : printf "\e[?2004l"

4.6 工具

  1. md5sum:计算md5哈希值

    可以从stdin读入内容

    也可以在命令行参数中传入文件名列表;

  2. time command:统计command命令的执行时间

  3. ipython3:交互式python3环境。可以当做计算器,或者批量管理文件。

    ! echo "Hello World":!表示执行shell脚本

  4. watch -n 0.1 command:每0.1秒执行一次command命令

  5. tar:压缩文件

    tar -zcvf xxx.tar.gz /path/to/file/*:压缩

    tar -zxvf xxx.tar.gz:解压缩

    tar -zxvf xxx.tar.gz -C yyy:解压到指定目录 yyy 中

  6. diff xxx yyy:查找文件xxx与yyy的不同点

  7. rpm2cpio demo.rpm | cpio -idmv :解压demo.rmp文件

  8. ln -s /usr/home/file /usr/home/abc :软连接: 在目录/usr/home下建立一个符号链接文件abc,使它指向目录/usr/home/file

  9. scp source@host:filename targt@host:filename:远程拷贝文件 [源文件] [目标文件]

  10. sz demo:下载文件

  11. strace ./demo:用于跟踪进程的系统调用以及接收和发送到内核的信号

4.7 安装软件

  1. sudo command:以root身份执行command命令

  2. apt-get install xxx:安装软件

  3. pip install xxx --user --upgrade:安装python包

  4. yum常用命令

    1. 列出所有可更新的软件清单命令:yum check-update
    2. 更新所有软件命令:yum update
    3. 仅安装指定的软件命令:yum install <package_name>
    4. 仅更新指定的软件命令:yum update <package_name>
    5. 列出所有可安裝的软件清单命令:yum list
    6. 删除软件包命令:yum remove <package_name>
    7. 查找软件包命令:yum search <keyword>

5. 管道

管道类似于文件重定向,可以将前一个命令的stdout重定向到下一个命令的stdin。

管道命令仅处理stdout,会忽略stderr。

管道右边的命令必须能接受stdin。

多个管道命令可以串联。

与文件重定向的区别

文件重定向左边为命令,右边为文件。

管道左右两边均为命令,左边有stdout,右边有stdin。

|是管道链接符 用于两个管道之间的链接与通信

1
2
3
4
5
6
# 统计当前目录下所有python文件的总行数,其中find、xargs、wc等命令可以参考常用命令这一节内容。
find . -name '*.py' | xargs cat | wc -l
# find . -name “.py | cat:获取为.py结尾的文件名
# find . -name “.py | xargs cat:获取.py文件的内容
# wc -l:统计行数
# xargs将stdin的内容用空行隔开,作为cat的命令行参数,传给cat

6. 用户组的管理

添加新的用户账号 :useradd 选项 用户名

删除帐号:userdel 选项 用户名

修改帐号:usermod 选项 用户名

增加一个新的用户组:groupadd 选项 用户组

删除一个已有的用户组:groupdel 用户组

修改用户组的属性:groupmod 选项 用户组

7. 定时任务

atd一次性定时任务配置

at <options> <time>

1
2
3
4
at now +2 minutes  # 2分钟执行ls命令并把命令执行结果输出到/tmp/ls.txt文件
at> ls -al > ~/temp/ls.txt
crtl + d
atq  # 查询

cron周期性定时任务配置

crontab <options> <file>

1
2
3
crontab -e
***** /test.sh
crontab -l

常用情况

  1. windows换行符\r对应的显示^M;转换为unix格式的\n

方法1:dos2unix filename

方法2:vi filename打开文件,执行 :set ff=unix 设置文件为unix,然后执行:wq,保存成unix格式。

方法3:使用sed命令sed -i "s/\r//" filenamesed -i "s/^M//" filename直接替换结尾符

常用C++指令

  1. readelf

    readelf -d ./demo:查看动态段信息,比如共享库依赖、动态符号、重定位信息、程序入口点等

    readelf -a ./demo :显示 ELF 文件的 所有 可用信息,依次输出所有的 ELF 文件头、节区头、符号表、动态段、重定位信息等内容。

    readelf –h ./demo:显示 ELF 文件的 文件头信息

    readelf --segments ./demo:显示 ELF 文件的 程序头信息

    readelf -s --wide ./demo:显示 ELF 文件的 符号表信息--wide 选项用于避免输出被截断

    readelf -S ./demo : 显示 ELF 文件的 节区头信息,查看demo是否是debug模式编译文件,看section里有没有.debug_info 也可用--sections

  2. c++filt 解析C++符号工具

  3. 反汇编操作

1
2
3
llvm-objdump -d # 反汇编命令,默认cpu, 
extractkernel -i # 反汇编命令,dcu
llvm-amdgpu-objdump --inputs= # 反汇编命令,amdgpu
0%