mount: wrong fs type, bad option, bad superblock on /dev/xxx,挂载时未格式化,使用的文件系统格式不对
df -h: 查看磁盘分区情况
df -T: 查看所有磁盘的文件系统类型(type)
fdisk -l: 查看所有被系统识别的磁盘,磁盘分区
du -sh: 查看磁盘占用情况
free -m
sync
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
// As this is a non-destructive operation,
// and dirty objects are notfreeable,
// the user should run "sync" first in order to make sure allcached objects are freed.
To free pagecache:
* echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
* echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
* echo 3 > /proc/sys/vm/drop_caches
可以写个脚本定时运行,这里设置了 4G 的阈值,小于这个数就清理。
#! /bin/sh
used=`free -m | awk 'NR==2' | awk '{print $3}'`
free=`free -m | awk 'NR==2' | awk '{print $4}'`
echo "===========================" >> /app/memory/logs/mem.log
date >> /app/memory/logs/mem.log
echo "Memory usage before | [Use:${used}MB][Free:${free}MB]" >> /app/memory/logs/mem.log
if [ $free -le 4000 ] ; then
sync && echo 1 > /proc/sys/vm/drop_caches
sync && echo 2 > /proc/sys/vm/drop_caches
sync && echo 3 > /proc/sys/vm/drop_caches
used_ok=`free -m | awk 'NR==2' | awk '{print $3}'`
free_ok=`free -m | awk 'NR==2' | awk '{print $4}'`
echo "Memory usage after | [Use:${used_ok}MB][Free:${free_ok}MB]" >> /app/memory/logs/mem.log
echo "OK" >> /app/memory/logs/mem.log
else
echo "Not required" >> /app/memory/logs/mem.log
fi
exit 1
每天早上六点运行一次,清理周期可以定制。
crontab -e
0 6 * * * /path/to/freemem.sh
cat /proc/cpuinfo
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list
Add new source address
sudo apt-get update
adduser: 会自动为创建的用户指定主目录、系统shell版本,会在创建时提示输入用户密码。
useradd:需要使用参数选项指定上述基本设置,如果不使用任何参数,则创建的用户无密码、无主目录、没有指定shell版本。
adduser在创建用户时会主动调用 /etc/adduser.conf
;
在创建用户主目录时默认在 /home
下,而且创建为 /home/用户名
如果主目录已经存在,就不再创建。
但是此主目录虽然作为新用户的主目录,而且默认登录时会进入这个目录下,但是这个目录并不是属于新用户。
当使用 userdel
删除新用户时,并不会删除这个主目录,因为这个主目录在创建前已经存在且并不属于这个用户。
为用户指定shell版本为:/bin/bash
adduser username --home dir 指定用户家目录
adduser username --conf conf_file 指定 configuration 文件
useradd usrname -d home_dir -m -s /bin/bash
之后通过 sudo passwd username
指定密码
-d 只是指定了家目录,如果不存在也不会创建。
-m 表示如果不存在指定的家目录,则创建它,并从 /etc/sket 拷贝初始的配置文件到用户家目录。
默认包含 /lib
以及 /usr/lib
。
export LD_LIBRARY_PATH=/your/lib/path:$LD_LIBRARY_PATH
shell
就失效了。.bashrc
/ .bash_profile
中。~/.bashrc
在每次登陆和每次打开 shell 都读取一次,而 ~/.bash_profile
只在登陆时读取一次。/etc/ld.so.conf
中,这种添加库路径的效果是永久的。需要注意的是:这种搜索路径的设置方式对于程序连接时的库(包括共享库和静态库)的定位已经足够了,但是对于使用了共享库的程序的执行还是不够的。这是因为为了加快程序执行时对共享库的定位速度,避免使用搜索路径查找共享库的低效率,所以系统是直接读取库列表文件 /etc/ld.so.cache
并从中进行搜索的。
/etc/ld.so.cache
不能直接编辑,它根据 /etc/ld.so.conf
中设置的搜索路径由 /sbin/ldconfig
命令将这些搜索路径下的共享库文件集中在一起而生成。ldconfig
的作用就是将 /etc/ld.so.conf
列出的路径下的库文件缓存到 /etc/ld.so.cache
以供使用。
打开 /etc/ld.so.conf
,可以看到它首先包含了 /etc/ld.so.conf.d
目录下的 *.conf
文件,所以也可以在 /etc/ld.so.conf.d
目录下添加新的 .conf
文件,同样需要运行 sudo ldconfig
使修改生效。
include /etc/ld.so.conf.d/*.conf
absolute/path/of/the/lib
搜索优先级
命令行设置 > 环境变量设置 > 系统默认
#include “file.h”
先搜索当前目录
然后搜索-I指定的目录
再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使用的是C_INCLUDE_PATH)
最后搜索gcc的默认的目录
/usr/include
/usr/local/include
/usr/lib/gcc/–host/–version/include
#include
先搜索-I指定的目录
再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使用的是C_INCLUDE_PATH)
最后搜索gcc的默认的目录
/usr/include
/usr/local/include
/usr/lib/gcc/–host/–version/include
设置环境变量,多个路径用 :
隔开
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
LD_LIBRARY_PATH
LIBRARY_PATH
gcc 还有一个参数:-nostdinc
,它使编译器不再系统缺省的头文件目录里面找头文件,一般和 -I
联合使用,明确限定头文件的位置。
略去了一些不太常用的选项。
Usage: gcc [options] file...
Options:
...
(Use '-v --help' to display command line options of sub-processes).
--version Display compiler version information.
-save-temps Do not delete intermediate files.
-save-temps=<arg> Do not delete intermediate files.
-std=<standard> Assume that the input sources are for <standard>.
--sysroot=<directory> Use <directory> as the root directory for headers
and libraries.
-B <directory> Add <directory> to the compiler's search paths.
-v Display the programs invoked by the compiler.
-### Like -v but options quoted and commands not executed.
-E Preprocess only; do not compile, assemble or link.
-S Compile only; do not assemble or link.
-c Compile and assemble, but do not link.
-o <file> Place the output into <file>.
-pie Create a position independent executable.
-shared Create a shared library.
除了直接在源代码中用 #define
来定义宏外,gcc可在命令行中定义宏:-D NAME
(其中NAME为宏名), 也可对宏赋值: -D NAME=value
注意等号两边不能有空格,D与NAME之间有无空格无所谓。由于宏扩展只是一个替换过程,也可以将 value 换成表达式,但要在两边加上双括号: -DNAME="statement"
。特别的,如果 statement 里的 "
要使用 \"
。
编译器也会定义一些宏,可以通过 cpp -dM /dev/null
查看。
有时候我们会遇到远程登录主机执行一个长时间的任务,比如下载一个大文件,如果遇到断连的话就悲剧了,SSH 连接会话消失,重新登录的话也找不到之前的任务了。这个时候 screen
这个工具就能派上用场啦。
screen
是一个终端管理工具,我们可以通过它开启一个新的会话并在其中运行程序,程序不会因为该会话被隐藏或者我们断连而消失,只要我们重新加载对应的 screen
即可找到之前运行的程序。
通常是系统预装好的,如果没有的话安装即可。sudo apt install screen
screen -S session_name
// 默认是打开一个窗口并在其中运行shell,可以在一个会话中打开多个窗口
进入 screen 后一些常用的命令如下
从 screen 会话脱离,Ctrl+a
d
。脱离后在 screen 会话中运行的程序还会继续运行。
查看当前有哪些 screen 会话,screen -ls
。
重新连接到 screen 会话, screen -r session_name / screen_num
,使用会话的名字和编号都能重新连接到相应的会话中。
http://man.linuxde.net/rsync
rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
https://linuxize.com/post/how-to-use-linux-screen/ ↩︎