用户管理
每个用户都有一个唯一用户ID(大于等于零的整型数)
二进制 0-1
十进制 0-9
八进制 0-7
十六进制 0-9 a-f
超级管理员用户 root 0
系统用户 1 - 500
普通用户 501 - 65535
查看当前登录用户的ID:id
切换用户: su
不完全切换: su kyo
完全切换: su - kyo
Linux特点: 一切皆于文件
用户信息配置文件:
/etc/passwd
root:x:0:0:root:/root:/bin/bash
第一个字段: 用户名
第二个字段: 早期密码字段
第三个字段: 用户ID(UID)
第四个字段: 所属组的ID(GID)
第五个字段: 描述
第六个字段: 用户家目录
第七个字段: 登录运行程序(SHELL)
用户密码配置文件:
/etc/shadow
用户组配置文件:
/etc/group
root:x:0:
第一个字段: 组名
第二个字段: 用户组密码
第三个字段: 组ID
第四个字段: 组成员列表
用户组密码配置文件:
/etc/gshadow
对用户操作的命令:
useradd 添加用户
userdel 删除用户
passwd 修改密码
手动创建用户:
vim /etc/passwd
kyo:x:500:500:kyo:/home/kyo:/bin/bash
vim /etc/group
kyo:x:500:
vim /etc/shadow
grub-md5-crypt 生成密码
kyo:$1$qK.xw$YmywT0cXEqF49C5TKTqOc/:17036:0:99999:7:::
vim /etc/gshadow
kyo:!::
mkdir /home/kyo
cp /etc/skel/.bash* /home/kyo/
chown kyo:kyo /home/kyo -R
chown 700 /home/kyo -R
===================================================
权限
ls -l /etc/passwd
-rw-r--r-- 1 root root 1618 8月 25 14:39 /etc/passwd
第一段代表文件类型和权限
第二段代表硬链接数
第三段代表文件所属用户
第四段代表文件所属用户组
第五段代表文件大小 字节
1G = 1024M
1M = 1024K
1K = 1024字节
第六段代表文件最后修改时间
第七段代表文件名
-rw-r--r-- 文件类型和权限
- 文件类型
- 普通文件
d 文件夹
l 软链接
c 字符设备文件
b 块设备文件
p 管道文件
s 套接字文件
rw-r--r-- 文件权限
分成三段:
rw- 所属用户对此文件的操作权限(u)
r-- 所属用户组对此文件的操作权限(g)
r-- 其它用户对此文件的操作权限(o)
r 读
针对文件, 是否能对此文件进行读取内容
针对目录, 是否能ls列出目录内容
w 写
针对文件,是否能对此文件进行修改
针对目录,是否能在此目录里创建文件或子目录
x 执行
针对文件,可执行文件没有x权限是不能运行
针对目录,是否能切换进目录(cd)
设置的权限对超级管理员用户没有意义
修改权限:chmod
chmod u=r-x,g=r-x,o=r-- file
chmod u+x,g+w,o-w file
chmod 0755 file
chmod u=r-x,g=r-x,o=r-- 目录路径 -R
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
修改文件所属用户: chown
chown 用户名:组名 文件路径
chown 用户名:组名 目录路径 -R
权限掩码:umask
打印当前权限掩码: umask
修改当前权限掩码: umask 新的权限掩码
创建文件的默认权限:
普通文件:0666 rw-rw-rw-
目录: 0777 rwxrwxrwx
实际文件权限默认权限减去权限掩码
权限掩码为: 0002
普通文件: 0664
目录: 0775
linux系统管理习惯:
强制普通用户登录
如何将普通用户加入到sudoers文件,使普通用户能使用系统管理员命令(用法: 在命令前加sudo )
首先切换root用户,visudo
自动打开文件编辑,找到root ALL=(ALL) ALL并且复制修改用户名为普通用户即可
特权位
默认执行命令,命令的运行权限是当前登录用户
有了特权位的命令,运行权限是命令的所属用户
chmod u+s 可执行文件
chmod g+s 可执行文件
ls -l列表显示用户权限有s, 小写s代表文件有执行权限,大写s代表文件没有执行权限
例:切换用户要验证密码,但/etc/shadow没有任何权限(不能给权限,否则任何用户都可以去修改别人密码)
把su命令所属用户设置为root并且设置用户特权位,让su运行权限为root
粘贴位 让用户不能操作其它用户的东西
应用场景:目录具备所有权限,可以让任何用户操作此目录, 但用户创建的文件不能被其它用户操作(编辑/删除)
只能针对目录的其它用户权限(o)
chmod o+t 目录路径
===================================================
网络基本配置
ping 检查与其它主机是否连通
ifconfig 查看/配置网卡信息
ifconfig 列出所有网卡信息
lo 回环网卡,代表本机本身
eth0 第一张有线网卡
wlan0 第一张无线网卡
ifconfig eth0 获取指定网卡信息
ifdown eth0 关闭网卡
ifup eth0 开启网卡
dhclient 自动获取IP地址
dhclient eth0 让eth0网卡自动获取IP地址
自动获取过再获取需要重启网络
mii-tool 检查网卡网线是否连通
mii-tool eth0
手动设置IP地址:
临时:
ifconfig eth0 3.3.3.199 netmask 255.255.255.0
永久:
eth0网卡的配置文件
vim /etc/sysconfig/network-script/ifcfg-eth0
DEVICE="eth0" #网卡设备名
BOOTPROTO="static" #代表静态IP
BOOTPROTO="dhcp" #代表动态IP
HWADDR="68:B5:99:F1:FB:4D" #代表网卡硬件地址
ONBOOT="yes" #代表网卡是否开机启动
TYPE="Ethernet" #代表网卡类型 以太网
IPADDR=3.3.3.9 #代表网卡IP地址
NETMASK=255.255.255.0 #代表网卡子网掩码
GATEWAY=3.3.3.1 #网关
重启电脑或重启网络才能生效
service network restart
hostname 主机名(尽量使用域名格式)
临时修改主机名: hostname 新主机名
永久修改主机名: vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=新的主机名(域名形式)
域名或主机名的本地解析文件: vim /etc/hosts
格式:ip地址 域名或主机名
::1 主机名(代表图形界面, 如果图形界面慢,检查::1对应的主机名是否正确)
域名解析配置文件: vim /etc/resolv.conf
nameserver 223.5.5.5
nameserver 223.6.6.6
nameserver 8.8.8.8
网络排错:
第一步: 检查网线 mii-tool eth0
第二步: 检查IP地址 ifconfig eth0
本机IP不通(网卡出错, 操作系统的TCP/IP协议栈错误, 多张网卡设置同网段IP)
第三步: 检查与网关是否连通 ping 网关(3.3.3.1)
第四步: 检查外网是否连通 ping 223.5.5.5(阿里云域名解析服务器(DNS))
提示: connect: 网络不可达(网关问题)
route -n 检查是否设置网关
route add default gw 3.3.3.1(网关地址)
第五步: 检查域名解析是否正常 ping www.baidu.com
提示:unknown host(没有添加DNS)
vim /etc/resolv.conf
nameserver 223.5.5.5
作业:
1. 将主机设置静态IP地址
2. 手动创建一个用户
3. vimtutor看完
定时任务: crontab
ubuntu: service cron status
centos: service crond status
编辑当前用户的定时任务: crontab -e
当出当前用户的定时任务: crontab -l
当出指定用户的定时任务: crontab -l -u root
删除当前用户的所有定时任务: crontab -r
删除当前用户的所有定时任务(提示是否删除): crontab -i
设定全局配置文件: /etc/crontab
分钟 小时 日 月 星期 执行用户 执行命令
* * * * * root echo "hello" > /dev/pts/24
* 代表每分钟、每小时、每日、每月、每星期
, 分隔时间 19,24 * * * * 每小时的19和24执行
- 时间段 19-24 * * * * 每小时的19分到24之间每分钟都执行
/n 每隔n个单位 */2 * * * * 每小时的每两分钟去执行
星期与日期是或的关系
*/30 */2 15 6 7
======================================================================
ssh远程管理:
服务器必须开启sshd服务
ubuntu: apt install openssh-server
centos: yum install sshd
ssh sshd的客户端
ssh [email protected] 远程使用you用户登录3.3.3.135
远程登录的前提:
知道远程管理电脑的IP
知道远程管理电脑的用户名及密码
远程管理电脑必须开启sshd服务
远程管理电脑的端口号(默认为22)
为了提高安全: 使用证书登录
生成证书(公钥/私钥)
公钥可以给任何人,使用公钥必须使用私钥进行解密
ssh-keygen 默认生成在家目录的.ssh目录下 也可以指定私钥密码(默认为空密码)
把公钥复制到服务器上
scp id_rsa.pub 3.3.3.135:~
登录3.3.3.135机执行下面命令:
mkdir -p ~/.ssh
cat ~/.id_rsa.pub >> ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys
ssh安全设置:
sshd服务的配置文件 /etc/ssh/sshd_config
1. 改变端口号
Port 22(将22改成自定义端口)
2. 不允许root登录
PermitRootLogin no
3. 只允许证书登录,不允许密码登录
PasswordAuthentication no
重启sshd服务才能生效: service sshd restart
ssh工具格式:ssh 用户名@IP地址 -p 端口号 -i 私钥路径
ssh config配置:简化ssh登录操作
vim ~/.ssh/config
Host 135 主机自定义名
HostName 3.3.3.135 主机IP或域名
Port 9999 主机端口号
User you 登录用户名
PubKeyAuthentication yes 证书登录
IdentityFile /kyo/135.key 私钥路径
输入: ssh 135 就可以登录3.3.3.135
-----------------------------------------------------------------------------
git工具 版本控制工具(svn) 代码 团队开发协作工具
github 开源中国osc
集中管理 项目代码放在服务嚣 大家与服务嚣
从服务嚣上更新代码下来
进入代码编辑
提交修改到服务嚣(如果发现服务器有更新必须先更新代码合并代码再提交)
不能离线工作
分布式管理
服务器只是作为中转站
服务器上项目是只一份拷贝,所有开发人员都对此项目有一份拷贝
独立工作,不依赖服务嚣
也可以使用集中管理模式来开发
日志查询
版本切换无成本
分支功能 基本上无成本
官网: git-scm.com
git官方中文文档:http://g.iprintf.com
git基本配置:
/etc/gitconfig 系统全局配置 git config --system
~/.gitconfig 当前用户的配置 git config --global
当前仓库目录.git/config
一般针对当前用户配置:
配置仓库提交者及email
git config --global user.name "kyo"
git config --global user.email "[email protected]"
配置git使用的文本编辑器
git config --global core.editor vim
列出当前仓库使用配置:
git config --list
列出当前仓库某个配置的值:
git config user.name
创建git命令别名:
git config --global alias.c config
git config --global alias.c 'config core.editor'
获取配置帮助信息:
git config --help
git help config
man git config
git的基本操作:
仓库创建: git init
在创建仓库目录下运行: git init
仓库克隆: git clone
默认在当前目录下创建远程仓库名
git clone file:///opt/git-srv
克隆远程仓库到当前指目录
git clone file:///opt/git-srv mygitname
仓库状态:git status
工作目录 当前工作目录
暂存区 git add
仓库 git commit
将文件添加至仓库:git add
添加当前仓库所有未暂存的文件, 不包括隐藏文件
git add *
忽略文件 在当前仓库路径创建.gitignore
vim .gitignore
fa.wmv
移除操作: git rm
git rm -f 强制删除
git rm -r 删除目录
git rm --cached 从暂存区删除
移动:git mv
git mv old_name new_name
提交修改: git commit
git commit -m "编写提交说明"
弹出vim编写提交历史: git commit
第一行为标题,第二为空行,第三行后为详细说明
修改最后一次提交
git commit --amend
查看差异: git diff
对比最后一次提交与本此工作目录的差异
查看提交历史:git log
git log -p 查看每次提交的内容差异
git log -2 查看最近两次提交
git log --oneline 简约一行显示提交历史
git log --grep add 查看有关键词add的提交历史
单行显示历史并且显示所有分支信息(图形显示分支结构)
git log --oneline --decorate -all -graph
远程仓库:
列出远程仓库
git remote
列出远程仓库的url
git remote -v
添加远程仓库
git remote add 远程仓库名 仓库地址
拉取远程仓库数据 (不会合并分支)
git fetch 远程仓库名
git merge 远程仓库名/远程仓库分支名
拉取并合并远程仓库数据
git pull 远程仓库
推送当前分支到服务器
git push 远程仓库名 推送分支
修改远程仓库地址
git remote set-url 远程仓库名 新的远程仓库地址
删除远程仓库
git remote rm 远程仓库名
服务嚣搭建git仓库:
服务器:
添加git用户,修改git用户家目录为git仓库根目录,修改git的bash为git-shell
在git用户家目录创建一新文件夹(git-srv)并且切换进目录
git init --bare
客户端:
添加远程仓库
git remote add iprintf [email protected]:/git/git-srv
git pull iprintf
标签 tag
列出仓库标签
git tag
创建标签
git tag 标签名
git tag -a 标签名 -m "标签说明"
查看标签详细信息
git show 标签名
删除标签
git tag -d 标签名
指定commit设置标签
git tag -a 标签名 commit标识
检出标签
git checkout -b 新分支名 标签名
分支 branch
列出分支
git branch
列出分支对应提交
git branch -v
创建分支
git branch 分支名
创建分支并且切换分支
git checkout -b 分支名
切换分支
git checkout 分支名
删除分支
git branch -d 分支名
合并分支
git merge 合并的分支
重置 reset
暂存区 --mixed 默认
索引区 --soft
工作目录 --hard 真正会改变实际文件,慎用
操作历史:reflog
git reflog
git reset commit --hard
-------------------------------------------------------------------------
安装chromium浏览器:
apt install chromium-browser
cd ~
git clone http://g.iprintf.com/iprintf/vimium.git
chromium-browser &
打开设置 -> 扩展 -> 开发者模式 -> 加载选择家目录下载的vimium
? 获取帮助
Shell脚本开发: SHELL 一种软件的统称,当前系统使用bash Shell Bash Shell的特点: tab键命令补全 命令历史(执行命令历史) 命令别名 bashrc配置文件 Bash Shell脚本 脚本编程语言: 变量 方便替换 流程控制 分支结构/循环结构 函数 代码打包 数组 扩展变量 学习编程流程: 找语言编程入口 打印hello world 变量的定义 - 数据类型 - 运算符 流程控制(if/case/for/while) 函数 数组 脚本对应一个普通文件,可以通过解析器来执行 Bash Shell的解析器:/bin/bash Bash Shell脚本文件的格式: 第一行指定脚本的解析嚣路径 #!/bin/bash 一行一个命令顺序向下编写与执行 通过;将多条命令隔开写在一行中 Bash Shell变量: 变量命令规则: 大小写严格区分 数字与字母组合但不能以数字开头 可以和特殊字符组合(只推荐使用下划线), 可以以特殊字符开头 变量的类型:字符串类型 变量的定义: 变量名=变量值 变量的访问: $变量名 / ${变量名} 变量的删除: unset 变量名 变量定义等于号两边不能有空格 环境变量(bash获取操作系统的信息保存到环境变量中) env 列出所有环境变量 PS1 控制命令提示符 \u 当前登录用户名 \h 当前主机名 \w 当前路径 \W 当前目录名 PATH 控制所有命令的路径, 不用输入命令的全路径 新建环境变量: export 环境变量名=环境变量值 普通变量与环境变量的区别: 环境变量会影响子进程,普通变量不会影响子进程 子进程会复制父进程的环境变量, 子进程对环境变量修改不会影响父进程 bash shell脚本是开启一个新进程运行 通过.或source命令去执行脚本是在当前进程执行 变量的特殊访问方法: ${变量名} 输出变量值 ${变量名#*分隔符} 输出变量值中第一个分隔符后面的内容 ${变量名##*分隔符} 输出变量值中最后一个分隔符后面的内容 ${变量名%分隔符*} 输出变量值中最后一个分隔符前面的内容 ${变量名%%分隔符*} 输出变量值中第一个分隔符前面的内容 ${变量名:起始数:个数} 输出变量值从起始数开始指定个数字符 ${变量名/指定/替换} 输出变量值将指定第一个关键词替换 ${变量名//指定/替换} 输出变量值将指定全部关键词替换 ${#变量名} 输出变量值的长度 练习: 编写脚本获取当前有线网卡的IP地址 Bash Shell的特殊字符: * 通配符 代表所有 ! 执行命令历史 . 代表当前路径 .. 代表上一级目录 : 永真 - 在外部命令后代表短参数 & 在后台运行程序, 程序后加& $ 访问变量 # 注释, 在命令前加不会执行此命令 / 根目录 ~ 家目录 | 管道 > 重定向 >> 追加 = 变量赋值 ; 命令结束符 \ 脱义单个字符 "" 不完全的批量脱义 $不脱义 '' 完全的批量脱义 `` 将引起来内容当作命令去执行,将命令执行的结果替换 [] 条件判断 {} 范围 {1..10}代表1到10的数字 {a..z}代表a到z字母 $() 功能与反引号一样,替代反引号 Bash Shell的内置变量: $0 代表脚本名称 $1...$n 代表脚本的参数 $# 保存脚本的参数个数 $@/$* 保存脚本的所有参数 $$ 保存当前脚本的PID $? 输出上一条命令运行是否正确(0代表正确,非0代表错误) Bash Shell的输入输出: 输出 echo/printf 输入 read -p 指定输入提示语句 -s 关闭回显, 输入不显示 -n 指定输入字符个数 -t 指定输入的时间(秒) cat如果没有跟文件会读标准输入 重定向cat到文件即标准输入重定向到文件 脚本中生成其它文件: cat > yum.repo << EOF [kyo] name=kyo baseurl=http://3.3.3.1/centos1 http://3.3.3.1/centos2 enabled=1 gpgcheck=0 EOF 双向重定向: tee 标准输出和文件两向输出 将ls -l的标准输出重定向到test文件中并且输出到终�
文章浏览阅读66次。一图流理解:Linux系统启动过程中都经历了什么?将主要过程提取出来,接下来我们将按顺序分析每个条目每一级引导都是查找并执行下一级动作BIOS自检 检测硬件故障;选择磁盘驱动器读取MBR主引导记录(Master Boot Record)读取GRUB菜单选择启动哪个操作系统/内核启动内核初始化设备运行 init初始化操作系统运行其它程序启动完成一.MBR主引导记录,一般是磁盘的第一个扇区,编号..._c 如何读mbr
文章浏览阅读412次。广义线性回归及正则化方法_bishop书后习题
文章浏览阅读2.2k次,点赞3次,收藏17次。【eclipse技巧】:AmaterasUML工具使用、eclipse保存自动格式化设置、代码自动补全提示设置_amaterasuml
文章浏览阅读1.3k次,点赞2次,收藏13次。executor-memory 默认1G,Memory per executor (e.g. 1000M, 2G) (Default: 1G) ,每个executour的内存。–executor-memory 默认1G,Memory per executor (e.g. 1000M, 2G) (Default: 1G) ,每个executour的内存。Yarn的回顾:Driver------AppMaster------RM-----NodeManager—Continer----Task。_pyspark
文章浏览阅读446次。scrapyScrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。_当你准备启动一个项目时,可以从这个教程开始
文章浏览阅读4.7k次,点赞11次,收藏18次。项目场景:在之前对树莓派进行PPP拨号上网/4G上网后,需要对树莓派中采集到的数据远程上传,并能接收云端软件下达的指令。然而在实现过程中,我们并不能够直接通过ITCP/IP通信实现数据的远程传输,还需要一个服务器作为中间桥梁,将云端主机的IP端口映射在全网上,这样树莓派才能通过映射后的IP地址与云端主机建立连接,实现数据的远程传输。花生壳花生壳是一款能够免费进行内网穿透与端口映射的服务器工具,可以在官网上直接搜索无需配置。支持多种通信格式,这里我们使用TCP通信类型。网络调试助手由于项目主体_树莓派有sim卡模块吗
文章浏览阅读8.8k次,点赞5次,收藏15次。搭建Vue3框架_前端框架vue如何搭建
文章浏览阅读4.7k次,点赞23次,收藏77次。汉诺塔问题的递归思路:将 n 个圆盘分为 n-1 (即除最低层的圆盘)与 1 (即最底层的圆盘),将n-1个圆盘移动到中转位置,将1移动到目的位置,再将 n-1 分为 (n-1)- 1与 1,将(n-1)- 1 移动到中转位置,将1移动到目的位置_汉诺塔递归
文章浏览阅读8.3k次,点赞4次,收藏58次。01—蓝牙AOA定位技术原理2019 年初,蓝牙技大联盟宣布蓝牙 5.1 引入了新的“寻向”功能,这个功能可检测蓝牙信号的方向,将大幅提高蓝牙定位的精确度,提供更好的位置服务, 结束了以往..._aoa 定位算法 java
文章浏览阅读2.5k次。《近匠》第64期,Wijmo 5是由GrapeCity旗下ComponentOne公司开发的新一代HTML5/JavaScript控件库。本期近匠采访了Wijmo 5 CTO Bernardo Castilho先生,听他讲述从Web到移动的25年编程生涯,以及Wijmo 5的开发故事。
文章浏览阅读494次。2019-11-11 16:37:04机器之心发布机器之心编辑部强化学习通过使用奖励函数对智能体的策略进行优化,深度强化学习则将深度神经网络应用于强化学习算法。深度强化学习由于其可扩展性,受到科研界和工业界越来越多的关注,其应用包括简单的基于图像的游戏,和高度复杂的游戏如星际争霸,以及棋牌类游戏如围棋、德州扑克等,在机器人控制领域也逐渐被科研人员采用。近日,为了让工业界能更好地..._tensorlayer 2.0+
文章浏览阅读5.6k次,点赞4次,收藏31次。大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。今天给大侠带来了Xilinx vivado中各个文件的含义,话不多说,上货。在Xilinx ISE中不同的操作都有不同的文件类型对应,例如综合、布局、布线、生成比特流等都会产生特定格式的文件,在vivado中也是一样,只不过在vivado中,文件的格式相比于ISE中更加统一。1,.dcp文件,在ise中每个过程都会产生特定格式.._vivado 文件集