一些Linux常见问题
git仓库使用
1、(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库(项目名称需要一致)
git init
2、把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点“.”,意为添加文件夹下的所有文件
git add .
3、用命令 git commit告诉Git,把文件提交到仓库。引号内为提交说明
git commit -m 'first commit'
4、关联到远程库
git remote add origin 你的远程库地址
如:
git remote add origin https://github.com/cade8800/ionic-demo.git
5、获取远程库与本地同步合并(如果远程库不为空必须做这一步,否则后面的提交会失败)
git pull --rebase origin master
6、把本地库的内容推送到远程,使用 git push命令,实际上是把当前分支master推送到远程。执行此命令后会要求输入用户名、密码,验证通过后即开始上传。
git push -u origin master
7、状态查询命令
git status
screen命令
screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session
screen -d -r yourname -> 结束当前session并回到yourname这个session
在每个screen session 下,所有命令都以 ctrl+a 开始。
Ctrl+a ? -> 显示所有键绑定信息
Ctrl+a c -> 创建一个新的运行shell的窗口并切换到该窗口
Ctrl+a n -> Next,切换到下一个 window
Ctrl+a p -> Previous,切换到前一个 window
Ctrl+a 0..9 -> 切换到第 0..9 个 window
Ctrl+a [Space] -> 由视窗0循序切换到视窗9
Ctrl+a C-a -> 在两个最近使用的 window 间切换
Ctrl+a x -> 锁住当前的 window,需用用户密码解锁
Ctrl+a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
Ctrl+a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
Ctrl+a w -> 显示所有窗口列表
Ctrl+a t -> time,显示当前时间,和系统的 load
Ctrl+a k -> kill window,强行关闭当前的 window
Ctrl+a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
C-b Backward,PageUp
C-f Forward,PageDown
H(大写) High,将光标移至左上角
L Low,将光标移至左下角
0 移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
Ctrl+a [ -> paste,把刚刚在 copy mode 选定的内容贴上
eps转png等
gs 命令
把eps格式转换为jpeg,png,gif等众多格式,还是使用GhostScript,在终端输入
gs -dNOPAUSE -dBATCH -dEPSCrop -sDEVICE=png256 -sOutputFile=tiger.png tiger.eps
convert命令
convert命令可以用来转换图像的格式,支持JPG, BMP, PCX, GIF, PNG, TIFF, XPM和XWD等类型,下面举几个例子:
convert xxx.jpg xxx.png 将jpeg转成png文件
convert xxx.gif xxx.bmp 将gif转换成bmp图像
convert xxx.tiff xxx.pcx 将tiff转换成pcx图像
还可以改变图像的大小:
convert -resize 1024x768 xxx.jpg xxx1.jpg
将图像的像素改为1024*768,注意1024与768之间是小写字母x
convert -sample 50%x50% xxx.jpg xxx1.jpg
将图像的缩减为原来的50%*50%
旋转图像:
convert -rotate 270 sky.jpg sky-final.jpg
将图像顺时针旋转270度
使用-draw选项还可以在图像里面添加文字:
convert -fill black -pointsize 60 -font helvetica -draw 'text 10,80 "Hello, World!"' hello.jpg helloworld.jpg
在图像的10,80 位置采用60磅的全黑Helvetica字体写上 Hello, World!
python使用
有很多软件可以拿来写python,但是在个人pc和集群上比较推荐Anaconda
Anaconda可以在集群上设置虚拟的python环境和版本,并且可以在虚拟环境下安装各种python库,很方便。
首先从Anaconda官网下载sh文件进行安装。
包管理:
- 列出所有包
conda list
- 更新包
conda upgrade package_name
,更新所有包conda upgrade --all
- 安装包 (如numpy)
conda install numpy
,可同时安装多个包:conda install numpy scipy pandas
,或限定版本conda install numpy=1.9
- 卸载包
conda remove package_name
环境管理:
conda可以创建隔离的python开发环境,并对环境进行管理,这样你就可以针对不同的项目使用不同的环境。还可以导出环境,便于项目迁移。
- 创建环境:在终端中使用
conda create -n env_name list of packages
。在这里,-n env_name
设置环境的名称(-n 是指名称),而list of packages
是要安装在环境中的包的列表。例如,要创建名为 my_env 的环境并在其中安装 numpy,请键入conda create -n my_env numpy
。 - 指定python版本:
conda create -n py3 python=3
- 进入环境:
activate env_name
(windows下) - 退出环境:
deactivate
- 导出环境文件:
conda env export > environment.yaml ,environment.yaml
为导出的文件名 - 使用环境文件创建环境:
conda env create -f environment.yaml
- 列出所有环境:
conda env list
- 移除环境:
conda env remove -n env_name
(有很多情况下,需要做Python环境的迁移,比如在本地开发环境搭建了某套架构,并安装了需要依赖模块,那么就需要将原有的环境导出到目的机器上,可以使用pip freeze导出)
-
导出环境,在开发机器上设置
pip freeze > requirements.txt
将包依赖信息保存在requirements.txt文件中。 -
导入新环境
pip install -r requirements.txt
pip就会自动从网上下载并安装所有包。
Linux文件权限
ls -l 显示权限
ls -l中显示的内容如下:
1 | -rwxrw-r‐-1 root root 1213 Feb 2 09:39 abc |
- 10个字符确定不同用户能对文件干什么
- 第一个字符代表文件(-)、目录(d),链接(l)
- 其余字符每3个一组(rwx),读(r)、写(w)、执行(x)
- 第一组rwx:文件所有者的权限是读、写和执行
- 第二组rw-:与文件所有者同一组的用户的权限是读、写但不能执行
- 第三组r–:不与文件所有者同组的其他用户的权限是读不能写和执行
也可用数字表示为:r=4,w=2,x=1 因此rwx=4+2+1=7
- 1 表示连接的文件数
- root 表示用户
- root表示用户所在的组
- 1213 表示文件大小(字节)
- Feb 2 09:39 表示最后修改日期
- abc 表示文件名
改变权限的命令
chmod 改变文件或目录的权限
- chmod 755 abc:赋予abc权限rwxr-xr-x
- chmod u=rwx,g=rx,o=rx abc:同上u=用户权限,g=组权限,o=不同组其他用户权限
- chmod u-x,g+w abc:给abc去除用户执行的权限,增加组写的权限
- chmod a+r abc:给所有用户添加读的权限
Linux下的chattr和lsattr命令
文件的隐藏属性
在Linux下我们可以用stat命令查看文件的相关属性信息,除了这些属性之外,Linux下的文件还有一些隐藏的属性,我们可以用lsattr命令来查看:
1 | $ lsattr mybook |
上面这条命令的输出表示mybook文件具有扩展属性a和e,即只能向该文件添加数据,而不能删除,并且该文件使用extends来映射磁盘块。显然,将那些只允许增长但不允许修改和删除的文件设置为这样的隐藏属性是非常有利于保护数据安全的。
需要说明的是,文件的隐藏属性只对ext2/ext3/ext4文件系统完整有效,其他文件系统可能仅支持部分隐藏属性或者根本不支持隐藏属性。
chattr
用chattr命令可以改变一个文件的隐藏属性。其语法格式为:
1 | chattr [ -RVf ] [ -v version ] [ mode ] files… |
下面给出几个选项的含义:
选项 | 含义 |
---|---|
-R | 递归更改目录下所有子目录和文件的属性 |
-V | 显示详细信息 |
-f | 忽略大部分错误信息 |
-v version | 设置文件的档案号码 |
mode | 设置文件的隐藏属性,其格式为±=[acdeijstuACDST] |
最关键的是在[mode]部分,[mode]部分的格式是±=[acdeijstuACDST],这部分是用来设置文件的属性。其中+表示在原有参数设定基础上追加参数;-表示在原有参数设定基础上移除参数;=表示更新为指定参数。下面列出几个常用的属性参数的含义:
属性 | 含义 |
---|---|
-A | 文件的atime(access time)不可被修改,这样可以减少磁盘I/O数量,对于笔记本电脑有利于提高续航能力 |
-S | 硬盘I/O同步选项,功能类似sync |
-a | 即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性 |
-i | 文件不能被删除、改名、设定链接关系,同时不能写入或新增内容(即使是root用户)。只有root才能设定这个属性 |
-c | 即compresse,文件会自动的经压缩后再存储,读取时会自动的解压 |
-d | 即no dump,设定文件不能成为dump程序的备份目标 |
-j | 即journal,设定此参数使得当通过mount参数”data=ordered”或”data=writeback”挂载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为data=journal,则该参数自动失效 |
-s | 即secure,保密选项。设置了s属性的文件在被删除时,其所有数据块会被写入0 |
-u | 即undelete,反删除选项。与s相反,文件在被删除时,其所有的数据块都保留着,用户今后可以恢复该文件 |
例如这条命令,可以将MySecretDir目录下的文件设置为不允许任何人修改:
1 | $ sudo chattr -R =i ~/MySecretDir |
lsattr
用lsattr命令列出文件的隐藏属性。其语法格式为:
1 | lsattr [ -RVadv ] [ files… ] |
下面给出几个选项的含义:
选项 | 含义 |
---|---|
-R | 递归显示目录下所有子目录和文件的属性 |
-V | 显示lsattr程序的版本信息 |
-a | 显示所有文件的属性信息,包括以.开头的文件 |
-d | 显示目录的属性,而不是目录下的文件的属性 |
-v | 显示文件的档案号码 |
例如,下面这条命令显示MySecretDir目录的隐藏属性:
1 | $ lsattr -Rd MySecretDir/ |