linux上的任务

jobs, bg, fg 命令

jobs列出本会话所有任务
bg命令用于将作业放到后台运行,使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号&的效果是相同的,都是将其放到系统后台执行。 Ctrl+Z后任务会暂停,bg命令可以让任务在后台继续运行。
fg命令用于将后台作业(在后台运行的或者在后台挂起的作业)放到前台终端运行。与bg命令一样,若后台任务中只有一个,则使用该命令时,可以省略任务号。

让进程在后台可靠运行的几种方法

技巧:让进程在后台可靠运行的几种方法

nohup ping www.ibm.com &
setsid ping www.ibm.com
(ping www.ibm.com &)
# disown 命令
# screen 命令
[/bash]

如何将正在运行的任务放入后台

使用& nohup启动的命令直接被放入后台,但是如果忘记输入&,或者你还要注销登录这次会话时,怎么办?
:第一步,Ctrl+Z把任务暂停,然后 bg %jobnumber 把任务放入后台运行。
若想在切回前台,使用fg %jobnumber 即可。

第二步,disown可以让任务忽略本任务的hangup信号。只放入后台的任务而不是使用nohup启动的,它也是要接受本会话的hangup的。
disown "%./experiments/scripts/faster_rcnn_end2end.sh"

其他知识

disown是bash内部命令,nohup是外部命令
disownbg,fg一样是针对job进行操作,nohup是针对命令操作
disown -hnohup一样,在退出bash后,把进程的控制权都交给init

其他用于管理用户会话的命令:
tty 列出本会话会话号
w 列出当前所有登录会话
skillpkill 可以给任务发信号, 如 skill -KILL -v pts/4 把会话pts/4的所有任务发kill信号。

更强大的是使用screen管理会话,但是ubuntu默认没有安装该程序,此命令网上知识也很多。

挂载指定标签的磁盘到指定挂载点

按标签挂载挂载保证同样标签的磁盘挂载都同一个地方。

/etc/fstab内容

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# 把LABEL是MYDATADISK的磁盘挂载到/home/renwei/datadisk目录
LABEL=MYDATADISK /home/renwei/datadisk ext4 defaults 0 2

磁盘的LABEL怎么管理?

1 命令 e2label 或者tune2fs
Usage:

e2label device [newlabel]
tune2fs -L labelname /dev/your_block_device

2 ubuntu系统的disks工具(图形界面)
“Edit Filesystem…” 就是更改磁盘LABEL的,只不过ubuntu这里这名字取的无语。

ubuntu自动登录和直接无桌面启动到某图形界面程序

弄一个直接至图形界面的X桌面session
/usr/share/xsessions/MYPROGRAM.desktop

[Desktop Entry]
Name=myprogram
Comment=Auto start of myprogram with 'username' user without password
Exec=/home/username/myprogram.sh
TryExec=/home/username/myprogram.sh
Type=Application
Terminal=true

把lightdm登录配置/etc/lightdm/lightdm.conf改成自动登录我们定义的session。

[Seat:*]
autologin-user=username
autologin-session=myprogram
xserver-command=X -s 0 -dpms 

还有注意用户的~/.dmrc配置,把里面的session改成我们的,或者直接删除。如果有这个文件且其session还不是我们想要的,也不会自动登录,但登陆时可以选择登录哪个session。

另外,把用户添加到autologinnopasswdlogin组这个操作在ubuntu上不是必须的。如果别的桌面版需要,使用这些命令LightDM#Enabling_autologin

groupadd -r autologin
gpasswd -a username autologin
groupadd -r nopasswdlogin
gpasswd -a username nopasswdlogin

参考
Disable screen blanking in X-Windows on Raspbian [duplicate]
How do I disable the screensaver/lock?
Autostarting XBMC with a LightDM session

ubuntu挂载smb网络共享文件夹

手工挂载或者挂载脚本,

#!/bin/bash
# 需要安装cifs-utils
# sudo apt-get install cifs-utils

SERVER_IP="192.168.1.2"
SHARE_NAME="share"
USERNAME="samba user name"
PASSWD="samba password"
DOMAIN="domain"

#mount.cifs //$SERVER_IP/$SHARE_NAME -o username=$USERNAME,password=$PASSWD,dom=$DOMAIN /media/user/smbshare
mount.cifs //$SERVER_IP/$SHARE_NAME -o username=$USERNAME,password=$PASSWD /media/user/smbshare
# mount -t cifs //$SERVER_IP/$SHARE_NAME -o username=$USERNAME,password=$PASSWD /media/user/smbshare

放在/etc/fstab中自动挂载

//192.168.1.2/share /media/user/smbshare cifs users,suid,uid=1000,gid=1000,_netdev,file_mode=0777,dir_mode=0777,username=USERNAME,password=PASSWD 0 0

ubuntu从源下载软件以及制作本地源的部分命令

1、备份已安装软件包列表

sudo dpkg --get-selections > ~/package.selections

2、下载这份软件包列表中的软件

但是不安装,比如制作部分apt mirror时使用

for req in $(cat ~/package.selections | cut -f 1 | cut -f 1 -d  ":" ); do apt-get download $req; done

3、dpkg-scanpackages 制作软件包文件

dpkg-scanpackages ~/ubuntu-local/xenial /dev/null 2>>~/mkpackage.error |gzip > ~/ubuntu-local/xenial/Packages.gz -r

这之后就可以利用apache服务器对外提供服务了。

4、删除过时的软件版本

不断更新本地Mirror,会保留统一软件的的多个版本,删除过时版本。

egrep  "\(filename .*\) is repeat" ~/mkpackage.error | awk '{print $6}' | sed 's/)//' | while read filename
do
  # mv ~/ubuntu-local/xenial/$filename ~/.local/share/Trash/files
  gvfs-trash somefile
done

5、添加本地源的方法

# 使用网络服务形式提供的本地mirror
echo 'deb http://192.168.0.2/ubuntu-local/xenial /' | sudo tee /etc/apt/source.list.d/local.list

6、其他一些有关命令

# 直接根据第1步导出的软件列表 重新下载安装之前系统中的软件
# 如果你安装的软件数量比较多,可能会花费较长时间。
sudo dpkg --set-selections <~/package.selections && sudo apt-get dselect-upgrade

# 每次安装软件后,即时地把新安装的软件包拷贝到Mirror中,后续还需要dpkg-scanpackages
cp /var/cache/apt/*.deb ~/ubuntu-local/xenial/

# sudo chown -R user:pswd ~/ubuntu-local/
# sudo chmod ug+rw,o+r *

ubuntu获取网卡IP和MAC地址

ip addr | grep link/ether | awk '{print $2}'
ip=`ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'`
mac=`ifconfig | grep HWaddr | awk -F" " '{print $5}'`
/sys/class/net/eth0/address
# lshw可以获取很多硬件信息哦
lshw -class network
# 获取网卡名称
ip -o -4 route show to default | awk '{print $5}'

问题1,环回lo和虚拟网卡要不要
docker或者别的虚拟网卡存在,看您需要不需要避免获取到虚拟网卡的。

问题2,网卡命名的问题
之前一般被系统命名为eth0,现在改别的命名规则了。看要不要把网卡名称写死了,还是要求自动获取网卡名。

问题3,多网卡
这个问题一般不重要,一般也就不用指定特定网卡,只要是真实网络接口即可。若只需要一个,awk里打印完一个立即 exit 即可。

那这段代码有什么用呢?
比如自动设置机器名称为与MAC地址有关的名字避免克隆系统名称冲突,就可以写个服务启动后立即修改下机器名 hostname,更改机器名称为MAC有关