Linux使用踩坑

130 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1 为PATH变量添加路径 

export PATH=$PATH:新增路径 (临时型办法,仅在当前terminal起作用

如果想为为当前用户永久修改则要进入~目录,编辑.bashrc文件,将本命令添加在最后一行。

可以直接运行source .bashrc(.命令)使之生效。为了避免每次ssh连接后都需要运行,可以在~/.bash_profile中添加:

if test -f .bashrc ; then

source .bashrc

fi

2 一些命令

cat: 在file后附加一些内容,换成>就是覆写

  1. cat >> file
  2. 输入内容(可以换行)
  3. CTRL+D(结束输入)

find:查找文件

        find / (待查找目录) -name 文件名(可用正则) -type d(目录)/f(普通文件)

tar :解压

        tar -C(解压到的目标目录) -xzf (压缩包名)

        其中 -x:--extract(从备份文件中还原 和) -c:--create(创建备份文件)对立

        -z表示解压的是gzip,即tar.gz后缀,如果是tar.bz2则是bzip2解压,需要-j命令,如果是xz后缀则直接不用加此项 -xf即可

        最后-f指定操作对象

        加-t:--list可以列出压缩包包含的文件

pwd:查看当前路径

netstat -anp | grep :查看port被谁占用

ip addr show: 查看本机ip

ldd sth:查看sth都依赖(链接)了哪些库,sth一般是个编译好的应用程序

grep -r 目录或文件:在某目录中递归查找pattern在文件中的出现情况,如果没有提供目录或文件,则从标准输入读入内容

pattern前加一个 -w 表示要精确匹配这个pattern

stat file:查看file的访问、修改时间等

touch file:修改文件的修改时间为当下,如果原本不存在文件,则创造名为file的空文件

3 杀进程

查看各个进程占用资源情况         top <-p 指定进程号> 或者ps -aux

jobs 可以查看后台进程

kill (-9 强制杀)%<进程号>

如果想批量删除某些进程:

  1. pidof 关键字 可以返回所有具有关键字的进程的进程号,然后kill -9 $(pidof 关键字)即可

  2. ps -ef | grep keyword | awk '{print $2}' | xargs kill  

        其中awk后引号内跟的是动作,即打印该行第二个部分(进程号),默认空格分界

4 scp

将sth下载到local目录:scp -r username@host:sth local

将sth上传到远程path:scp -r sth username@host:path

5 调试cmake项目

在CMakeLists.txt中添加

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")

再编译即可通过gdb调试该C++程序

6 /boot空间不足

由于Ubuntu自动更新内核导致,只需要我们

uname -a 查看当前使用内核版本

dpkg --get-selections |grep linux-image 查看已安装的所有版本

sudo apt purge 没有在使用的版本

df -h 查看清理后空间情况(另:du -sh:查看当前路径下文件占用空间总和

du -s(只显示总和) -h(带单位)         file(无表示当前路径)

7 查看系统信息

arch #架构

lsb_release -a #查看系统版本

cat /proc/info #查看cpu信息

        cat /proc/cpuinfo| grep 'processor' | sort -u |wc -l 查看核心数量

                其中sort -u:排序并剔除相同行 sort用法

8. ssh相关

ifconfig       #Ubuntu查看本机ip 

 设置ssh公钥并重启服务

cat 从主机复制过去的id_rsa.pub >> ~/.ssh/authorized_keys systemctl restart sshd.service

主机登录server的命令(username一定注意大小写)

ssh username@host -i ~/.ssh/id_rsa

 vscode

安装ssh插件(IdentityFile中填主机私钥)

编辑config文件

9 pip更换源

有点跑题(

pip install something -i pypi.douban.com/simple/ --trusted-host pypi.douban.com 

10 修改默认python版本(用户级)

$ ls /usr/bin/python* #查看所有python版本 

 输出例如:

​编辑

 然后修改.bashrc文件,在最后一行添加

alias python='/usr/bin/python3.8'

然后更新 

$ . ~/.bashrc  

再查看当前python版本

$ python --version 

11 gcc命令相关

C++编译用g++,否则若想使用cout需要加编译选项 -lstdc++ 

12 统计代码行数

find src/ -name "*.cpp" | xargs wc -l 

wc

wc -clw(分别是字节数、行数、词数)file1 file2.. (若不给文件名或者为-,那么从stdin读入)

13 vim相关

撤销:u        (恢复:ctrl+r)

删除当前(接下来多)行:(num)dd

交换当前行和下一行:ddp(删除当前行并暂存+粘贴)

从下一行插入:o        当前光标后:a

修改vim tab和缩进长度

  • 创建配置文件:cd ~        vim .vimrc
  • 文件中输入:

        set tabstop=4

        set shiftwidth=4

  • 退出,更新:source .vimrc

光标快速移动:

  • 向上翻整页:CTRL+b
  • 向下翻整页:CTRL+f
  • 向上(up)翻半页:CTRL+u
  • 向下(down)翻半页:CTRL+d 

查找:insert模式下

输入/ + pattern

n/N 跳转下一个/上一个

14 文件权限相关 

查看linux文件的权限:ls -l 文件名称

查看linux文件夹的权限:ls -ld 文件夹名称

chmod 777 file

15 yum命令

yum是centos中常用的软件包管理器

显示已安装的软件包:yum list installed

查找可以安装的软件包:yum list sth

安装软件包:yum install sth

卸载软件包:yum remove sth

列出软件包的依赖:yum deplist tomcat

查看某软件包信息:yum info sth

升级所有的(或某个)软件包:yum update (sth)

检查可更新的程序:yum check-update

16 Ubuntu桌面相关

添加目录到侧边栏(bookmark current location):快捷键ctrl+D 

17 swap分区

编译llvm内存不够用时,可以通过设置swap分区来增加内存。注意如果是在docker中编译,需要在宿主机中设置

free -m 查看内存使用情况,如果swap分区大小为0可以选择创建

1、使用dd命令创建一个swap分区,在这里创建一个4G大小的分区

        dd本身也是很好用的截断文件的命令,if/of指定输入输出文件名,bs指定块大小,count指定块的个数,skip指定跳过多少块

dd if=/dev/zero of=/root/swapfile bs=1M count=4096

bs * count 为拷贝的文件大小,即swap分区大小

2、格式化新建的分区文件

mkswap /root/swapfile

3、将新建的分区文件设为swap分区

swapon /root/swapfile

4、设置开机自动挂载swap分区

echo "/root/swapfile swap swap defaults 0 0" >> /etc/fstab

 最后再free -m 去查看分区情况

18 wget下载失败

ctrl+z转入后台并暂停,然后再wget -c url(断点续传),即可下载成功

19 后台执行任务相关

linux后台运行和关闭、查看后台任务 - jihite - 博客园

nohup cmd 1>/dev/null 2>&1 &         #后台运行cmd,如果不重定向,默认在本目录下创建nohup.out,写入运行时标准输出信息

Linux查看后台进程-良许Linux教程网

20 软链接的使用

创建:ln -s /usr/bin/xx xx        #在当前目录创建一个xx的快捷方式

 删除:rm -rf xx

修改:ln -snf /usr/bin/xx1 xx        

21 core文件查看

gdb <之前运行崩溃的程序> core.xx

即可查看出错的位置,再使用gdb命令bt(backtrace)即可看调用栈 

22 cut命令截取字符串

 cut -d -f [file]        # 按照char将file或标准输入的内容分段,取第num段

例子:name=(echo(echo 1 | cut -d. -f1)        #  输入参数是一个文件名,提取它不包括后缀的部分

如果目的是为了字符串替换,可以参考Shell字符串的替换_DYY^O^的博客-CSDN博客_shell 字符串替换

23 timeout限时执行

timeout -s 信号名或者整数值 时间(例如5s) 命令 

表示这个命令如果在输入时间内没有结束运行,就杀死该进程并发送信号值给它

24 objdump

Linux中objdump的使用 | Ivanzz

-d:看汇编代码

-s:看各个段的16进制表示

-j seg:指定查看seg段的内容

25 避免ssh连接超时 

在/etc/ssh/sshd_config中修改ClientAliveInterval 0和ClientAliveCountMax 3,改为两个较大的数字即可,例如60,300

26 apt

apt-get

update:根据 /etc/apt/sources.list更新软件源

upgrade:检查软件是否可以升级

apt-cache

policy :查看某软件信息

27 sed

s模式为替换功能(s/pattern/replacement/flags)

例子:ls输出目录的绝对路径 ls | sed "s:^:pwd/:" 用:作分隔符