分类 Ubuntu 下的文章

“Ubuntu是以桌面应用为主的Linux发行版,基于Debian。Ubuntu有三个正式版本,包括桌面版、服务器版及用于物联网设备和机器人的Core版。从17.10版本开始,Ubuntu以GNOME为默认桌面环境。 Ubuntu是著名的Linux发行版之一,也是目前最多用户的Linux版本。 ”

Ubuntu下出现无法解析域名的情况,导致wget或其他针对域名的操作无法完成,但是 ping 对应的IP却能ping通,属于DNS配置问题。

解决办法
修改 /etc/resolv.conf 添加内容 nameserver 8.8.8.8 增加 DNS。

对 /etc/resolv.conf 加锁 resolvconf 就不会在开机时重写该文件。

文件加锁 不可写

sudo chattr +i /etc/resolv.conf

文件解锁 可写

sudo chattr -i /etc/resolv.conf

chattr 命令参数

A:即Atime,告诉系统不要修改对这个文件的最后访问时间。
S:即Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:当dump程序执行时,该文件或目录不会被dump备份。
D:检查压缩文件中的错误。
i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
s:彻底删除文件,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域。
u:当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录。
t:文件系统支持尾部合并(tail-merging)。
X:可以直接访问压缩文件的内容。

ps -eo pid,lstart,etime | grep 20237

20237 Fri Oct 15 16:58:23 2021 2-16:19:42

ps -eo lstart 启动时间

ps -eo etime 运行多长时间.

使用 ps 命令来查看关于一组正在运行的进程的信息。ps 命令提供了如下的两种格式化选项。

etime 显示了自从该进程启动以来,经历过的时间,格式为 [[DD-]hh:]mm:ss。
etimes 显示了自该进程启动以来,经历过的时间,以秒的形式。
如何查看一个进程已经运行的时间?
你需要在 ps 命令之后添加 -o etimes 或者 -o etime 参数。它的语法如下:

ps -p {PID-HERE} -o etime
ps -p {PID-HERE} -o etimes

查看 apache2 进程启动的精确时间和启动后所流逝的时间:

ps -eo pid,lstart,etime,cmd | grep apache2

ps -eo pid,lstart,etime,cmd | grep apache2
1045 Fri Oct 15 09:13:32 2021 3-00:35:40 /usr/sbin/apache2 -k start
730289 Mon Oct 18 00:00:43 2021 09:48:29 /usr/sbin/apache2 -k start
730338 Mon Oct 18 00:00:44 2021 09:48:28 /usr/sbin/apache2 -k start
847669 Mon Oct 18 09:49:12 2021 00:00 grep --color=auto apache2

route add -net 192.168.5.0/24 wlp0s20f3

SIOCADDRT: 不允许的操作

sudo route add -net 192.168.5.0/24 wlp0s20f3

一:使用 route 命令添加 使用route 命令添加的路由,机器重启或者网卡重启后路由就失效了,方法: //添加到主机的路由 route
add –host 192.168.1.11 dev eth0 route add –host 192.168.1.12 gw
192.168.1.1 //添加到网络的路由 route add –net 192.168.1.11  netmask 255.255.255.0 eth0 route add –net 192.168.1.11  netmask 255.255.255.0 gw 192.168.1.1 route add –net 192.168.1.0/24 eth1 //添加默认网关 route add
default gw 192.168.2.1 //删除路由 route del –host 192.168.1.11 dev eth0

删除默认路由

route del default gw 192.168.2.1

二:在linux下设置永久路由的方法:
1.在/etc/rc.local里添加 方法:  route add -net 192.168.3.0/24 dev eth0 route add -net 192.168.2.0/24 gw 192.168.2.254

2.在/etc/sysconfig/network里添加到末尾 方法:GATEWAY=gw-ip 或者 GATEWAY=gw-dev

3./etc/sysconfig/static-routes : (没有static-routes的话就手动建立一个这样的文件) any net 192.168.3.0/24 gw 192.168.3.254 any net 10.250.228.128 netmask
255.255.255.192 gw 10.250.228.129
 
4.开启 IP 转发: echo "1" >/proc/sys/net/ipv4/ip_forward (临时) vi /etc/sysctl.conf --> net.ipv4.ip_forward=1 (永久开启)

Referenced from:https://blog.csdn.net/sinat_31500569/article/details/70149241

string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos。(返回值可以看成是一个int型的数)

  #include<cstring>
  #include<cstdio>
  #include<iostream>
  using namespace std;
  int main()
  {
      ////find函数返回类型 size_type
      string s("1a2b3c4d5e6f7jkg8h9i1a2b3c4d5e6f7g8ha9i");
      string flag;
     string::size_type position;
     //find 函数 返回jk 在s 中的下标位置
     position = s.find("jk");
     if (position != s.npos)  //如果没找到,返回一个特别的标志c++中用npos表示,我这里npos取值是4294967295,
     {
         printf("position is : %d\n" ,position);
     }
     else
     {
         printf("Not found the flag\n");
     }
 }

2.返回子串出现在母串中的首次出现的位置,和最后一次出现的位置。

flag = "c";
      position = s.find_first_of(flag);
      printf("s.find_first_of(flag) is :%d\n",position);
      position = s.find_last_of(flag);
      printf("s.find_last_of(flag) is :%d\n",position);

3.查找某一给定位置后的子串的位置

//从字符串s 下标5开始,查找字符串b ,返回b 在s 中的下标

 position=s.find("b",5);
 cout<<"s.find(b,5) is : "<<position<<endl;

4.查找所有子串在母串中出现的位置

//查找s 中flag 出现的所有位置。

flag="a";
position=0;
int i=1;
while((position=s.find(flag,position))!=string::npos)
{
    cout<<"position  "<<i<<" : "<<position<<endl;
    position++;
    i++;
}

5.反向查找子串在母串中出现的位置,通常我们可以这样来使用,当正向查找与反向查找得到的位置不相同说明子串不唯一。

 //反向查找,flag 在s 中最后出现的位置
 flag="3";
 position=s.rfind (flag);
 printf("s.rfind (flag) :%d\n",position);

Referenced from:https://www.cnblogs.com/wkfvawl/p/9429128.html

try catch nlohmann::detail::parse_error
当出现错误信息时 throwing an instance of 'nlohmann::detail::type_error' 解决办法如下:

直接上代码了。
第一种方法:

try {
std::string testStr = "const.net.cn";
mJsonObj = nlohmann::json::parse(testStr);
} catch (nlohmann::detail::parse_error &error) {
std::cout << "parse_error" << std::endl;
} catch (nlohmann::detail::exception &error) {
std::cout << "exception" << std::endl;
} catch (std::overflow_error &error) {
std::cout << "overflow_error" << std::endl;
}

第二种方法:

std::string testStr = "const.net.cn";
try {
nlohmann::json::parse(testStr.c_str());
} catch (std::exception &exception) {
std::cout << "exception" << std::endl;
} catch (std::runtime_error &error) {
std::cout << "error" << std::endl;
} catch (...) {
std::cout << "any" << std::endl;
}