linux系统知识

[TOC]

基础命令

mkdir

检查文件夹路径存在否,若不存在则创建路径中各级文件夹,若存在则啥也不做也不报错

mkdir -p <新建文件夹路径>
mkdir <新建文件夹路径> -p

路径

相对于绝对路径

绝对: /xx/xxx/xxx

相对:xx/xx/xxx

程序中写

  • python代码中:表示路径,使用的是相对程序文件所在目录的路径。

    如:/home/somebody/WGAN/main.py中写的“data/figure/”,是/home/somebody/WGAN/data/figure/

软链接

创建链接

ln -s <被链接对象> <链接名>
  • <被链接对象> 可以是本机/网络上 文件夹/任何文件
  • <链接名>省略,则名为<被链接对象>

查看链接对象

ls -l
ll -l
la -l
l -l
  • -l 查看链接

使用要求

以下操作软连接会失效

<被链接对象> -> <被链接对象>的地址
<被链接对象>不能改名,不能移动目录,不能改目录中的文件夹名字

软连接自身可以

改名/移动/复制

删除链接

  • rm 链接

    只删除链接,留被链接目标

  • rm -rf 链接

    只删除链接,留被链接目标

  • rm -rf 链接/

    • 被链接的是文件:删链接,留被链接目标
    • 被链接的是文件夹:删除被链接的文件夹下所有东西,留链接、留被链接的文件夹空壳

    故此操作危险,严禁rm -rf 链接/也严禁rm -rf 链接,以免误删

  • rm -rf 某文件夹/rm -rf 某文件夹链接某文件夹/

    • 删除某文件夹/,故其下链接删除,但留被链接目标

下载

wget

断点续传

wget -c -t 0 -O new_name.tar.gz http://www.cnscn.org/old_name.tar.gz

参数解释:

  • -c 断点续传
  • -t 0 反复尝试的次数,0为不限次数
  • -O name_name.tar.gz 把下载的文件命名为new_name.tar.gz
  • http://www.cnscn.org/old_name.tar.gz 要下载的文件的网址

其他参数:

  • –passive-ftp 使用pasv即被动模式下载,只有在搭配保全系统而遇到问题时,才要加此参数
  • –proxy-user=【username】设置登陆代理服务器的用户名
  • –proxy-passwd=【密码】 设置登陆代理服务器的密码
  • –retr-symlinks 下载FTP的符号链接

w3m浏览器

这是一个纯文本浏览器

若访问下载链接需要登录网、输入账号、密码等,wget会失效,可用w3m

  • 访问方法
w3m <网址>
  • w3m下载文件到当前目录(即,你在哪里打开w3m)

  • 安装情况

    已安装于:cpu1, gpu5

    未安装于:gpu4

安装软件

make编译

参考资料

将安装包加压到任意路径得<源文件夹>

configure

执行configure脚本,依给定的参数和系统环境,自动生成Makefile文件

<源文件夹>/unix/<源文件夹>下有configure文件,则cd过去,之后一直在这个目录下操作到make install;若无configure文件,则免去此步

./configure --prefix=<安装路径>
选项
  • --prefix=<安装路径>
    • 默认/usr/local(make install需要sudo权限)
    • 自己的目录下,如 /home/somebody/ENV/shareENV/local,/home/somebody/ENV/localENV/local,无需sudo权限
  • --sys-config=<参数> 指定软件的配置文件
  • --with、--enable、--without、--disable 控制编译
  • ./configure --help 察看`` ./configure`的帮助

make

Makefilemake命令,编译产生可执行文件、资源文件,需调用 gcc 、ld、其他编译依赖程序

大数源码用次编译,perl或python源码调perl或python编译

make clean # 新下载解压的安装包免此步,曾make过的则
make
选项

Makefile文件可能设置多种编译选项,如

make install   # 安装, 也即 make
make uninstall # 卸载软件
报错

报error ,则记下错误代码(不仅在最后一行),原因有:

  • 缺依赖库
  • 可向开发者提交 bugreport(一般在 INSTALL 里有提交地址)

make install

自动拷贝<源文件夹>编译成品到<安装路径>下相应文件夹:

<源文件夹>/
    bin/
        软件名         名可执行(二进制)文件
    share/            资源文件
        软件名/
            各种资源文件
    man/
        man1/
            软件名.1   帮助文件
        man2/
    lib/              静、动态库文件
        软件名.so
    include/
    	软件名/
            .hpp .h 文件
若有configure文件

之前已运行configure文件,故此处无需指定安装路径

make install
若无configure文件

此处需指定安装路径

make install prefix=~/ENV/local  # 复制二进制文件到bin/,man/
# ~/ENV/local 为自定义安装路径,如没有,则安装到/usr/bin,/usr/man,这需要sudo权限

改环境变量

export PATH=$PATH:<安装路径>/bin >> ~/.bashrc # 修改环境变量

我的环境设置

ENV/
    local/
        bin/
        man/
        share/
        lib/
        include/
        ...
    Anaconda3/
    mfsENV/ ——> mfs/server_config/mfsENV/
        local/
            bin/
            man/
            share/
            lib/
            include/
            ...

环境变量($PATH)

修改PATH的语句

  • 添加路径

    export PATH=$PATH:新加路径
    • $PATH是当前"路径1:路径2:路径3",在后面追加":新加路径",把此新路径集赋值给PATH
    • export以导出变量,当即令系统更新PATH,关闭终端后失效source .bashrc后失效
  • 删改路径

    echo $PATH # 先显示环境变量
    # 返回 路径1:路径2:路径3:路径4
    export PATH=路径1:路径2:路径3 # 在改环境变量

修改环境变量

常用3种方法:

  • 直接在命令行输入语句

    只对当前shell有用,关终端就失效

  • 在普通文件(常命名为为.sh脚本文件,也可无后缀)中写语句

    source此文件生效,常用在安装软件和交叉编译

  • 在系统文件(如.bashrc)中写语句

    source此文件或重启shell生效;删除此语句,再source此文件或重启shell,则可恢复

    • /etc/bashrcexport PATH=$PATH:新加路径,对所有用户有效
    • ~/.bashrcexport PATH=$PATH:新加路径,对自己这个用户有效

进程管理

fg、bg、jobs、&、nohup、ctrl+z、ctrl+c 命令

一、&

加在一个命令的最后,可以把这个命令放到后台执行,如

watch  -n 10 sh  test.sh  &  #每10s在后台执行一次test.sh脚本

二、ctrl + z

可以将一个正在前台执行的命令放到后台,并且处于暂停状态。

三、jobs

查看当前有多少在后台运行的命令

jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。

四、fg

将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。

182233000819052

五、bg

将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。

六、kill

  • 法子1:通过jobs命令查看job号(假设为num),然后执行kill %num
  • 法子2:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid

前台进程的终止:Ctrl+c

七、nohup

如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)

ps -aux | grep "test.sh"  #a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分

用户管理

教程

开用户

su
# 输入密码
adduser <用户名>

加管理员权限

  • Ubuntu专用方法(推荐,方便)

将用户加入sudo用户组,使其获得sudo权限。

sudo usermod -aG sudo <用户名>

其中

-a, --append                  append the user to the supplemental GROUPS
                              mentioned by the -G option without removing
                              him/her from other groups
-G, --groups GROUPS           new list of supplementary GROUPS

此方法不会修改/etc/sudoers文件,仅修改 /etc/group 文件中的 sudo 用户组,会变为

sudo:x:27:<用户名1>,<用户名2>,<用户名>
  • 其他linux系统
sudo vim /etc/sudoers
# User privilege specification
root ALL=(ALL) ALL
<用户名> ALL=(ALL) ALL

退出vim按

:wq!

用户管理相关的文件

参考

文件 说明
/etc/passwd 存放用户名和用户信息
/etc/shadow 存放用户密码
/etc/group 存放用户组名称和组信息
/etc/gshadow 存放用户组密码
/etc/skel 默认创建用户时,把该目录下的环境变量文件拷贝到新创建的用户家目录下
/etc/default/useradd useradd的默认配置文件,useradd在创建信用股时会优先读取该文件,会根据这个文件的设置进行处理,
/etc/login.defs 文件主要定义了用户初始化的邮件地址、umask值、用户使用期限。用户UID值等等,这个文件一般不需要改,主要用于普通用户
/etc/sudoers sudo授权配置文件,root可在该配置文件给普通用户授权;vim /etc/sudoers=visudo
/var/db/sudo/…… 下面是以sudo授权用户命名的时间戳文件

用户管理相关的命令

命令 解释说明
useradd 添加用户
userdel 删除用户
usermod 修改用户属性,修改用户的基本信息
groupadd 添加用户组
groupdel 删除用户组
groupmod 修改用户组属性
passwd 修改密码
chage 用来修改账号和密码的有效时间,更改密码属性
su 切换工具
sudo root授权普通用户命令

**说明:**这些命令有很多功能都是一样的,所以挑几个偏重要的命令坐下范例

useradd参数

参数 解释说明
-u 指定创建用户的uid
-g 指定用户所属的组
-G 指定用户所属的附加群组(一对多组)
-c 指定用户说明(就是passwd文件每行以冒号分割第5列)
-s 指定登录shell (/etc/passwd文件每行后面的‘/bin/bash’)
-e 指定账号的有效期限 useradd –e“2016/04/05” 日期格式0000/00/00
-M 不要自动建立用户的登录目录
-d 设定用户的家目录(指定)
-D 修改useradd创建用户时的配置文件/etc/default/useradd

usermod参数

参数 解释说明
-u 更改账户UID
-g 更改用户所属的组(组必须事先存在)
-G 更改用户属于的附加组(一对多组)
-c 增加用户说明(就是passwd文件每行以冒号分割第5列,也可以手工修改)
-s 修改shell (/etc/passwd文件每行后面的‘/bin/bash’)
-e 修改过期时间。加上用户账号、停止日期 日期格格式:0000/00/00
-d 指定用户新的家目录,如果给定-m参数,用户旧的家目录会搬到新的家目录去,如果旧的家目录不存在则会建个新的
-f 账号过期几日后永久停权,当值为0时账号则会呗立刻停权,而值为-1时则会关闭此功能,预设值为-1
-l 变更用户名,其余信息不变 (实例2) [root@beita /]#usermod -l oldboy10 oldboy(改名字差不多,将oldboy改为oldboy10)
-L **冻结用户密码,让其无法登录,实际上就是间接修改/etc/shadow,在密码栏的开头加上!**即表示冻结
-U 取消冻结用户的密码,使之恢复登录;其实就是间接修改/etc/shadow,在密码栏的开头去掉**!**即表示恢复

passwd参数

参数 解释说明
–stdin 从标准输入读取密码(只能root使用) echo “密码” | passwd - -stdin 用户名
-S 列出密码的相关信息,仅有系统管理员才能使用
-n 在n天内不能改密码(最小)
-x 在n天内必须改密码(最大)
-w 密码过期n天后警告
-i 是设定密码过期几日后后停权
-d 删除密码,只有系统管理者才能使用
-i 锁住密码
-u 解开已上锁的账号

chage参数

和passwd的参数大同小异

参数 解释说明
-E 给账户设“过期日期”,日期写法:0000/00/00
-l 查看账户的信息(小写L)
-M 密码保持有效的最大天数
-m 密码保持有效期的最小天数(在n天之内不能改密码)
-W 账户密码到期前。提前收到警告信息的天数
-I(大写i) 停滞时刻:如果一个密码已过期这些天,那么此账号将不可用(设置过期 N天后停权

时区修改

  • 查看时间
date "+%Y-%m-%d-%H:%M:%S"
# 返回 2019-03-06-16:52:38
  • 个人用户修改

获得修改指令

tzselect

一路选择地区,直到得到返回export TZ='Asia/Shanghai',即为修改指令。

将修改指令加到~/.zshenv,则每次用户使用zshenv,时间为此种时间。

  • 整个系统修改
date -R # 再次查看时间
sudo cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
date -R # 再次查看时间,确认已经修改为北京时间
sudo hwclock --systohc # 修改硬件CMOS的时间,不然后面时间还是不准

修改hostname

参考

https://support.rackspace.com/how-to/centos-hostname-change/

永久修改hostname

hostname_change () {
    local new_hostname="$1"
    local old_hostname="$(hostname)"
    sudo hostnamectl set-hostname "${new_hostname}"
    echo "current hostname: "
    hostnamectl | head -n 1
    echo
    sudo sed -E -i "s/(\s)${old_hostname}(\s|$)/\1${new_hostname}\2/g" /etc/hosts
    if [ "$(cat /etc/hosts | grep -E "\s${new_hostname}(\s|$)")" = '' ]
    then
        {
            echo "127.0.0.1 ${new_hostname}"
            cat /etc/hosts
        } | sudo tee /etc/hosts > /dev/null
    fi
    echo "current /etc/hosts:"
    cat /etc/hosts | grep --color 127.0.0.1
}

hostname_change <新hostname>