Linux总结(草稿)


Linux发展历史

Linux是由BSD发展而来,BSD又起源于UNIX。UNIX由贝尔实验室开发, 后来开放给各大学教学使用,其中伯克利大学通过对UNIX源码的研究以及不断的改进与扩展, 推出BSD,并于BSD 4.3版本加入网络模块,极大推进UNIX的发展。但后面由于版权等原因, UNIX与BSD之间发生冲突与法律纠纷,直到1998年,在此期间,芬兰大学生Linus Torvalds 于1991年发布首个Linux版本,linux也趁UNIX与BSD纠纷之际,得到非常快速的发展

Linux的最小组成

Linux最小由内核kernel,文件层次结构FHS,系统启动器bootloader组成,其中内存调度, 进程调度等由内核管理,内核可单独运行,但需要与其它组成相配合。

语言:一般有头文件与库文件,头文件为实现,库文件为声明

Linux的安装与启动

当linux启动时,首先启动内核,内核调用init来完成引导进程,init启动时,它会在/etc/inittab内查找默认的运行级别, 然后运行/etc/rc.d/init.d中运行级别的启动脚本。

分区:一般分根分区/与swap交换分区,根分区的设置是为了备份方便

文件系统:在存储设备上组织文件的方法,负责文件的增删改查,linux上常用文件系统有ext2,ext3,ext4,xfs,btrfs等 …

celery动态添加任务


celery是一个基于Python的分布式调度系统,文档在这 ,最近有个需求,想要动态的添加任务而不用重启celery服务,找了一圈没找到什么好办法(也有可能是文档没看仔细),所以只能自己实现囉

为celery动态添加任务,首先我想到的是传递一个函数进去,让某个特定任务去执行这个传递过去的函数,就像这样

@app.task
def execute(func, *args, **kwargs):
    return func(*args, **kwargs)

很可惜,会出现这样的错误

kombu.exceptions.EncodeError: Object of type 'function' is not JSON serializable

换一种序列化方式

@app.task(serializer='pickle')
def execute(func, *args, **kwargs):
    return func(*args, **kwargs)

结果又出现一大串错误信息

ERROR/MainProcess] Pool callback raised exception: ContentDisallowed('Refusing to deserialize untrusted content of type …

关于网易云音乐个性推荐无法显示的问题


最近在使用网易云音乐时首页的个性推荐总是无法显示,一直在正在为你生成个性化推荐,网上也没找到什么办法,偶然间使用

┌─[jianglin]─[~]
└──╼ rm -rf .cache/netease-cloud-music/
┌─[jianglin]─[~]
└──╼ rm -rf .config/netease-cloud-music/

重新打开登陆后个性推荐就出现了,特此记录

方便的切换emacs主题


作为一个主题控,经常会切换主题,之前切换主题的方式是这样的,M-x,`load-theme`,选中,但是个人认为不够便捷,正好前几天发现了hydra这个插件,也想实践一下

获取主题列表

(setq maple-cycle-themes (mapcar 'symbol-name (custom-available-themes)))

获取当前主题索引

(cl-position (car (mapcar 'symbol-name custom-enabled-themes)) maple-cycle-themes :test 'equal)

获取下一个主题

(setq maple-current-theme-index
      (+ 1 maple-current-theme-index))
(setq maple-current-theme (nth maple-current-theme-index maple-cycle-themes))

加载主题

(load-theme (intern maple-current-theme) t)

最后得到这样的函数

(defun maple/cycle-theme (num)
  (interactive)
  (setq maple-current-theme-index
        (+ num
           (cl-position
            (car (mapcar 'symbol-name custom-enabled-themes)) maple-cycle-themes :test 'equal)))
  (when (>= maple-current-theme-index (length maple-cycle-themes))
    (setq maple-current-theme-index …

emacs笔记


Linux

emacs gui进程放置到后台

EMACS=/usr/bin/emacs
GUI=0
ARGS="$@"
ARRAY=("-nw" "--no-window-system" "--batch" "--help")

for arg in $ARGS; do
    for keyword in "${ARRAY[@]}";do
        if [ $keyword = $arg ];then
            GUI=1
            break
        fi
    done
    if [ $GUI -eq 1 ]; then
        break …

emacs实现智能注释


之前使用emacs时遇到这么一个问题

当前行存在代码折叠时,如果想要注释,必须先选中当前行,否则只能注释代码折叠块的第一行

就像这样

基础注释函数来源于 stackoverflow

(defun comment-or-uncomment-region-or-line ()
  "Comments or uncomments the region or the current line if there's no active region."
  (interactive)
  (let (beg end)
    (if (region-active-p)
        (setq beg (region-beginning) end (region-end))
      (setq beg (line-beginning-position) end (line-end-position)))
    (comment-or-uncomment-region beg end)))

在此函数的位置上进行修改,刚开始使用

(when (hs-already-hidden-p)
    (evil-visual-line))

但是一直没得到想要的效果,后来修改了一下,使用

(when (hs-already-hidden-p)
  (progn
    (end-of-visual-line)
    (evil-visual-state)
    (beginning-of-visual-line)))

意思就是如果当前位置存在代码折叠,先选中当前行,然后注释整个选中区域

因为光标被移动到首位,我对这个不太在意,如果有在意的话,可以使用 …

使用flask实现一个简单的图片上传存储服务


GitHub地址: https://github.com/honmaple/maple-file

maple-file

使用flask实现的一个简单的图片上传服务

设计初衷

对于图片的存储,有很多选择,一般采用云服务如(七牛,又拍等),但是国内的服务像七牛 自定义域名竟然需要域名备案(Excuse me,当初就是因为备案麻烦才选择国外的),而且浪费了我十块钱,

而我又想像七牛一样可以直接在本地就可以上传图片,找来找去,没有找到一个比较合适的,所以花两天时间自己写了一个

使用

由于初衷是本地脚本就可以发布,所以没有前端界面,等以后有时间了再加上

API

  • /api/login
    • POST 登录 …

修改agetty启动参数自动登陆linux


环境: archlinux 参考

需求

想要Linux启动后默认以指定用户登陆,不用输入用户名,可以直接输入密码进入系统

实现

man agetty

修改以下文件

/sudo:root@localhost:/etc/systemd/system/getty.target.wants/[email protected]

自动登陆系统(用户名密码都不用输)

ExecStart=-/sbin/agetty -a username --noclear %I $TERM

自动登陆系统(仅输入密码)

ExecStart=-/sbin/agetty --skip-login --login-options "username" --noclear %I $TERM

linux终端常用快捷键


  1. 移动光标快捷键
    ctrl+f	向前移动一个字符
    ctrl+b	向后移动一个字符
    alt+f	向前移动一个单词
    alt+b	向后移动一个单词
    ctrl+a	移动到当前行首
    ctrl+e	移动到当前行尾
    ctrl+l	清屏,并在屏幕最上面开始一个新行
    
  2. 编辑命令行快捷键
    ctrl+d	删除当前的字符
    ctrl+t	交换当前字符和前一个字符的位置
    alt+t	交换当前单词和前一个单词的位置
    alt+u	把当前单词变成大写
    alt+l	把当前单词变成小写
    alt+c	把当前单词变成首字母大写的单词
    ctrl+v	添加一个特殊字符,例如,要添加一个制表符,按ctrl+v+tab
    
  3. 剪切、粘贴快捷键
    ctrl+k	剪切文本直到行的末尾
    ctrl+u	剪切文本直到行的起始
    ctrl+w	剪切光标前的单词
    alt+d	剪切光标后的单词 …