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权限
- 默认/usr/local(
--sys-config=<参数>
指定软件的配置文件--with、--enable、--without、--disable
控制编译./configure --help
察看`` ./configure`的帮助
make
依Makefile
用make
命令,编译产生可执行文件、资源文件,需调用 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/bashrc
写export PATH=$PATH:新加路径
,对所有用户有效 - 在
~/.bashrc
写export 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(是命令编号,不是进程号)将选中的命令调出。
五、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>